Compare commits

...
73 Commits
Author SHA1 Message Date
Lauri Ojansivu ed8bca5394 Update translations (es). 2019-02-09 00:04:51 +02:00
Lauri Ojansivu 9458f4011d v2.19 2019-02-09 00:02:49 +02:00
Lauri Ojansivu f1bd36a3b8 - Remove oplog. Need to think how to do it properly.
Thanks to xet7 !
2019-02-08 23:58:13 +02:00
Lauri Ojansivu f060e02fc0 v2.18 2019-02-08 20:56:45 +02:00
Lauri Ojansivu 0fa2e5d3a0 Add commit link to changelog. 2019-02-08 20:52:28 +02:00
Lauri Ojansivu 6d0055ecb5 Add issue link to changelog. 2019-02-08 20:49:39 +02:00
Lauri Ojansivu 2d3ce9c290 Add commit link to changelog. 2019-02-08 20:48:05 +02:00
Lauri Ojansivu 796b276d02 Update changelog. 2019-02-08 20:37:30 +02:00
Lauri Ojansivu ed98b5c807 Update changelog. 2019-02-08 20:09:42 +02:00
Lauri Ojansivu f1da7dcb0c Merge pull request #2174 from bentiss/fix-sw-reordering
Fix swimlanes sorting
2019-02-08 19:49:50 +02:00
Lauri Ojansivu 35a539eee2 Update translations. 2019-02-08 19:48:12 +02:00
Lauri Ojansivu 79ffb7d502 - Add oplog to snap mongodb.
Thanks to xet7 !
2019-02-08 19:43:21 +02:00
Benjamin Tissoires a2e6f621a2 Fix swimlanes sorting
Since 7cc185ac "Properly fix horizontal rendering on Chrome and Firefox"

The rendering of the new design of the swimlanes was correct, but this
commit broke the reordering capability. Having the swimlane header at
the same level than the lists of cards makes the whole sortable
pattern fail.

2 solutions:
- revert to only have 1 div per swimlane. But this introduces the firefox
  bug mentioned in 7cc185ac, so not ideal
- force the sortable pattern to do what we want.

To force the sortable pattern, we need:
- add in the helper a clone of the list of cards (to not just move the
  header)
- make sure the placeholder never get placed between the header and the
  list of cards in a swimlane
- fix the finding of the next and previous list of cards.

For all of this to be successful, we need to resize the swimlanes to a
known value. This can lead to some visual jumps with scrolling when you
drag or drop the swimlanea. I tried to remedy that by computing the new
scroll value. Still not ideal however, as there are still some jumps when
dropping.

Fixes #2159
2019-02-08 17:37:20 +01:00
Lauri Ojansivu 96e97143f2 Update translations. 2019-02-08 13:06:35 +02:00
Lauri Ojansivu 4126a1a808 Translate also Admin Panel/Layout/Display Authentication Method and Default Authentication Method. Thanks to Akuket and xet7 ! 2019-02-08 12:46:07 +02:00
Lauri Ojansivu 3ce902123f Lint also async. Thanks to Akuket ! 2019-02-08 12:44:48 +02:00
Lauri Ojansivu 7125357a44 Merge remote-tracking branch 'upstream/feature-improve-authentication' into feature-improve-authentication 2019-02-08 12:33:39 +02:00
guillaume ec453b89b8 Fix lints 2019-02-07 11:38:04 +01:00
Lauri Ojansivu 329c8d64a8 v2.17 2019-02-04 21:47:50 +02:00
Lauri Ojansivu 698ce8f0e6 Update translations (sv). 2019-02-04 21:07:36 +02:00
Lauri Ojansivu b06e11ba09 Merge pull request #2164 from gil0109/edge
Fix trailing spaces for OIDC fix
2019-02-04 20:23:41 +02:00
Karim Gillani d689a7408b Fix trailing spaces 2019-02-04 09:36:21 -08:00
Lauri Ojansivu c899218fb9 Merge pull request #2162 from gil0109/edge
OIDC BoardView Fix
2019-02-04 19:30:24 +02:00
Karim Gillani c42f2a05d2 OIDC BoardView Fix 2019-02-04 08:24:10 -08:00
Lauri Ojansivu 70ed552e1a Update translations. 2019-02-03 15:45:00 +02:00
Lauri Ojansivu 9a07649b8a v2.16 2019-02-03 05:18:50 +02:00
Lauri Ojansivu 9a6ac544dd - Fix Sandstorm open card on public board, part 2.
Thanks to ChronikEwok !
2019-02-03 05:12:50 +02:00
Lauri Ojansivu 06a1e26655 Add missing text. 2019-02-03 03:06:54 +02:00
Lauri Ojansivu 626e7c2c61 v2.15 2019-02-03 02:31:51 +02:00
Lauri Ojansivu a7aeb491ba Update changelog. 2019-02-03 02:25:14 +02:00
Lauri Ojansivu 7ba8f72d7b - [Fix: Not displaying card content of public board: Snap, Docker and Sandstorm Shared Wekan Board
Link](https://github.com/wekan/wekan/issues/1623) with
  [code from ChronikEwok](https://github.com/ChronikEwok/wekan/commit/cad9b20451bb6149bfb527a99b5001873b06c3de).

Thanks to ChronikEwok !

Closes #1623
2019-02-03 02:18:35 +02:00
Lauri Ojansivu d0f74d7a99 Add missing text. 2019-02-02 21:55:50 +02:00
Lauri Ojansivu 7f33fa5368 v2.14 2019-02-02 21:00:16 +02:00
Lauri Ojansivu 0ab97266f6 - [Fix Sandstorm export board from web](https://github.com/wekan/wekan/issues/2157).
- [Fix Error when logging in to Wekan REST API when using Sandstorm Wekan](https://github.com/wekan/wekan/issues/1279).
  Sandstorm API works this way: Make API key, and from that key copy API URL and API KEY to below. It saves Wekan board to file.
  `curl http://Bearer:APIKEY@api-12345.local.sandstorm.io:6080/api/boards/sandstorm/export?authToken=#APIKEY > wekanboard.json`
  If later API key does not work, you need to remove it and make a new one.

Thanks to xet7 !
2019-02-02 20:57:47 +02:00
Lauri Ojansivu 32f896f19d - [Fix Sandstorm export board from web](https://github.com/wekan/wekan/issues/2157).
- [Fix Error when logging in to Wekan REST API when using Sandstorm Wekan](https://github.com/wekan/wekan/issues/1279).
  Sandstorm API works this way: Make API key, and from that key copy API URL and API KEY to below. It saves Wekan board to file.
  `curl http://Bearer:APIKEY@api-12345.local.sandstorm.io:6080/api/boards/sandstorm/export?authToken=#APIKEY > wekanboard.json`
  If later API key does not work, you need to remove it and make a new one.

Closes #2157,
closes #1279
2019-02-02 20:52:09 +02:00
Lauri Ojansivu de9965213a - Fix lint errors.
Thanks to xet7 !
2019-02-01 21:26:04 +02:00
guillaume c2118f4830 Improve authentication 2019-02-01 19:00:44 +01:00
Lauri Ojansivu 6f0e0748e1 v2.13 2019-02-01 17:15:15 +02:00
Lauri Ojansivu 8e5fc13ba4 Update changelog with latest changes from bentiss. 2019-02-01 17:09:05 +02:00
Lauri Ojansivu 7a35099fb9 - When writing to minicard, press Shift-Enter on minicard to go to next line below,
to continue writing on same minicard 2nd line.

Thanks to bentiss!
2019-02-01 17:03:59 +02:00
Lauri Ojansivu d08bee6817 Merge branch 'bentiss-infinite-scrolling' into edge 2019-02-01 16:54:41 +02:00
Lauri Ojansivu 4fc96904d6 Merge branch 'infinite-scrolling' of https://github.com/bentiss/wekan into bentiss-infinite-scrolling 2019-02-01 16:05:46 +02:00
Benjamin Tissoires 66bc1f28dd Use infinite-scrolling on lists
This allows to reduce the loading time of a big board.

Note that there is an infinite scroll implementation in the mixins,
but this doesn't fit well as the cards in the list can have arbitrary
height.

The idea to rely on the visibility of a spinner is based on
http://www.meteorpedia.com/read/Infinite_Scrolling
2019-02-01 14:58:02 +01:00
Benjamin Tissoires 30d082e709 Use infinite-scrolling on lists
This allows to reduce the loading time of a big board.

Note that there is an infinite scroll implementation in the mixins,
but this doesn't fit well as the cards in the list can have arbitrary
height.

The idea to rely on the visibility of a spinner is based on
http://www.meteorpedia.com/read/Infinite_Scrolling
2019-02-01 13:53:45 +01:00
Lauri Ojansivu 1b11123797 v2.12 2019-01-31 19:32:27 +02:00
Lauri Ojansivu 654c2add0d - [Bumped the salleman oidc packages versions to include an upstream bug fix](https://github.com/wekan/wekan/commit/361faa6646556de68ad78dc90d9eb9f78956ce0f).
Thanks to danpatdav !
2019-01-31 19:19:47 +02:00
Lauri Ojansivu 6d179d6d3d Merge pull request #2149 from danpatdav/salleman-1.0.10
Bumped the salleman oidc packages versions to include an upstream bug…
2019-01-31 19:10:03 +02:00
Daniel Davis 361faa6646 Bumped the salleman oidc packages versions to include an upstream bug fix 2019-01-31 11:45:55 -05:00
Lauri Ojansivu 7fc22ba0b7 v2.11 2019-01-31 14:27:36 +02:00
Lauri Ojansivu 9c82e6ab68 Update translations. 2019-01-31 14:23:57 +02:00
Lauri Ojansivu 78c18d4ffe Update changelog. 2019-01-31 14:23:23 +02:00
Lauri Ojansivu 978dafc62b - Fix: Bug: Not logged in public board page has calendar.
Thanks to xet7 !

Closes #2061
2019-01-31 14:19:14 +02:00
Lauri Ojansivu 8919d8fb7d Fix typo. 2019-01-30 18:52:14 +02:00
Lauri Ojansivu cdb7dd9175 Fix typo. 2019-01-30 18:49:38 +02:00
Lauri Ojansivu d6b7c17402 v2.10 2019-01-30 18:17:15 +02:00
Lauri Ojansivu 7e247c14b2 Update translations (mk). 2019-01-30 18:07:23 +02:00
Lauri Ojansivu e6af48fc4a Update changelog with latest changes. 2019-01-30 18:04:44 +02:00
Lauri Ojansivu 9703843602 - Revert [Sandstorm API changes](https://github.com/wekan/wekan/commit/be03a191c4321c2f80116c0ee1ae6c826d882535
that were done at [Wekan v2.05](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v205-2019-01-27-wekan-release)
  to fix #2143.

Thanks to pantraining and xet7 !

Closes #2143
2019-01-30 17:56:53 +02:00
Lauri Ojansivu d53a7ce5f1 Update translations. 2019-01-30 16:06:31 +02:00
Lauri Ojansivu 6e4a6515e0 - Translations: Add Macedonian. 2019-01-30 02:18:27 +02:00
Lauri Ojansivu bf304ffde5 - Translations: Add Macedonian. 2019-01-30 02:16:55 +02:00
Lauri Ojansivu 7cefe9d367 Update translations. 2019-01-29 18:56:11 +02:00
Lauri Ojansivu 12cccc25cc v2.09 2019-01-28 18:29:46 +02:00
Lauri Ojansivu 34f62cb3b3 - [Fix vertical automatic scrolling when opening a card](https://github.com/wekan/wekan/commit/820d3270935dc89f046144a7bbf2c8277e2484bc).
Thanks to bentiss !
2019-01-28 18:23:28 +02:00
Lauri Ojansivu 820d327093 Merge pull request #2140 from bentiss/scrolling-fixes
automatic scroll: fix vertical automatic scrolling when opening a card
2019-01-28 18:12:51 +02:00
Lauri Ojansivu 04279342a4 v2.08 2019-01-28 17:26:18 +02:00
Benjamin Tissoires 1cfe084cc2 automatic scroll: fix vertical automatic scrolling when opening a card
We actually want the vertical scrolling to be fixed when opening the
card details.
I am not sure where the `100` value comes from, but this makes the
scrolling happy on the swimlane view and on the lists view.
2019-01-28 16:21:43 +01:00
Lauri Ojansivu 4629cc1b19 Update translations. 2019-01-28 17:08:47 +02:00
Lauri Ojansivu b4e87466ba Merge branch 'bentiss-horizontal-fixes' into edge 2019-01-28 17:06:56 +02:00
Benjamin Tissoires ae82f43078 make the max height of the swimlane not too big
We should take a full screen minus the header height
2019-01-28 15:34:12 +01:00
Benjamin Tissoires 7cc185ac57 Properly fix horizontal rendering on Chrome and Firefox
This reverts commit 74cf9e2573 "- Fix Firefox left-rigth scrollbar."

This reverts commit 9dd8216dfb.
"- Fix cards below swimlane title in Firefox by making
[previous fix](https://github.com/wekan/wekan/pull/2132/commits/f7c6b7fce237a6dbdbbd6d728cfb11ad3f4378eb)"

And this partially reverts commit dd88eb4cc

The root of the issue was that I was adding a new div and nesting
the list of lists in this new list. This resulted in some
weird behavior that Firefox could not handled properly
Revert to a code colser to v2.02, by just having the
swimlane header in a separate line, and keep only one
flex element.

fixes #2137
2019-01-28 15:33:47 +01:00
Lauri Ojansivu 4d37e1d640 v2.07 2019-01-28 02:58:02 +02:00
Lauri Ojansivu 74cf9e2573 - Fix Firefox left-rigth scrollbar.
Thanks to xet7 !

Closes #2137
2019-01-28 02:50:25 +02:00
76 changed files with 1606 additions and 425 deletions

No files matched your search

+1 -1
View File
@@ -6,7 +6,7 @@
"browser": true
},
"parserOptions": {
"ecmaVersion": 6,
"ecmaVersion": 2017,
"sourceType": "module",
"ecmaFeatures": {
"experimentalObjectRestSpread": true
+2 -2
View File
@@ -143,8 +143,8 @@ reload@1.1.11
retry@1.0.9
routepolicy@1.0.12
rzymek:fullcalendar@3.8.0
salleman:accounts-oidc@1.0.9
salleman:oidc@1.0.9
salleman:accounts-oidc@1.0.10
salleman:oidc@1.0.10
service-configuration@1.0.11
session@1.1.7
sha@1.0.9
+169
View File
@@ -1,3 +1,172 @@
# v2.19 2019-02-09 Wekan release
This release removes the following new features:
- [Remove oplog from snap](https://github.com/wekan/wekan/commit/f1bd36a3b87f97927dfe60572646a457e1f7ef66). Need to think how to do it properly.
Thanks to GitHub user xet7 for conrtibutions.
# v2.18 2019-02-08 Wekan release
This release adds the folloging new features:
- [Improve Authentication: Admin Panel / Layout / Set Default Authentication / Password/LDAP](https://github.com/wekan/wekan/pull/2172). Thanks to Akuket.
- [Add oplog to snap mongodb](https://github.com/wekan/wekan/commit/79ffb7d50202471c7b7f297286f13e66ce30922e). Thanks to xet7.
and fixes the following bugs with Apache I-CLA, thanks to bentiss:
- [Fix swimlanes sorting](https://github.com/wekan/wekan/pull/2174)
since "[Properly fix horizontal rendering on Chrome and Firefox](https://github.com/wekan/wekan/commit/7cc185ac)".
The rendering of the new design of the swimlanes was correct, but this
commit broke the reordering capability. Having the swimlane header at
the same level than the lists of cards makes the whole sortable
pattern fail.
- 2 solutions:
- revert to only have 1 div per swimlane. But this introduces [the firefox
bug mentioned](https://github.com/wekan/wekan/commit/7cc185ac), so not ideal
- force the sortable pattern to do what we want.
- To force the sortable pattern, we need:
- add in the helper a clone of the list of cards (to not just move the
header)
- make sure the placeholder never get placed between the header and the
list of cards in a swimlane
- fix the finding of the next and previous list of cards.
For all of this to be successful, we need to resize the swimlanes to a
known value. This can lead to some visual jumps with scrolling when you
drag or drop the swimlanea. I tried to remedy that by computing the new
scroll value. Still not ideal however, as there are still some jumps when
dropping.
Fixes [#2159](https://github.com/wekan/wekan/issues/2159).
Thanks to above GitHub users and translators for contributions.
# v2.17 2019-02-04 Wekan release
This release fixes the following bugs:
- [OIDC/OAuth2 BoardView Fix](https://github.com/wekan/wekan/issues/1874).
Thanks to GitHub gil0109 for contributions, and translator for their translations.
# v2.16 2019-02-03 Wekan release
This release fixes the following bugs:
- [Part 2](https://github.com/ChronikEwok/wekan/commit/9a6ac544dd5618e58ce107352124fd9b495e5c30):
[Fix: Not displaying card content of public board: Snap, Docker and Sandstorm Shared Wekan Board
Link](https://github.com/wekan/wekan/issues/1623) with
[code from ChronikEwok](https://github.com/ChronikEwok/wekan/commit/cad9b20451bb6149bfb527a99b5001873b06c3de).
Thanks to GitHub user ChronikEwok for contributions.
# v2.15 2019-02-03 Wekan release
This release fixes the following bugs:
- [Fix: Not displaying card content of public board: Snap, Docker and Sandstorm Shared Wekan Board
Link](https://github.com/wekan/wekan/issues/1623) with
[code from ChronikEwok](https://github.com/ChronikEwok/wekan/commit/cad9b20451bb6149bfb527a99b5001873b06c3de).
Thanks to GitHub user ChronikEwok for contributions.
# v2.14 2019-02-02 Wekan release
This release fixes the following bugs:
- [Fix Sandstorm export board from web](https://github.com/wekan/wekan/issues/2157).
- [Fix Error when logging in to Wekan REST API when using Sandstorm Wekan](https://github.com/wekan/wekan/issues/1279).
Sandstorm API works this way: Make API key, and from that key copy API URL and API KEY to below. It saves Wekan board to file.
`curl http://Bearer:APIKEY@api-12345.local.sandstorm.io:6080/api/boards/sandstorm/export?authToken=#APIKEY > wekanboard.json`
If later API key does not work, you need to remove it and make a new one.
Thanks to GitHub user xet7 for contributions.
# v2.13 2019-02-01 Wekan release
This release adds the following new features with Apache I-CLA, thanks to bentiss:
- [Use infinite-scrolling on lists](https://github.com/wekan/wekan/pull/2144).
This allows to reduce the loading time of a big board.
Note that there is an infinite scroll implementation in the mixins,
but this doesn't fit well as the cards in the list can have arbitrary
height.
The idea to rely on the visibility of a spinner is based on
http://www.meteorpedia.com/read/Infinite_Scrolling
- [When writing to minicard, press Shift-Enter on minicard to go to next line
below](https://github.com/wekan/wekan/commit/7a35099fb9778d5f3656a57c74af426cfb20fba3),
to continue writing on same minicard 2nd line.
Thanks to GitHub user bentiss for contributions.
# v2.12 2019-01-31 Wekan release
This release fixes the following bugs:
- [Bumped the salleman oidc packages versions to include an upstream bug fix](https://github.com/wekan/wekan/commit/361faa6646556de68ad78dc90d9eb9f78956ce0f).
Thanks to GitHub user danpatdav for contributions.
# v2.11 2019-01-31 Wekan release
This release fixes the following bugs:
- [Fix: Bug: Not logged in public board page has calendar](https://github.com/wekan/wekan/issues/2061). Thanks to xet7.
Thanks to above GitHub users and translators for contributions.
# v2.10 2019-01-30 Wekan release
This release adds the following new features:
- Translations: Add Macedonian. [Copied Bulgarian to Macedonian](https://github.com/wekan/wekan/commit/6e4a6515e00fe68b8615d850cfb3cb290418e176)
so that required changes will be faster to add. Thanks to translators and therampagerado;
and fixes the following bugs:
- Revert [Sandstorm API changes](https://github.com/wekan/wekan/commit/be03a191c4321c2f80116c0ee1ae6c826d882535)
that were done at [Wekan v2.05](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md#v205-2019-01-27-wekan-release)
to fix #2143. Thanks to pantraining and xet7.
Thanks to above GitHub users and translators for contributions.
# v2.09 2019-01-28 Wekan release
This release fixes the following bugs with Apache I-CLA, thanks to bentiss:
- [Fix vertical automatic scrolling when opening a card](https://github.com/wekan/wekan/commit/820d3270935dc89f046144a7bbf2c8277e2484bc).
Thanks to GitHub user bentiss for contributions.
# v2.08 2019-01-28 Wekan release
This release fixes the following bugs with Apache I-CLA, thanks to bentiss:
- Make the max height of the swimlane not too big](https://github.com/wekan/wekan/commit/ae82f43078546902e199d985a922ebf7041a4917).
We take a full screen minus the header height;
- [Properly fix horizontal rendering on Chrome and Firefox](https://github.com/wekan/wekan/commit/7cc185ac57c77be85178f92b1d01d46e20218948).
This reverts [commit 74cf9e2573](https://github.com/wekan/wekan/commit/74cf9e2573) "- Fix Firefox left-rigth scrollbar."
This reverts [commit 9dd8216dfb](https://github.com/wekan/wekan/commit/9dd8216dfb)
"- Fix cards below swimlane title in Firefox" by making
[previous fix](https://github.com/wekan/wekan/pull/2132/commits/f7c6b7fce237a6dbdbbd6d728cfb11ad3f4378eb)"
And this partially reverts [commit dd88eb4cc](https://github.com/wekan/wekan/commit/dd88eb4cc).
The root of the issue was that I was adding a new div and nesting
the list of lists in this new list. This resulted in some
weird behavior that Firefox could not handled properly
Revert to a code colser to v2.02, by just having the
swimlane header in a separate line, and keep only one
flex element.
Fixes #2137
Thanks to GitHub user bentiss for contributions, and translators for their translations.
# v2.07 2019-01-28 Wekan release
This release fixes the following bugs:
- [Fix Firefox left-rigth scrollbar](https://github.com/wekan/wekan/issues/2137).
Thanks to GitHub user xet7 for contributions.
# v2.06 2019-01-27 Wekan release
This release fixes the following bugs:
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v2.06.0"
appVersion: "v2.19.0"
files:
userUploads:
- README.md
+5 -4
View File
@@ -29,7 +29,8 @@ template(name="boardBody")
+calendarView
template(name="calendarView")
.calendar-view.swimlane
if currentCard
+cardDetails(currentCard)
+fullcalendar(calendarOptions)
if isViewCalendar
.calendar-view.swimlane
if currentCard
+cardDetails(currentCard)
+fullcalendar(calendarOptions)
+78 -5
View File
@@ -1,5 +1,6 @@
const subManager = new SubsManager();
const { calculateIndex, enableClickOnTouch } = Utils;
const swimlaneWhileSortingHeight = 150;
BlazeComponent.extendComponent({
onCreated() {
@@ -74,21 +75,64 @@ BlazeComponent.extendComponent({
$swimlanesDom.sortable({
tolerance: 'pointer',
appendTo: '.board-canvas',
helper: 'clone',
helper(evt, item) {
const helper = $(`<div class="swimlane"
style="flex-direction: column;
height: ${swimlaneWhileSortingHeight}px;
width: $(boardComponent.width)px;
overflow: hidden;"/>`);
helper.append(item.clone());
// Also grab the list of lists of cards
const list = item.next();
helper.append(list.clone());
return helper;
},
handle: '.js-swimlane-header',
items: '.js-swimlane:not(.placeholder)',
items: '.swimlane:not(.placeholder)',
placeholder: 'swimlane placeholder',
distance: 7,
start(evt, ui) {
const listDom = ui.placeholder.next('.js-swimlane');
const parentOffset = ui.item.parent().offset();
ui.placeholder.height(ui.helper.height());
EscapeActions.executeUpTo('popup-close');
listDom.addClass('moving-swimlane');
boardComponent.setIsDragging(true);
ui.placeholder.insertAfter(ui.placeholder.next());
boardComponent.origPlaceholderIndex = ui.placeholder.index();
// resize all swimlanes + headers to be a total of 150 px per row
// this could be achieved by setIsDragging(true) but we want immediate
// result
ui.item.siblings('.js-swimlane').css('height', `${swimlaneWhileSortingHeight - 26}px`);
// set the new scroll height after the resize and insertion of
// the placeholder. We want the element under the cursor to stay
// at the same place on the screen
ui.item.parent().get(0).scrollTop = ui.placeholder.get(0).offsetTop + parentOffset.top - evt.pageY;
},
beforeStop(evt, ui) {
const parentOffset = ui.item.parent().offset();
const siblings = ui.item.siblings('.js-swimlane');
siblings.css('height', '');
// compute the new scroll height after the resize and removal of
// the placeholder
const scrollTop = ui.placeholder.get(0).offsetTop + parentOffset.top - evt.pageY;
// then reset the original view of the swimlane
siblings.removeClass('moving-swimlane');
// and apply the computed scrollheight
ui.item.parent().get(0).scrollTop = scrollTop;
},
stop(evt, ui) {
// To attribute the new index number, we need to get the DOM element
// of the previous and the following card -- if any.
const prevSwimlaneDom = ui.item.prev('.js-swimlane').get(0);
const nextSwimlaneDom = ui.item.next('.js-swimlane').get(0);
const prevSwimlaneDom = ui.item.prevAll('.js-swimlane').get(0);
const nextSwimlaneDom = ui.item.nextAll('.js-swimlane').get(0);
const sortIndex = calculateIndex(prevSwimlaneDom, nextSwimlaneDom, 1);
$swimlanesDom.sortable('cancel');
@@ -103,6 +147,30 @@ BlazeComponent.extendComponent({
boardComponent.setIsDragging(false);
},
sort(evt, ui) {
// get the mouse position in the sortable
const parentOffset = ui.item.parent().offset();
const cursorY = evt.pageY - parentOffset.top + ui.item.parent().scrollTop();
// compute the intended index of the placeholder (we need to skip the
// slots between the headers and the list of cards)
const newplaceholderIndex = Math.floor(cursorY / swimlaneWhileSortingHeight);
let destPlaceholderIndex = (newplaceholderIndex + 1) * 2;
// if we are scrolling far away from the bottom of the list
if (destPlaceholderIndex >= ui.item.parent().get(0).childElementCount) {
destPlaceholderIndex = ui.item.parent().get(0).childElementCount - 1;
}
// update the placeholder position in the DOM tree
if (destPlaceholderIndex !== ui.placeholder.index()) {
if (destPlaceholderIndex < boardComponent.origPlaceholderIndex) {
ui.placeholder.insertBefore(ui.placeholder.siblings().slice(destPlaceholderIndex - 2, destPlaceholderIndex - 1));
} else {
ui.placeholder.insertAfter(ui.placeholder.siblings().slice(destPlaceholderIndex - 1, destPlaceholderIndex));
}
}
},
});
// ugly touch event hotfix
@@ -134,7 +202,7 @@ BlazeComponent.extendComponent({
isViewCalendar() {
const currentUser = Meteor.user();
if (!currentUser) return true;
if (!currentUser) return false;
return (currentUser.profile.boardView === 'board-view-cal');
},
@@ -264,4 +332,9 @@ BlazeComponent.extendComponent({
},
};
},
isViewCalendar() {
const currentUser = Meteor.user();
if (!currentUser) return false;
return (currentUser.profile.boardView === 'board-view-cal');
},
}).register('calendarView');
+4 -5
View File
@@ -78,14 +78,13 @@ BlazeComponent.extendComponent({
//Scroll top
const cardViewStartTop = $cardView.offset().top;
const cardContainerScrollTop = $cardContainer.scrollTop();
let topOffset = false;
if(cardViewStartTop < 0){
topOffset = 0;
} else if(cardViewStartTop - cardContainerScrollTop > 100) {
topOffset = cardViewStartTop - cardContainerScrollTop - 100;
if(cardViewStartTop !== 100){
topOffset = cardViewStartTop - 100;
}
if(topOffset !== false) {
bodyBoardComponent.scrollTop(topOffset);
bodyBoardComponent.scrollTop(cardContainerScrollTop + topOffset);
}
},
+3
View File
@@ -211,6 +211,9 @@
max-height: 250px
overflow: hidden
.sk-spinner-list
margin-top: unset !important
list-header-color(background, color...)
border-bottom: 6px solid background
+11 -1
View File
@@ -4,7 +4,7 @@ template(name="listBody")
if cards.count
+inlinedForm(autoclose=false position="top")
+addCardForm(listId=_id position="top")
each (cards (idOrNull ../../_id))
each (cardsWithLimit (idOrNull ../../_id))
a.minicard-wrapper.js-minicard(href=absoluteUrl
class="{{#if cardIsSelected}}is-selected{{/if}}"
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
@@ -12,6 +12,16 @@ template(name="listBody")
.materialCheckBox.multi-selection-checkbox.js-toggle-multi-selection(
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
+minicard(this)
if (showSpinner (idOrNull ../../_id))
.sk-spinner.sk-spinner-wave.sk-spinner-list(
class=currentBoard.colorClass
id="showMoreResults")
.sk-rect1
.sk-rect2
.sk-rect3
.sk-rect4
.sk-rect5
if canSeeAddCard
+inlinedForm(autoclose=false position="bottom")
+addCardForm(listId=_id position="bottom")
+82 -1
View File
@@ -1,6 +1,34 @@
const subManager = new SubsManager();
const InfiniteScrollIter = 10;
BlazeComponent.extendComponent({
onCreated() {
// for infinite scrolling
this.cardlimit = new ReactiveVar(InfiniteScrollIter);
},
onRendered() {
const domElement = this.find('.js-perfect-scrollbar');
this.$(domElement).on('scroll', () => this.updateList(domElement));
$(window).on(`resize.${this.data().listId}`, () => this.updateList(domElement));
// we add a Mutation Observer to allow propagations of cardlimit
// when the spinner stays in the current view (infinite scrolling)
this.mutationObserver = new MutationObserver(() => this.updateList(domElement));
this.mutationObserver.observe(domElement, {
childList: true,
});
this.updateList(domElement);
},
onDestroyed() {
$(window).off(`resize.${this.data().listId}`);
this.mutationObserver.disconnect();
},
mixins() {
return [Mixins.PerfectScrollbar];
},
@@ -60,6 +88,13 @@ BlazeComponent.extendComponent({
type: 'cardType-card',
});
// if the displayed card count is less than the total cards in the list,
// we need to increment the displayed card count to prevent the spinner
// to appear
const cardCount = this.data().cards(this.idOrNull(swimlaneId)).count();
if (this.cardlimit.get() < cardCount) {
this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
}
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
@@ -119,6 +154,52 @@ BlazeComponent.extendComponent({
return undefined;
},
cardsWithLimit(swimlaneId) {
const limit = this.cardlimit.get();
const selector = {
listId: this.currentData()._id,
archived: false,
};
if (swimlaneId)
selector.swimlaneId = swimlaneId;
return Cards.find(Filter.mongoSelector(selector), {
sort: ['sort'],
limit,
});
},
spinnerInView(container) {
const parentViewHeight = container.clientHeight;
const bottomViewPosition = container.scrollTop + parentViewHeight;
const spinner = this.find('.sk-spinner-list');
const threshold = spinner.offsetTop;
return bottomViewPosition > threshold;
},
showSpinner(swimlaneId) {
const list = Template.currentData();
return list.cards(swimlaneId).count() > this.cardlimit.get();
},
updateList(container) {
// first, if the spinner is not rendered, we have reached the end of
// the list of cards, so skip and disable firing the events
const target = this.find('.sk-spinner-list');
if (!target) {
this.$(container).off('scroll');
$(window).off(`resize.${this.data().listId}`);
return;
}
if (this.spinnerInView(container)) {
this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
Ps.update(container);
}
},
canSeeAddCard() {
return !this.reachedWipLimit() && Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
@@ -179,7 +260,7 @@ BlazeComponent.extendComponent({
pressKey(evt) {
// Pressing Enter should submit the card
if (evt.keyCode === 13) {
if (evt.keyCode === 13 && !evt.shiftKey) {
evt.preventDefault();
const $form = $(evt.currentTarget).closest('form');
// XXX For some reason $form.submit() does not work (it's probably a bug
+2 -4
View File
@@ -23,10 +23,8 @@ template(name="userFormsLayout")
br
section.auth-dialog
+Template.dynamic(template=content)
+connectionMethod
if isCas
.at-form
button#cas(class='at-btn submit' type='submit') {{casSignInLabel}}
if currentSetting.displayAuthenticationMethod
+connectionMethod
div.at-form-lang
select.select-lang.js-userform-set-language
each languages
+72 -60
View File
@@ -20,13 +20,19 @@ const validator = {
},
};
Template.userFormsLayout.onCreated(() => {
Meteor.subscribe('setting');
Template.userFormsLayout.onCreated(function() {
const instance = this;
instance.currentSetting = new ReactiveVar();
Meteor.subscribe('setting', {
onReady() {
instance.currentSetting.set(Settings.findOne());
return this.stop();
},
});
});
Template.userFormsLayout.onRendered(() => {
AccountsTemplates.state.form.keys = new Proxy(AccountsTemplates.state.form.keys, validator);
const i18nTag = navigator.language;
@@ -37,12 +43,10 @@ Template.userFormsLayout.onRendered(() => {
});
Template.userFormsLayout.helpers({
currentSetting() {
return Settings.findOne();
return Template.instance().currentSetting.get();
},
afterBodyStart() {
return currentSetting.customHTMLafterBodyStart;
},
@@ -75,17 +79,6 @@ Template.userFormsLayout.helpers({
const curLang = T9n.getLanguage() || 'en';
return t9nTag === curLang;
},
/*
isCas() {
return Meteor.settings.public &&
Meteor.settings.public.cas &&
Meteor.settings.public.cas.loginUrl;
},
casSignInLabel() {
return TAPi18n.__('casSignIn', {}, T9n.getLanguage() || 'en');
},
*/
});
Template.userFormsLayout.events({
@@ -94,49 +87,9 @@ Template.userFormsLayout.events({
T9n.setLanguage(i18nTagToT9n(i18nTag));
evt.preventDefault();
},
'click button#cas'() {
Meteor.loginWithCas(function() {
if (FlowRouter.getRouteName() === 'atSignIn') {
FlowRouter.go('/');
}
});
},
'click #at-btn'(event) {
/* All authentication method can be managed/called here.
!! DON'T FORGET to correctly fill the fields of the user during its creation if necessary authenticationMethod : String !!
*/
const authenticationMethodSelected = $('.select-authentication').val();
// Local account
if (authenticationMethodSelected === 'password') {
return;
}
// Stop submit #at-pwd-form
event.preventDefault();
event.stopImmediatePropagation();
const email = $('#at-field-username_and_email').val();
const password = $('#at-field-password').val();
// Ldap account
if (authenticationMethodSelected === 'ldap') {
// Check if the user can use the ldap connection
Meteor.subscribe('user-authenticationMethod', email, {
onReady() {
const user = Users.findOne();
if (user === undefined || user.authenticationMethod === 'ldap') {
// Use the ldap connection package
Meteor.loginWithLDAP(email, password, function(error) {
if (!error) {
// Connection
return FlowRouter.go('/');
}
return error;
});
}
return this.stop();
},
});
'click #at-btn'(event, instance) {
if (FlowRouter.getRouteName() === 'atSignIn') {
authentication(event, instance);
}
},
});
@@ -146,3 +99,62 @@ Template.defaultLayout.events({
Modal.close();
},
});
async function authentication(event, instance) {
const match = $('#at-field-username_and_email').val();
const password = $('#at-field-password').val();
if (!match || !password) return;
const result = await getAuthenticationMethod(instance.currentSetting.get(), match);
if (result === 'password') return;
// Stop submit #at-pwd-form
event.preventDefault();
event.stopImmediatePropagation();
switch (result) {
case 'ldap':
Meteor.loginWithLDAP(match, password, function() {
FlowRouter.go('/');
});
break;
case 'cas':
Meteor.loginWithCas(function() {
FlowRouter.go('/');
});
break;
default:
break;
}
}
function getAuthenticationMethod({displayAuthenticationMethod, defaultAuthenticationMethod}, match) {
if (displayAuthenticationMethod) {
return $('.select-authentication').val();
}
return getUserAuthenticationMethod(defaultAuthenticationMethod, match);
}
function getUserAuthenticationMethod(defaultAuthenticationMethod, match) {
return new Promise((resolve) => {
try {
Meteor.subscribe('user-authenticationMethod', match, {
onReady() {
const user = Users.findOne();
const authenticationMethod = user
? user.authenticationMethod
: defaultAuthenticationMethod;
resolve(authenticationMethod);
},
});
} catch(error) {
resolve(defaultAuthenticationMethod);
}
});
}
@@ -141,6 +141,16 @@ template(name='layoutSettings')
span {{_ 'yes'}}
input.form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}")
span {{_ 'no'}}
li.layout-form
.title {{_ 'display-authentication-method'}}
.form-group.flex
input.form-control#display-authentication-method(type="radio" name="displayAuthenticationMethod" value="true" checked="{{#if currentSetting.displayAuthenticationMethod}}checked{{/if}}")
span {{_ 'yes'}}
input.form-control#display-authentication-method(type="radio" name="displayAuthenticationMethod" value="false" checked="{{#unless currentSetting.displayAuthenticationMethod}}checked{{/unless}}")
span {{_ 'no'}}
li.layout-form
.title {{_ 'default-authentication-method'}}
+selectAuthenticationMethod(authenticationMethod=currentSetting.defaultAuthenticationMethod)
li.layout-form
.title {{_ 'custom-product-name'}}
.form-group
@@ -153,3 +163,12 @@ template(name='layoutSettings')
textarea#customHTMLbeforeBodyEnd.form-control= currentSetting.customHTMLbeforeBodyEnd
li
button.js-save-layout.primary {{_ 'save'}}
template(name='selectAuthenticationMethod')
select#defaultAuthenticationMethod
each authentications
if isSelected value
option(value="{{value}}" selected) {{_ value}}
else
option(value="{{value}}") {{_ value}}
+35 -5
View File
@@ -62,6 +62,9 @@ BlazeComponent.extendComponent({
toggleHideLogo() {
$('#hide-logo').toggleClass('is-checked');
},
toggleDisplayAuthenticationMethod() {
$('#display-authentication-method').toggleClass('is-checked');
},
switchMenu(event) {
const target = $(event.target);
if (!target.hasClass('active')) {
@@ -140,17 +143,20 @@ BlazeComponent.extendComponent({
const productName = $('#product-name').val().trim();
const hideLogoChange = ($('input[name=hideLogo]:checked').val() === 'true');
const displayAuthenticationMethod = ($('input[name=displayAuthenticationMethod]:checked').val() === 'true');
const defaultAuthenticationMethod = $('#defaultAuthenticationMethod').val();
const customHTMLafterBodyStart = $('#customHTMLafterBodyStart').val().trim();
const customHTMLbeforeBodyEnd = $('#customHTMLbeforeBodyEnd').val().trim();
try {
Settings.update(Settings.findOne()._id, {
$set: {
productName,
hideLogo: hideLogoChange,
customHTMLafterBodyStart,
customHTMLbeforeBodyEnd,
displayAuthenticationMethod,
defaultAuthenticationMethod,
},
});
} catch (e) {
@@ -165,17 +171,14 @@ BlazeComponent.extendComponent({
sendSMTPTestEmail() {
Meteor.call('sendSMTPTestEmail', (err, ret) => {
if (!err && ret) { /* eslint-disable no-console */
if (!err && ret) {
const message = `${TAPi18n.__(ret.message)}: ${ret.email}`;
console.log(message);
alert(message);
} else {
const reason = err.reason || '';
const message = `${TAPi18n.__(err.error)}\n${reason}`;
console.log(message, err);
alert(message);
}
/* eslint-enable no-console */
});
},
@@ -190,6 +193,7 @@ BlazeComponent.extendComponent({
'click button.js-send-smtp-test-email': this.sendSMTPTestEmail,
'click a.js-toggle-hide-logo': this.toggleHideLogo,
'click button.js-save-layout': this.saveLayout,
'click a.js-toggle-display-authentication-method': this.toggleDisplayAuthenticationMethod,
}];
},
}).register('setting');
@@ -262,3 +266,29 @@ BlazeComponent.extendComponent({
}];
},
}).register('announcementSettings');
Template.selectAuthenticationMethod.onCreated(function() {
this.authenticationMethods = new ReactiveVar([]);
Meteor.call('getAuthenticationsEnabled', (_, result) => {
if (result) {
// TODO : add a management of different languages
// (ex {value: ldap, text: TAPi18n.__('ldap', {}, T9n.getLanguage() || 'en')})
this.authenticationMethods.set([
{value: 'password'},
// Gets only the authentication methods availables
...Object.entries(result).filter((e) => e[1]).map((e) => ({value: e[0]})),
]);
}
});
});
Template.selectAuthenticationMethod.helpers({
authentications() {
return Template.instance().authenticationMethods.get();
},
isSelected(match) {
return Template.instance().data.authenticationMethod === match;
},
});
+13 -13
View File
@@ -1,22 +1,22 @@
template(name="swimlane")
.swimlane.js-lists.js-swimlane
.swimlane
+swimlaneHeader
.swimlane.list-group.js-lists
if isMiniScreen
if currentList
+list(currentList)
else
each currentBoard.lists
+miniList(this)
if currentUser.isBoardMember
+addListForm
.swimlane.js-lists.js-swimlane
if isMiniScreen
if currentList
+list(currentList)
else
each currentBoard.lists
+list(this)
if currentCardIsInThisList _id ../_id
+cardDetails(currentCard)
+miniList(this)
if currentUser.isBoardMember
+addListForm
else
each currentBoard.lists
+list(this)
if currentCardIsInThisList _id ../_id
+cardDetails(currentCard)
if currentUser.isBoardMember
+addListForm
template(name="listsGroup")
.swimlane.list-group.js-lists
+11 -7
View File
@@ -3,14 +3,18 @@ const { calculateIndex, enableClickOnTouch } = Utils;
function currentCardIsInThisList(listId, swimlaneId) {
const currentCard = Cards.findOne(Session.get('currentCard'));
const currentUser = Meteor.user();
if (currentUser.profile.boardView === 'board-view-lists')
return currentCard && currentCard.listId === listId;
else if (currentUser.profile.boardView === 'board-view-swimlanes')
if (currentUser && currentUser.profile.boardView === 'board-view-swimlanes')
return currentCard && currentCard.listId === listId && currentCard.swimlaneId === swimlaneId;
else if (currentUser.profile.boardView === 'board-view-cal')
return currentCard;
else
return false;
else // Default view: board-view-lists
return currentCard && currentCard.listId === listId;
// https://github.com/wekan/wekan/issues/1623
// https://github.com/ChronikEwok/wekan/commit/cad9b20451bb6149bfb527a99b5001873b06c3de
// TODO: In public board, if you would like to switch between List/Swimlane view, you could
// 1) If there is no view cookie, save to cookie board-view-lists
// board-view-lists / board-view-swimlanes / board-view-cal
// 2) If public user changes clicks board-view-lists then change view and
// then change view and save cookie with view value
// without using currentuser above, because currentuser is null.
}
function initSortable(boardComponent, $listsDom) {
+5 -9
View File
@@ -5,9 +5,9 @@
// transparent, because that won't work during a swimlane drag.
background: darken(white, 13%)
display: flex
flex-direction: column
flex-direction: row
overflow: 0;
max-height: 100%
max-height: calc(100% - 26px)
&.placeholder
background-color: rgba(0, 0, 0, .2)
@@ -27,7 +27,7 @@
.swimlane-header-wrap
display: flex;
flex-direction: row;
flex: 0 0 24px;
flex: 1 0 100%;
background-color: #ccc;
.swimlane-header
@@ -51,14 +51,10 @@
margin-right: 10px
.list-group
flex-direction: row
height: 100%
@-moz-document url-prefix() {
.list-group {
overflow: hidden;
}
}
.moving-swimlane
display: none
swimlane-color(background, color...)
background: background !important
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Něco se pokazilo",
"error-ldap-login": "Během přihlašování nastala chyba"
"error-ldap-login": "Během přihlašování nastala chyba",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+8 -6
View File
@@ -335,10 +335,10 @@
"list-archive-cards-pop": "Alle Karten dieser Liste werden vom Board entfernt. Um Karten im Papierkorb anzuzeigen und wiederherzustellen, klicken Sie auf \"Menü\" > \"Archiv\".",
"list-move-cards": "Alle Karten in dieser Liste verschieben",
"list-select-cards": "Alle Karten in dieser Liste auswählen",
"set-color-list": "Setze Farbe",
"set-color-list": "Lege Farbe fest",
"listActionPopup-title": "Listenaktionen",
"swimlaneActionPopup-title": "Swimlaneaktionen",
"swimlaneAddPopup-title": "Füge eine Swimlane unterhalb hinzu",
"swimlaneAddPopup-title": "Swimlane unterhalb einfügen",
"listImportCardPopup-title": "Eine Trello-Karte importieren",
"listMorePopup-title": "Mehr",
"link-list": "Link zu dieser Liste",
@@ -520,9 +520,9 @@
"editCardReceivedDatePopup-title": "Empfangsdatum ändern",
"editCardEndDatePopup-title": "Enddatum ändern",
"setCardColorPopup-title": "Farbe festlegen",
"setCardActionsColorPopup-title": "Wähle eine Farbe",
"setSwimlaneColorPopup-title": "Wähle eine Farbe",
"setListColorPopup-title": "Wähle eine Farbe",
"setCardActionsColorPopup-title": "Farbe wählen",
"setSwimlaneColorPopup-title": "Farbe wählen",
"setListColorPopup-title": "Farbe wählen",
"assigned-by": "Zugewiesen von",
"requested-by": "Angefordert von",
"board-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Sie werden alle Listen, Karten und Aktionen, die mit diesem Board verbunden sind, verlieren.",
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Füge benutzerdefiniertes HTML nach <body> Anfang hinzu",
"add-custom-html-before-body-end": "Füge benutzerdefiniertes HTML vor </body>Ende hinzu",
"error-undefined": "Etwas ist schief gelaufen",
"error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten"
"error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten",
"display-authentication-method": "Anzeige Authentifizierungsverfahren",
"default-authentication-method": "Standardauthentifizierungsverfahren"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -662,5 +662,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"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"
"error-ldap-login": "Ocurrió un error al intentar acceder",
"display-authentication-method": "Mostrar el método de autenticación",
"default-authentication-method": "Método de autenticación por defecto"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "افزودن کد های HTML بعد از <body> شروع",
"add-custom-html-before-body-end": "افزودن کد های HTML قبل از </body> پایان",
"error-undefined": "یک اشتباه رخ داده شده است",
"error-ldap-login": "هنگام تلاش برای ورود به یک خطا رخ داد"
"error-ldap-login": "هنگام تلاش برای ورود به یک خطا رخ داد",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Lisää HTML <body> alun jälkeen",
"add-custom-html-before-body-end": "Lisä HTML ennen </body> loppua",
"error-undefined": "Jotain meni pieleen",
"error-ldap-login": "Virhe tapahtui yrittäessä kirjautua sisään"
"error-ldap-login": "Virhe tapahtui yrittäessä kirjautua sisään",
"display-authentication-method": "Näytä kirjautumistapa",
"default-authentication-method": "Oletus kirjautumistapa"
}
+8 -6
View File
@@ -335,10 +335,10 @@
"list-archive-cards-pop": "Cela supprimera du tableau toutes les cartes de cette liste. Pour voir les cartes archivées et les renvoyer vers le tableau, cliquez sur « Menu » puis « Archives ».",
"list-move-cards": "Déplacer toutes les cartes de cette liste",
"list-select-cards": "Sélectionner toutes les cartes de cette liste",
"set-color-list": "Set Color",
"set-color-list": "Définir la couleur",
"listActionPopup-title": "Actions sur la liste",
"swimlaneActionPopup-title": "Actions du couloir",
"swimlaneAddPopup-title": "Add a Swimlane below",
"swimlaneAddPopup-title": "Ajouter un couloir en dessous",
"listImportCardPopup-title": "Importer une carte Trello",
"listMorePopup-title": "Plus",
"link-list": "Lien vers cette liste",
@@ -520,9 +520,9 @@
"editCardReceivedDatePopup-title": "Modifier la date de réception",
"editCardEndDatePopup-title": "Modifier la date de fin",
"setCardColorPopup-title": "Définir la couleur",
"setCardActionsColorPopup-title": "Choose a color",
"setSwimlaneColorPopup-title": "Choose a color",
"setListColorPopup-title": "Choose a color",
"setCardActionsColorPopup-title": "Choisissez une couleur",
"setSwimlaneColorPopup-title": "Choisissez une couleur",
"setListColorPopup-title": "Choisissez une couleur",
"assigned-by": "Assigné par",
"requested-by": "Demandé par",
"board-delete-notice": "La suppression est définitive. Vous perdrez toutes les listes, cartes et actions associées à ce tableau.",
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Ajouter le HTML personnalisé après le début du <body>",
"add-custom-html-before-body-end": "Ajouter le HTML personnalisé avant la fin du </body>",
"error-undefined": "Une erreur inconnue s'est produite",
"error-ldap-login": "Une erreur s'est produite lors de la tentative de connexion"
"error-ldap-login": "Une erreur s'est produite lors de la tentative de connexion",
"display-authentication-method": "Afficher la méthode d'authentification",
"default-authentication-method": "Méthode d'authentification par défaut"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "הוספת קוד HTML מותאם אישית לאחר ה־<body> הפותח.",
"add-custom-html-before-body-end": "הוספת קוד HTML מותאם אישית לפני ה־</body> הסוגר.",
"error-undefined": "מהו השתבש",
"error-ldap-login": "אירעה שגיאה בעת ניסיון הכניסה"
"error-ldap-login": "אירעה שגיאה בעת ניסיון הכניסה",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+665
View File
@@ -0,0 +1,665 @@
{
"accept": "Приемам",
"act-activity-notify": "Activity Notification",
"act-addAttachment": "прикачи __attachment__ към __card__",
"act-addSubtask": "добави задача __checklist__ към __card__",
"act-addChecklist": "добави списък със задачи __checklist__ към __card__",
"act-addChecklistItem": "добави __checklistItem__ към списък със задачи __checklist__ в __card__",
"act-addComment": "Коментира в __card__: __comment__",
"act-createBoard": "създаде __board__",
"act-createCard": "добави __card__ към __list__",
"act-createCustomField": "създаде собствено поле __customField__",
"act-createList": "добави __list__ към __board__",
"act-addBoardMember": "добави __member__ към __board__",
"act-archivedBoard": "__board__ е преместен в Архива",
"act-archivedCard": "__card__ е преместена в Архива",
"act-archivedList": "__list__ е преместен в Архива",
"act-archivedSwimlane": "__swimlane__ е преместен в Архива",
"act-importBoard": "импортира __board__",
"act-importCard": "импортира __card__",
"act-importList": "импортира __list__",
"act-joinMember": "добави __member__ към __card__",
"act-moveCard": "премести __card__ от __oldList__ в __list__",
"act-removeBoardMember": "премахна __member__ от __board__",
"act-restoredCard": "възстанови __card__ в __board__",
"act-unjoinMember": "премахна __member__ от __card__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Действия",
"activities": "Действия",
"activity": "Дейности",
"activity-added": "добави %s към %s",
"activity-archived": "%s е преместена в Архива",
"activity-attached": "прикачи %s към %s",
"activity-created": "създаде %s",
"activity-customfield-created": "създаде собствено поле %s",
"activity-excluded": "изключи %s от %s",
"activity-imported": "импортира %s в/във %s от %s",
"activity-imported-board": "импортира %s от %s",
"activity-joined": "се присъедини към %s",
"activity-moved": "премести %s от %s в/във %s",
"activity-on": "на %s",
"activity-removed": "премахна %s от %s",
"activity-sent": "изпрати %s до %s",
"activity-unjoined": "вече не е част от %s",
"activity-subtask-added": "добави задача към %s",
"activity-checked-item": "отбеляза%s в списък със задачи %s на %s",
"activity-unchecked-item": "размаркира %s от списък със задачи %s на %s",
"activity-checklist-added": "добави списък със задачи към %s",
"activity-checklist-removed": "премахна списък със задачи от %s",
"activity-checklist-completed": "завърши списък със задачи %s на %s",
"activity-checklist-uncompleted": "\"отзавърши\" чеклистта %s в %s",
"activity-checklist-item-added": "добави точка към '%s' в/във %s",
"activity-checklist-item-removed": "премахна точка от '%s' в %s",
"add": "Добави",
"activity-checked-item-card": "отбеляза %s в чеклист %s",
"activity-unchecked-item-card": "размаркира %s в чеклист %s",
"activity-checklist-completed-card": "завърши чеклиста %s",
"activity-checklist-uncompleted-card": "\"отзавърши\" чеклистта %s",
"add-attachment": "Добави прикачен файл",
"add-board": "Добави Табло",
"add-card": "Добави карта",
"add-swimlane": "Добави коридор",
"add-subtask": "Добави подзадача",
"add-checklist": "Добави списък със задачи",
"add-checklist-item": "Добави точка към списъка със задачи",
"add-cover": "Добави корица",
"add-label": "Добави етикет",
"add-list": "Добави списък",
"add-members": "Добави членове",
"added": "Добавено",
"addMemberPopup-title": "Членове",
"admin": "Администратор",
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
"admin-announcement": "Съобщение",
"admin-announcement-active": "Active System-Wide Announcement",
"admin-announcement-title": "Съобщение от администратора",
"all-boards": "Всички табла",
"and-n-other-card": "И __count__ друга карта",
"and-n-other-card_plural": "И __count__ други карти",
"apply": "Приложи",
"app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
"archive": "Премести в Архива",
"archive-all": "Премести всички в Архива",
"archive-board": "Премести Таблото в Архива",
"archive-card": "Премести Картата в Архива",
"archive-list": "Премести Списъка в Архива",
"archive-swimlane": "Премести Коридора в Архива",
"archive-selection": "Премести избраното в Архива",
"archiveBoardPopup-title": "Да преместя ли Таблото в Архива?",
"archived-items": "Архив",
"archived-boards": "Табла в Архива",
"restore-board": "Възстанови Таблото",
"no-archived-boards": "Няма Табла в Архива.",
"archives": "Архив",
"assign-member": "Възложи на член от екипа",
"attached": "прикачен",
"attachment": "Прикаченн файл",
"attachment-delete-pop": "Изтриването на прикачен файл е завинаги. Няма как да бъде възстановен.",
"attachmentDeletePopup-title": "Желаете ли да изтриете прикачения файл?",
"attachments": "Прикачени файлове",
"auto-watch": "Автоматично наблюдаване на таблата, когато са създадени",
"avatar-too-big": "Аватарът е прекалено голям (максимум 70KB)",
"back": "Назад",
"board-change-color": "Промени цвета",
"board-nb-stars": "%s звезди",
"board-not-found": "Таблото не е намерено",
"board-private-info": "This board will be <strong>private</strong>.",
"board-public-info": "This board will be <strong>public</strong>.",
"boardChangeColorPopup-title": "Change Board Background",
"boardChangeTitlePopup-title": "Промени името на Таблото",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Промени наблюдаването",
"boardMenuPopup-title": "Меню на Таблото",
"boards": "Табла",
"board-view": "Board View",
"board-view-cal": "Календар",
"board-view-swimlanes": "Коридори",
"board-view-lists": "Списъци",
"bucket-example": "Like “Bucket List” for example",
"cancel": "Cancel",
"card-archived": "Тази карта е преместена в Архива.",
"board-archived": "Това табло е преместено в Архива.",
"card-comments-title": "Тази карта има %s коментар.",
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "Можете да преместите картата в Архива, за да я премахнете от Таблото и така да запазите активността в него.",
"card-due": "Готова за",
"card-due-on": "Готова за",
"card-spent": "Изработено време",
"card-edit-attachments": "Промени прикачените файлове",
"card-edit-custom-fields": "Промени собствените полета",
"card-edit-labels": "Промени етикетите",
"card-edit-members": "Промени членовете",
"card-labels-title": "Промени етикетите за картата.",
"card-members-title": "Добави или премахни членове на Таблото от тази карта.",
"card-start": "Начало",
"card-start-on": "Започва на",
"cardAttachmentsPopup-title": "Прикачи от",
"cardCustomField-datePopup-title": "Промени датата",
"cardCustomFieldsPopup-title": "Промени собствените полета",
"cardDeletePopup-title": "Желаете да изтриете картата?",
"cardDetailsActionsPopup-title": "Опции",
"cardLabelsPopup-title": "Етикети",
"cardMembersPopup-title": "Членове",
"cardMorePopup-title": "Още",
"cards": "Карти",
"cards-count": "Карти",
"casSignIn": "Sign In with CAS",
"cardType-card": "Карта",
"cardType-linkedCard": "Свързана карта",
"cardType-linkedBoard": "Свързано табло",
"change": "Промени",
"change-avatar": "Промени аватара",
"change-password": "Промени паролата",
"change-permissions": "Промени правата",
"change-settings": "Промени настройките",
"changeAvatarPopup-title": "Промени аватара",
"changeLanguagePopup-title": "Промени езика",
"changePasswordPopup-title": "Промени паролата",
"changePermissionsPopup-title": "Промени правата",
"changeSettingsPopup-title": "Промяна на настройките",
"subtasks": "Подзадачи",
"checklists": "Списъци със задачи",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Натиснете, за да премахнете това табло от любими.",
"clipboard": "Клипборда или с драг & дроп",
"close": "Затвори",
"close-board": "Затвори Таблото",
"close-board-pop": "Ще можете да възстановите Таблото като натиснете на бутона \"Архив\" в началото на хедъра.",
"color-black": "черно",
"color-blue": "синьо",
"color-crimson": "crimson",
"color-darkgreen": "darkgreen",
"color-gold": "gold",
"color-gray": "gray",
"color-green": "зелено",
"color-indigo": "indigo",
"color-lime": "лайм",
"color-magenta": "magenta",
"color-mistyrose": "mistyrose",
"color-navy": "navy",
"color-orange": "оранжево",
"color-paleturquoise": "paleturquoise",
"color-peachpuff": "peachpuff",
"color-pink": "розово",
"color-plum": "plum",
"color-purple": "пурпурно",
"color-red": "червено",
"color-saddlebrown": "saddlebrown",
"color-silver": "silver",
"color-sky": "светло синьо",
"color-slateblue": "slateblue",
"color-white": "бяло",
"color-yellow": "жълто",
"unset-color": "Unset",
"comment": "Коментирай",
"comment-placeholder": "Напиши коментар",
"comment-only": "Само коментар",
"comment-only-desc": "Може да коментира само в карти.",
"no-comments": "Няма коментари",
"no-comments-desc": "Can not see comments and activities.",
"computer": "Компютър",
"confirm-subtask-delete-dialog": "Сигурен ли сте, че искате да изтриете подзадачата?",
"confirm-checklist-delete-dialog": "Сигурни ли сте, че искате да изтриете този чеклист?",
"copy-card-link-to-clipboard": "Копирай връзката на картата в клипборда",
"linkCardPopup-title": "Свържи картата",
"searchCardPopup-title": "Търсене на карта",
"copyCardPopup-title": "Копирай картата",
"copyChecklistToManyCardsPopup-title": "Копирай чеклисти в други карти",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
"create": "Създай",
"createBoardPopup-title": "Създай Табло",
"chooseBoardSourcePopup-title": "Импортирай Табло",
"createLabelPopup-title": "Създай Табло",
"createCustomField": "Създай Поле",
"createCustomFieldPopup-title": "Създай Поле",
"current": "сегашен",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Чекбокс",
"custom-field-date": "Дата",
"custom-field-dropdown": "Падащо меню",
"custom-field-dropdown-none": "(няма)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Номер",
"custom-field-text": "Текст",
"custom-fields": "Собствени полета",
"date": "Дата",
"decline": "Отказ",
"default-avatar": "Основен аватар",
"delete": "Изтрий",
"deleteCustomFieldPopup-title": "Изтриване на Собственото поле?",
"deleteLabelPopup-title": "Желаете да изтриете етикета?",
"description": "Описание",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
"discard": "Отказ",
"done": "Готово",
"download": "Сваляне",
"edit": "Промени",
"edit-avatar": "Промени аватара",
"edit-profile": "Промяна на профила",
"edit-wip-limit": "Промени WIP лимита",
"soft-wip-limit": "\"Мек\" WIP лимит",
"editCardStartDatePopup-title": "Промени началната дата",
"editCardDueDatePopup-title": "Промени датата за готовност",
"editCustomFieldPopup-title": "Промени Полето",
"editCardSpentTimePopup-title": "Промени изработеното време",
"editLabelPopup-title": "Промяна на Етикета",
"editNotificationPopup-title": "Промени известията",
"editProfilePopup-title": "Промяна на профила",
"email": "Имейл",
"email-enrollAccount-subject": "Ваш профил беше създаден на __siteName__",
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
"email-fail": "Неуспешно изпращане на имейла",
"email-fail-text": "Възникна грешка при изпращането на имейла",
"email-invalid": "Невалиден имейл",
"email-invite": "Покани чрез имейл",
"email-invite-subject": "__inviter__ sent you an invitation",
"email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
"email-resetPassword-subject": "Reset your password on __siteName__",
"email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
"email-sent": "Имейлът е изпратен",
"email-verifyEmail-subject": "Verify your email address on __siteName__",
"email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
"enable-wip-limit": "Включи WIP лимита",
"error-board-doesNotExist": "Това табло не съществува",
"error-board-notAdmin": "За да направите това трябва да сте администратор на това табло",
"error-board-notAMember": "За да направите това трябва да сте член на това табло",
"error-json-malformed": "Текстът Ви не е валиден JSON",
"error-json-schema": "JSON информацията Ви не съдържа информация във валиден формат",
"error-list-doesNotExist": "Този списък не съществува",
"error-user-doesNotExist": "Този потребител не съществува",
"error-user-notAllowSelf": "Не можете да поканите себе си",
"error-user-notCreated": "Този потребител не е създаден",
"error-username-taken": "Това потребителско име е вече заето",
"error-email-taken": "Имейлът е вече зает",
"export-board": "Експортиране на Табло",
"filter": "Филтър",
"filter-cards": "Филтрирай картите",
"filter-clear": "Премахване на филтрите",
"filter-no-label": "без етикет",
"filter-no-member": "без член",
"filter-no-custom-fields": "Няма Собствени полета",
"filter-on": "Има приложени филтри",
"filter-on-desc": "В момента филтрирате картите в това табло. Моля, натиснете тук, за да промените филтъра.",
"filter-to-selection": "Филтрирай избраните",
"advanced-filter-label": "Advanced Filter",
"advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
"fullname": "Име",
"header-logo-title": "Назад към страницата с Вашите табла.",
"hide-system-messages": "Скриване на системните съобщения",
"headerBarCreateBoardPopup-title": "Създай Табло",
"home": "Начало",
"import": "Импорт",
"link": "Връзка",
"import-board": "Импортирай Табло",
"import-board-c": "Импортирай Табло",
"import-board-title-trello": "Импорт на табло от Trello",
"import-board-title-wekan": "Import board from previous export",
"import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
"import-sandstorm-warning": "Импортирането ще изтрие всичката налична информация в таблото и ще я замени с нова.",
"from-trello": "От Trello",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
"import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
"import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.",
"import-json-placeholder": "Копирайте валидната Ви JSON информация тук",
"import-map-members": "Map members",
"import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
"import-show-user-mapping": "Review members mapping",
"import-user-select": "Pick your existing user you want to use as this member",
"importMapMembersAddPopup-title": "Select member",
"info": "Версия",
"initials": "Инициали",
"invalid-date": "Невалидна дата",
"invalid-time": "Невалиден час",
"invalid-user": "Невалиден потребител",
"joined": "присъедини",
"just-invited": "Бяхте поканени в това табло",
"keyboard-shortcuts": "Преки пътища с клавиатурата",
"label-create": "Създай етикет",
"label-default": "%s етикет (по подразбиране)",
"label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
"labels": "Етикети",
"language": "Език",
"last-admin-desc": "You can’t change roles because there must be at least one admin.",
"leave-board": "Leave Board",
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "Връзка към тази карта",
"list-archive-cards": "Премести всички карти от този списък в Архива",
"list-archive-cards-pop": "Това ще премахне всички карти от този Списък от Таблото. За да видите картите в Архива и да ги върнете натиснете на \"Меню\" > \"Архив\".",
"list-move-cards": "Премести всички карти в този списък",
"list-select-cards": "Избери всички карти в този списък",
"set-color-list": "Set Color",
"listActionPopup-title": "List Actions",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Импорт на карта от Trello",
"listMorePopup-title": "Още",
"link-list": "Връзка към този списък",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "Можете да преместите списъка в Архива, за да го премахнете от Таблото и така да запазите активността в него.",
"lists": "Списъци",
"swimlanes": "Коридори",
"log-out": "Изход",
"log-in": "Вход",
"loginPopup-title": "Вход",
"memberMenuPopup-title": "Настройки на профила",
"members": "Членове",
"menu": "Меню",
"move-selection": "Move selection",
"moveCardPopup-title": "Премести картата",
"moveCardToBottom-title": "Премести в края",
"moveCardToTop-title": "Премести в началото",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "Множествен избор",
"multi-selection-on": "Множественият избор е приложен",
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "Моите табла",
"name": "Име",
"no-archived-cards": "Няма карти в Архива.",
"no-archived-lists": "Няма списъци в Архива.",
"no-archived-swimlanes": "Няма коридори в Архива.",
"no-results": "No results",
"normal": "Normal",
"normal-desc": "Can view and edit cards. Can't change settings.",
"not-accepted-yet": "Invitation not accepted yet",
"notify-participate": "Получавате информация за всички карти, в които сте отбелязани или сте създали",
"notify-watch": "Получавате информация за всички табла, списъци и карти, които наблюдавате",
"optional": "optional",
"or": "или",
"page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
"page-not-found": "Page not found.",
"password": "Парола",
"paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
"participating": "Participating",
"preview": "Preview",
"previewAttachedImagePopup-title": "Preview",
"previewClipboardImagePopup-title": "Preview",
"private": "Private",
"private-desc": "This board is private. Only people added to the board can view and edit it.",
"profile": "Профил",
"public": "Public",
"public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
"quick-access-description": "Star a board to add a shortcut in this bar.",
"remove-cover": "Remove Cover",
"remove-from-board": "Remove from Board",
"remove-label": "Remove Label",
"listDeletePopup-title": "Желаете да изтриете списъка?",
"remove-member": "Премахни член",
"remove-member-from-card": "Премахни от картата",
"remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
"removeMemberPopup-title": "Remove Member?",
"rename": "Rename",
"rename-board": "Промени името на Таблото",
"restore": "Възстанови",
"save": "Запази",
"search": "Търсене",
"rules": "Правила",
"search-cards": "Search from card titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "Избери цвят",
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
"setWipLimitPopup-title": "Въведи WIP лимит",
"shortcut-assign-self": "Добави себе си към тази карта",
"shortcut-autocomplete-emoji": "Autocomplete emoji",
"shortcut-autocomplete-members": "Autocomplete members",
"shortcut-clear-filters": "Изчистване на всички филтри",
"shortcut-close-dialog": "Close Dialog",
"shortcut-filter-my-cards": "Филтрирай моите карти",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Отвори/затвори сайдбара с филтри",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
"show-cards-minimum-count": "Покажи бройката на картите, ако списъка съдържа повече от",
"sidebar-open": "Open Sidebar",
"sidebar-close": "Close Sidebar",
"signupPopup-title": "Create an Account",
"star-board-title": "Click to star this board. It will show up at top of your boards list.",
"starred-boards": "Любими табла",
"starred-boards-description": "Любимите табла се показват в началото на списъка Ви.",
"subscribe": "Subscribe",
"team": "Team",
"this-board": "това табло",
"this-card": "картата",
"spent-time-hours": "Изработено време (часа)",
"overtime-hours": "Оувъртайм (часа)",
"overtime": "Оувъртайм",
"has-overtime-cards": "Има карти с оувъртайм",
"has-spenttime-cards": "Има карти с изработено време",
"time": "Време",
"title": "Title",
"tracking": "Следене",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"type": "Type",
"unassign-member": "Unassign member",
"unsaved-description": "You have an unsaved description.",
"unwatch": "Спри наблюдаването",
"upload": "Upload",
"upload-avatar": "Качване на аватар",
"uploaded-avatar": "Качихте аватар",
"username": "Потребителско име",
"view-it": "View it",
"warn-list-archived": "внимание: тази карта е в списък в Архива",
"watch": "Наблюдавай",
"watching": "Наблюдава",
"watching-info": "You will be notified of any change in this board",
"welcome-board": "Welcome Board",
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Невалиден WIP лимит",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
"wipLimitErrorPopup-dialog-pt2": "Моля, преместете някои от задачите от този списък или въведете по-висок WIP лимит.",
"admin-panel": "Администраторски панел",
"settings": "Настройки",
"people": "Хора",
"registration": "Регистрация",
"disable-self-registration": "Disable Self-Registration",
"invite": "Покани",
"invite-people": "Покани хора",
"to-boards": "в табло/а",
"email-addresses": "Имейл адреси",
"smtp-host-description": "Адресът на SMTP сървъра, който обслужва Вашите имейли.",
"smtp-port-description": "Портът, който Вашият SMTP сървър използва за изходящи имейли.",
"smtp-tls-description": "Разреши TLS поддръжка за SMTP сървъра",
"smtp-host": "SMTP хост",
"smtp-port": "SMTP порт",
"smtp-username": "Потребителско име",
"smtp-password": "Парола",
"smtp-tls": "TLS поддръжка",
"send-from": "От",
"send-smtp-test": "Изпрати тестов имейл на себе си",
"invitation-code": "Invitation Code",
"email-invite-register-subject": "__inviter__ sent you an invitation",
"email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
"email-smtp-test-subject": "SMTP Test Email",
"email-smtp-test-text": "Успешно изпратихте имейл",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
"outgoing-webhooks": "Outgoing Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
"boardCardTitlePopup-title": "Card Title Filter",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(Unknown)",
"Node_version": "Версия на Node",
"OS_Arch": "Архитектура на ОС",
"OS_Cpus": "Брой CPU ядра",
"OS_Freemem": "Свободна памет",
"OS_Loadavg": "ОС средно натоварване",
"OS_Platform": "ОС платформа",
"OS_Release": "ОС Версия",
"OS_Totalmem": "ОС Общо памет",
"OS_Type": "Тип ОС",
"OS_Uptime": "OS Ъптайм",
"days": "дни",
"hours": "часа",
"minutes": "минути",
"seconds": "секунди",
"show-field-on-card": "Покажи това поле в картата",
"automatically-field-on-card": "Auto create field to all cards",
"showLabel-field-on-card": "Show field label on minicard",
"yes": "Да",
"no": "Не",
"accounts": "Профили",
"accounts-allowEmailChange": "Разреши промяна на имейла",
"accounts-allowUserNameChange": "Allow Username Change",
"createdAt": "Създаден на",
"verified": "Потвърден",
"active": "Активен",
"card-received": "Получена",
"card-received-on": "Получена на",
"card-end": "Завършена",
"card-end-on": "Завършена на",
"editCardReceivedDatePopup-title": "Промени датата на получаване",
"editCardEndDatePopup-title": "Промени датата на завършване",
"setCardColorPopup-title": "Set color",
"setCardActionsColorPopup-title": "Choose a color",
"setSwimlaneColorPopup-title": "Choose a color",
"setListColorPopup-title": "Choose a color",
"assigned-by": "Разпределена от",
"requested-by": "Поискан от",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Изтриване на Таблото?",
"delete-board": "Изтрий таблото",
"default-subtasks-board": "Подзадачи за табло __board__",
"default": "по подразбиране",
"queue": "Опашка",
"subtask-settings": "Настройки на Подзадачите",
"boardSubtaskSettingsPopup-title": "Настройки за Подзадачите за това Табло",
"show-subtasks-field": "Картата може да има подзадачи",
"deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Show parent in minicard:",
"prefix-with-full-path": "Prefix with full path",
"prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path",
"subtext-with-parent": "Subtext with parent",
"change-card-parent": "Промени източника на картата",
"parent-card": "Карта-източник",
"source-board": "Source board",
"no-parent": "Не показвай източника",
"activity-added-label": "добави етикет '%s' към %s",
"activity-removed-label": "премахна етикет '%s' от %s",
"activity-delete-attach": "изтри прикачен файл от %s",
"activity-added-label-card": "добави етикет '%s'",
"activity-removed-label-card": "премахна етикет '%s'",
"activity-delete-attach-card": "изтри прикачения файл",
"r-rule": "Правило",
"r-add-trigger": "Добави спусък",
"r-add-action": "Добави действие",
"r-board-rules": "Правила за таблото",
"r-add-rule": "Добави правилото",
"r-view-rule": "Виж правилото",
"r-delete-rule": "Изтрий правилото",
"r-new-rule-name": "Заглавие за новото правило",
"r-no-rules": "Няма правила",
"r-when-a-card": "Когато карта",
"r-is": "е",
"r-is-moved": "преместена",
"r-added-to": "добавена в",
"r-removed-from": "премахната от",
"r-the-board": "таблото",
"r-list": "списък",
"set-filter": "Set Filter",
"r-moved-to": "Moved to",
"r-moved-from": "Moved from",
"r-archived": "Преместено в Архива",
"r-unarchived": "Възстановено от Архива",
"r-a-card": "карта",
"r-when-a-label-is": "When a label is",
"r-when-the-label-is": "When the label is",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
"r-name": "име",
"r-when-a-attach": "When an attachment",
"r-when-a-checklist": "When a checklist is",
"r-when-the-checklist": "When the checklist",
"r-completed": "Completed",
"r-made-incomplete": "Made incomplete",
"r-when-a-item": "When a checklist item is",
"r-when-the-item": "When the checklist item",
"r-checked": "Checked",
"r-unchecked": "Unchecked",
"r-move-card-to": "Премести картата в",
"r-top-of": "началото на",
"r-bottom-of": "края на",
"r-its-list": "списъка й",
"r-archive": "Премести в Архива",
"r-unarchive": "Възстанови от Архива",
"r-card": "карта",
"r-add": "Добави",
"r-remove": "Remove",
"r-label": "label",
"r-member": "member",
"r-remove-all": "Remove all members from the card",
"r-set-color": "Set color to",
"r-checklist": "checklist",
"r-check-all": "Check all",
"r-uncheck-all": "Uncheck all",
"r-items-check": "items of checklist",
"r-check": "Check",
"r-uncheck": "Uncheck",
"r-item": "item",
"r-of-checklist": "of checklist",
"r-send-email": "Send an email",
"r-to": "to",
"r-subject": "subject",
"r-rule-details": "Детайли за правилото",
"r-d-move-to-top-gen": "Move card to top of its list",
"r-d-move-to-top-spec": "Move card to top of list",
"r-d-move-to-bottom-gen": "Move card to bottom of its list",
"r-d-move-to-bottom-spec": "Move card to bottom of list",
"r-d-send-email": "Send email",
"r-d-send-email-to": "to",
"r-d-send-email-subject": "subject",
"r-d-send-email-message": "message",
"r-d-archive": "Премести картата в Архива",
"r-d-unarchive": "Възстанови картата от Архива",
"r-d-add-label": "Add label",
"r-d-remove-label": "Remove label",
"r-create-card": "Create new card",
"r-in-list": "in list",
"r-in-swimlane": "in swimlane",
"r-d-add-member": "Add member",
"r-d-remove-member": "Remove member",
"r-d-remove-all-member": "Remove all member",
"r-d-check-all": "Check all items of a list",
"r-d-uncheck-all": "Uncheck all items of a list",
"r-d-check-one": "Check item",
"r-d-uncheck-one": "Uncheck item",
"r-d-check-of-list": "of checklist",
"r-d-add-checklist": "Добави чеклист",
"r-d-remove-checklist": "Премахни чеклист",
"r-by": "by",
"r-add-checklist": "Добави чеклист",
"r-with-items": "с точки",
"r-items-list": "точка1,точка2,точка3",
"r-add-swimlane": "Добави коридор",
"r-swimlane-name": "име на коридора",
"r-board-note": "Note: leave a field empty to match every possible value.",
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
"r-when-a-card-is-moved": "When a card is moved to another list",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
"authentication-method": "Authentication method",
"authentication-type": "Authentication type",
"custom-product-name": "Custom Product Name",
"layout": "Layout",
"hide-logo": "Hide Logo",
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+9 -7
View File
@@ -192,7 +192,7 @@
"color-slateblue": "azul ardósia",
"color-white": "branco",
"color-yellow": "amarelo",
"unset-color": "Unset",
"unset-color": "Remover",
"comment": "Comentário",
"comment-placeholder": "Escrever Comentário",
"comment-only": "Somente comentários",
@@ -335,10 +335,10 @@
"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-morto”.",
"list-move-cards": "Mover todos os cartões desta lista",
"list-select-cards": "Selecionar todos os cartões nesta lista",
"set-color-list": "Set Color",
"set-color-list": "Definir Cor",
"listActionPopup-title": "Listar Ações",
"swimlaneActionPopup-title": "Ações de Raia",
"swimlaneAddPopup-title": "Add a Swimlane below",
"swimlaneAddPopup-title": "Adicionar uma Raia abaixo ",
"listImportCardPopup-title": "Importe um cartão do Trello",
"listMorePopup-title": "Mais",
"link-list": "Vincular a esta lista",
@@ -520,9 +520,9 @@
"editCardReceivedDatePopup-title": "Modificar data de recebimento",
"editCardEndDatePopup-title": "Mudar data de fim",
"setCardColorPopup-title": "Definir cor",
"setCardActionsColorPopup-title": "Choose a color",
"setSwimlaneColorPopup-title": "Choose a color",
"setListColorPopup-title": "Choose a color",
"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. Você perderá todas as listas, cartões e ações associados nesse quadro.",
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Adicionar HTML Customizado depois do início do <body>",
"add-custom-html-before-body-end": "Adicionar HTML Customizado antes do fim do </body>",
"error-undefined": "Algo deu errado",
"error-ldap-login": "Um erro ocorreu enquanto tentava entrar"
"error-ldap-login": "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"
}
+30 -28
View File
@@ -19,36 +19,36 @@
"act-importCard": "__card__ importado",
"act-importList": "__list__ importada",
"act-joinMember": "__member__ adicionado ao __card__",
"act-moveCard": "moved __card__ from __oldList__ to __list__",
"act-removeBoardMember": "removed __member__ from __board__",
"act-restoredCard": "restored __card__ to __board__",
"act-unjoinMember": "removed __member__ from __card__",
"act-moveCard": "__card__ movido de __oldList__ para __list__",
"act-removeBoardMember": "__member__ removido de __board__",
"act-restoredCard": "__card__ restaurado para __board__",
"act-unjoinMember": "__member__ removido de __card__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
"activities": "Activities",
"activity": "Activity",
"activity-added": "added %s to %s",
"activity-archived": "%s moved to Archive",
"activity-attached": "attached %s to %s",
"actions": "Ações",
"activities": "Atividade",
"activity": "Atividade",
"activity-added": "adicionado %s a %s",
"activity-archived": "%s arquivado",
"activity-attached": "anexado %s a %s",
"activity-created": "Criado %s",
"activity-customfield-created": "created custom field %s",
"activity-excluded": "excluded %s from %s",
"activity-imported": "imported %s into %s from %s",
"activity-imported-board": "imported %s from %s",
"activity-joined": "joined %s",
"activity-moved": "moved %s from %s to %s",
"activity-on": "on %s",
"activity-removed": "removed %s from %s",
"activity-sent": "sent %s to %s",
"activity-unjoined": "unjoined %s",
"activity-subtask-added": "added subtask to %s",
"activity-checked-item": "checked %s in checklist %s of %s",
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
"activity-checklist-completed": "completed the checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-customfield-created": "criado campo customizado %s",
"activity-excluded": "excuído %s de %s",
"activity-imported": "importado %s para %s de %s",
"activity-imported-board": "importado %s de %s",
"activity-joined": "entrou em %s",
"activity-moved": "movido %s de %s para %s",
"activity-on": "em %s",
"activity-removed": "removido %s de %s",
"activity-sent": "enviado %s para %s",
"activity-unjoined": "saiu de %s",
"activity-subtask-added": "adicionada subtarefa a %s",
"activity-checked-item": "marcado %s na checklist %s de %s",
"activity-unchecked-item": "desmarcado %s na checklist %s de %s",
"activity-checklist-added": "checklist adicionada a %s",
"activity-checklist-removed": "checklist removida de %s",
"activity-checklist-completed": "checklist %s de %s foi completada",
"activity-checklist-uncompleted": "checklist %s de %s foi marcada como não completada",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Adicionar",
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+4 -2
View File
@@ -494,7 +494,7 @@
"OS_Freemem": "Свободная память",
"OS_Loadavg": "Средняя загрузка",
"OS_Platform": "Платформа",
"OS_Release": "Релиз",
"OS_Release": "Версия ядра",
"OS_Totalmem": "Общая память",
"OS_Type": "Тип ОС",
"OS_Uptime": "Время работы",
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Добавить HTML после начала <body> ",
"add-custom-html-before-body-end": "Добавить HTML до завершения </body>",
"error-undefined": "Что-то пошло не так",
"error-ldap-login": "Ошибка при попытке авторизации"
"error-ldap-login": "Ошибка при попытке авторизации",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+36 -34
View File
@@ -82,16 +82,16 @@
"archive": "Flytta till Arkiv",
"archive-all": "Flytta alla till Arkiv",
"archive-board": "Flytta Anslagstavla till Arkiv",
"archive-card": "Move Card to Archive",
"archive-list": "Move List to Archive",
"archive-card": "Flytta Kort till Arkiv",
"archive-list": "Flytta Lista till Arkiv",
"archive-swimlane": "Move Swimlane to Archive",
"archive-selection": "Move selection to Archive",
"archive-selection": "Flytta markerade till Arkiv",
"archiveBoardPopup-title": "Move Board to Archive?",
"archived-items": "Arkivera",
"archived-items": "Arkiv",
"archived-boards": "Boards in Archive",
"restore-board": "Återställ anslagstavla",
"no-archived-boards": "No Boards in Archive.",
"archives": "Arkivera",
"archives": "Arkiv",
"assign-member": "Tilldela medlem",
"attached": "bifogad",
"attachment": "Bilaga",
@@ -118,7 +118,7 @@
"board-view-lists": "Listor",
"bucket-example": "Gilla \"att-göra-innan-jag-dör-lista\" till exempel",
"cancel": "Avbryt",
"card-archived": "This card is moved to Archive.",
"card-archived": "Detta kort är flyttat till Arkiv.",
"board-archived": "Den här anslagstavlan är flyttad till Arkiv.",
"card-comments-title": "Detta kort har %s kommentar.",
"card-delete-notice": "Ta bort är permanent. Du kommer att förlora alla åtgärder i samband med detta kort.",
@@ -170,9 +170,9 @@
"color-black": "svart",
"color-blue": "blå",
"color-crimson": "crimson",
"color-darkgreen": "darkgreen",
"color-gold": "gold",
"color-gray": "gray",
"color-darkgreen": "mörkgrön",
"color-gold": "guld",
"color-gray": "grå",
"color-green": "grön",
"color-indigo": "indigo",
"color-lime": "lime",
@@ -186,11 +186,11 @@
"color-plum": "plum",
"color-purple": "lila",
"color-red": "röd",
"color-saddlebrown": "saddlebrown",
"color-saddlebrown": "sadelbrun",
"color-silver": "silver",
"color-sky": "himmel",
"color-slateblue": "slateblue",
"color-white": "white",
"color-white": "vit",
"color-yellow": "gul",
"unset-color": "Unset",
"comment": "Kommentera",
@@ -288,7 +288,7 @@
"filter-on-desc": "Du filtrerar kort på denna anslagstavla. Klicka här för att redigera filter.",
"filter-to-selection": "Filter till val",
"advanced-filter-label": "Avancerat filter",
"advanced-filter-description": "Avancerade Filter låter dig skriva en sträng innehållande följande operatorer: == != <= >= && || ( ). Ett mellanslag används som separator mellan operatorerna. Du kan filtrera alla specialfält genom att skriva dess namn och värde. Till exempel: Fält1 == Vårde1. Notera: om fälten eller värden innehåller mellanrum behöver du innesluta dem med enkla citatstecken. Till exempel: 'Fält 1' == 'Värde 1'. För att skippa enkla kontrolltecken (' \\/) kan du använda \\. Till exempel: Fält1 == I\\'m. Du kan även kombinera fler villkor. TIll exempel: F1 == V1 || F1 == V2. Vanligtvis läses operatorerna från vänster till höger. Du kan ändra ordning genom att använda paranteser. TIll exempel: F1 == V1 && ( F2 == V2 || F2 == V3 ). Du kan även söka efter textfält med hjälp av regex: F1 == /Tes.*/i",
"advanced-filter-description": "Avancerade filter låter dig skriva en sträng innehållande följande operatorer: == != <= >= && || ( ). Ett mellanslag används som separator mellan operatorerna. Du kan filtrera alla specialfält genom att skriva dess namn och värde. Till exempel: Fält1 == Vårde1. Notera: om fälten eller värden innehåller mellanrum behöver du innesluta dem med enkla citatstecken. Till exempel: 'Fält 1' == 'Värde 1'. För att skippa enkla kontrolltecken (' \\/) kan du använda \\. Till exempel: Fält1 == I\\'m. Du kan även kombinera fler villkor. TIll exempel: F1 == V1 || F1 == V2. Vanligtvis läses operatorerna från vänster till höger. Du kan ändra ordning genom att använda paranteser. TIll exempel: F1 == V1 && ( F2 == V2 || F2 == V3 ). Du kan även söka efter textfält med hjälp av regex: F1 == /Tes.*/i",
"fullname": "Namn",
"header-logo-title": "Gå tillbaka till din anslagstavlor-sida.",
"hide-system-messages": "Göm systemmeddelanden",
@@ -303,7 +303,7 @@
"import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
"import-sandstorm-warning": "Importerad anslagstavla raderar all befintlig data på anslagstavla och ersätter den med importerat anslagstavla.",
"from-trello": "Från Trello",
"from-wekan": "From previous export",
"from-wekan": "Från tidigare export",
"import-board-instruction-trello": "I din Trello-anslagstavla, gå till 'Meny', sedan 'Mera', 'Skriv ut och exportera', 'Exportera JSON' och kopiera den resulterande text.",
"import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
"import-board-instruction-about-errors": "Om du får fel vid import av anslagstavla, ibland importerar fortfarande fungerar, och styrelsen är på alla sidor för anslagstavlor.",
@@ -312,7 +312,7 @@
"import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
"import-show-user-mapping": "Granska medlemskartläggning",
"import-user-select": "Pick your existing user you want to use as this member",
"importMapMembersAddPopup-title": "Select member",
"importMapMembersAddPopup-title": "Välj medlem",
"info": "Version",
"initials": "Initialer ",
"invalid-date": "Ogiltigt datum",
@@ -331,7 +331,7 @@
"leave-board-pop": "Är du säker på att du vill lämna __boardTitle__? Du kommer att tas bort från alla kort på den här anslagstavlan.",
"leaveBoardPopup-title": "Lämna anslagstavla ?",
"link-card": "Länka till detta kort",
"list-archive-cards": "Move all cards in this list to Archive",
"list-archive-cards": "Flytta alla kort i den här listan till Arkiv",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
"list-move-cards": "Flytta alla kort i denna lista",
"list-select-cards": "Välj alla kort i denna lista",
@@ -363,8 +363,8 @@
"muted-info": "Du kommer aldrig att meddelas om eventuella ändringar i denna anslagstavla",
"my-boards": "Mina anslagstavlor",
"name": "Namn",
"no-archived-cards": "No cards in Archive.",
"no-archived-lists": "No lists in Archive.",
"no-archived-cards": "Inga kort i Arkiv.",
"no-archived-lists": "Inga listor i Arkiv.",
"no-archived-swimlanes": "No swimlanes in Archive.",
"no-results": "Inga reslutat",
"normal": "Normal",
@@ -445,7 +445,7 @@
"uploaded-avatar": "Laddade upp en avatar",
"username": "Änvandarnamn",
"view-it": "Visa det",
"warn-list-archived": "warning: this card is in an list at Archive",
"warn-list-archived": "varning: detta kort finns i en lista i Arkiv",
"watch": "Bevaka",
"watching": "Bevakar",
"watching-info": "Du kommer att meddelas om alla ändringar på denna anslagstavla",
@@ -498,7 +498,7 @@
"OS_Totalmem": "OS totalt minne",
"OS_Type": "OS Typ",
"OS_Uptime": "OS drifttid",
"days": "days",
"days": "dagar",
"hours": "timmar",
"minutes": "minuter",
"seconds": "sekunder",
@@ -519,10 +519,10 @@
"card-end-on": "Slutar den",
"editCardReceivedDatePopup-title": "Ändra mottagningsdatum",
"editCardEndDatePopup-title": "Ändra slutdatum",
"setCardColorPopup-title": "Set color",
"setCardActionsColorPopup-title": "Choose a color",
"setSwimlaneColorPopup-title": "Choose a color",
"setListColorPopup-title": "Choose a color",
"setCardColorPopup-title": "Ange färg",
"setCardActionsColorPopup-title": "Välj en färg",
"setSwimlaneColorPopup-title": "Välj en färg",
"setListColorPopup-title": "Välj en färg",
"assigned-by": "Tilldelad av",
"requested-by": "Efterfrågad av",
"board-delete-notice": "Borttagningen är permanent. Du kommer förlora alla listor, kort och händelser kopplade till den här anslagstavlan.",
@@ -559,20 +559,20 @@
"r-add-rule": "Lägg till regel",
"r-view-rule": "Visa regel",
"r-delete-rule": "Ta bort regel",
"r-new-rule-name": "New rule title",
"r-new-rule-name": "Ny titel på regel",
"r-no-rules": "Inga regler",
"r-when-a-card": "When a card",
"r-when-a-card": "När ett kort",
"r-is": "är",
"r-is-moved": "is moved",
"r-added-to": "added to",
"r-is-moved": "är flyttad",
"r-added-to": "tillagd till",
"r-removed-from": "Borttagen från",
"r-the-board": "anslagstavlan",
"r-list": "lista",
"set-filter": "Set Filter",
"r-moved-to": "Flyttad till",
"r-moved-from": "Flyttad från",
"r-archived": "Moved to Archive",
"r-unarchived": "Restored from Archive",
"r-archived": "Flyttad till Arkiv",
"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",
@@ -622,8 +622,8 @@
"r-d-send-email-to": "till",
"r-d-send-email-subject": "ämne",
"r-d-send-email-message": "meddelande",
"r-d-archive": "Move card to Archive",
"r-d-unarchive": "Restore card from Archive",
"r-d-archive": "Flytta kortet till Arkiv",
"r-d-unarchive": "Återställ kortet från Arkiv",
"r-d-add-label": "Lägg till etikett",
"r-d-remove-label": "Ta bort etikett",
"r-create-card": "Create new card",
@@ -639,7 +639,7 @@
"r-d-check-of-list": "of checklist",
"r-d-add-checklist": "Lägg till checklista",
"r-d-remove-checklist": "Ta bort checklista",
"r-by": "by",
"r-by": "av",
"r-add-checklist": "Lägg till checklista",
"r-with-items": "with items",
"r-items-list": "item1,item2,item3",
@@ -658,6 +658,8 @@
"hide-logo": "Dölj logotypen",
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-undefined": "Något gick fel",
"error-ldap-login": "Ett fel uppstod när du försökte logga in",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Bir şeyler yanlış gitti",
"error-ldap-login": "Giriş yapmaya çalışırken bir hata oluştu"
"error-ldap-login": "Giriş yapmaya çalışırken bir hata oluştu",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+3 -1
View File
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "添加定制的HTML在开始<body>之前",
"add-custom-html-before-body-end": "添加定制的HTML在结束</body>之后",
"error-undefined": "出了点问题",
"error-ldap-login": "尝试登陆时出错"
"error-ldap-login": "尝试登陆时出错",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+155 -153
View File
@@ -1,51 +1,51 @@
{
"accept": "接受",
"act-activity-notify": "Activity Notification",
"act-addAttachment": "已新增附件__attachment__至__card__",
"act-addSubtask": "已新增子任務__checklist__至__card__",
"act-addChecklist": "已新增待辦清單__checklist__至__card__",
"act-addChecklistItem": "已新增__checklistItem__到__card__中的待辦清單__checklist__",
"act-addComment": "已評論__card__: __comment__",
"act-activity-notify": "活動通知",
"act-addAttachment": "已新增附件 __attachment__ 到 __card__",
"act-addSubtask": "已新增子任務 __checklist__ 到 __card__",
"act-addChecklist": "已新增待辦清單 __checklist__ 到 __card__",
"act-addChecklistItem": "已新增 __checklistItem__ 到 __card__ 中的待辦清單 __checklist__",
"act-addComment": "已評論 __card__: __comment__",
"act-createBoard": "已新增 __board__",
"act-createCard": "已將__card__加入__list__",
"act-createCustomField": "已新增自訂欄位__customField__",
"act-createList": "已新增__list__至__board__",
"act-addBoardMember": "已在__board__中新增成員__member__",
"act-archivedBoard": "__board__ moved to Archive",
"act-archivedCard": "__card__ moved to Archive",
"act-archivedList": "__list__ moved to Archive",
"act-archivedSwimlane": "__swimlane__ moved to Archive",
"act-importBoard": "已匯入__board__",
"act-importCard": "已匯入__card__",
"act-importList": "已匯入__list__",
"act-joinMember": "已在__card__中新增成員__member__",
"act-moveCard": "已將__card__從__oldList__移動至__list__",
"act-removeBoardMember": "已從__board__中移除成員__member__",
"act-restoredCard": "已將__card__回復至__board__",
"act-unjoinMember": "已從__card__中移除成員__member__",
"act-createCard": "已將 __card__ 加入 __list__",
"act-createCustomField": "已新增自訂欄位 __customField__",
"act-createList": "已新增 __list__ 到 __board__",
"act-addBoardMember": "已在 __board__ 中新增成員 __member__",
"act-archivedBoard": "__board__ 已被移到封存",
"act-archivedCard": "__card__ 已被移到封存",
"act-archivedList": "__list__ 已被移到封存",
"act-archivedSwimlane": "__swimlane__ 已被移到封存",
"act-importBoard": "已匯入 __board__",
"act-importCard": "已匯入 __card__",
"act-importList": "已匯入 __list__",
"act-joinMember": "已在 __card__ 中新增成員 __member__",
"act-moveCard": "已將 __card__ 從 __oldList__ 移到 __list__",
"act-removeBoardMember": "已從 __board__ 中移除成員 __member__",
"act-restoredCard": "已將 __card__ 回復到 __board__",
"act-unjoinMember": "已從 __card__ 中移除成員 __member__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "操作",
"activities": "活動",
"activity": "活動",
"activity-added": "新增 %s 至 %s",
"activity-archived": "%s moved to Archive",
"activity-attached": "已新增附件 %s 至 %s",
"activity-added": "新增 %s 到 %s",
"activity-archived": "%s 已被移到封存",
"activity-attached": "已新增附件 %s 到 %s",
"activity-created": "建立 %s",
"activity-customfield-created": "created custom field %s",
"activity-customfield-created": "已建立的自訂欄位 %s",
"activity-excluded": "排除 %s 從 %s",
"activity-imported": "匯入 %s 至 %s 從 %s 中",
"activity-imported": "匯入 %s 到 %s 從 %s 中",
"activity-imported-board": "已匯入 %s 從 %s 中",
"activity-joined": "關聯 %s",
"activity-moved": "將 %s 從 %s 移動到 %s",
"activity-joined": "已關聯 %s",
"activity-moved": "將 %s 從 %s 移到 %s",
"activity-on": "在 %s",
"activity-removed": "移除 %s 從 %s 中",
"activity-sent": "寄送 %s 至 %s",
"activity-unjoined": "解除關聯 %s",
"activity-subtask-added": "added subtask to %s",
"activity-removed": "已移除 %s 從 %s 中",
"activity-sent": "已寄送 %s 到 %s",
"activity-unjoined": "已解除關聯 %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 the checklist %s of %s",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
@@ -59,8 +59,8 @@
"add-attachment": "新增附件",
"add-board": "新增看板",
"add-card": "新增卡片",
"add-swimlane": "Add Swimlane",
"add-subtask": "Add Subtask",
"add-swimlane": "新增泳道圖",
"add-subtask": "新增子任務",
"add-checklist": "新增待辦清單",
"add-checklist-item": "新增項目",
"add-cover": "新增封面",
@@ -72,166 +72,166 @@
"admin": "管理員",
"admin-desc": "可以瀏覽並編輯卡片,移除成員,並且更改該看板的設定",
"admin-announcement": "公告",
"admin-announcement-active": "Active System-Wide Announcement",
"admin-announcement-title": "Announcement from Administrator",
"admin-announcement-active": "啟用全系統範圍公告",
"admin-announcement-title": "來自 Administrator 的公告",
"all-boards": "全部看板",
"and-n-other-card": "和其他 __count__ 個卡片",
"and-n-other-card_plural": "和其他 __count__ 個卡片",
"apply": "送出",
"app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
"archive": "Move to Archive",
"archive-all": "Move All to Archive",
"archive-board": "Move Board to Archive",
"archive-card": "Move Card to Archive",
"archive-list": "Move List to Archive",
"archive-swimlane": "Move Swimlane to Archive",
"archive-selection": "Move selection to Archive",
"archiveBoardPopup-title": "Move Board to Archive?",
"archived-items": "刪除",
"archived-boards": "Boards in Archive",
"app-is-offline": "請稍候,資料讀取中,重整頁面可能會導致資料遺失。如果讀取一直沒有進度, 請檢查伺服器是否還在運行。",
"archive": "移到封存",
"archive-all": "全部移到封存",
"archive-board": "將看板移到封存",
"archive-card": "將卡片移到封存",
"archive-list": "將清單移到封存",
"archive-swimlane": "將泳道圖移到封存",
"archive-selection": "將選取內容移到封存",
"archiveBoardPopup-title": "將看板移到封存?",
"archived-items": "封存",
"archived-boards": "封存中的看板",
"restore-board": "還原看板",
"no-archived-boards": "No Boards in Archive.",
"archives": "刪除",
"no-archived-boards": "封存中沒有看板。",
"archives": "封存",
"assign-member": "分配成員",
"attached": "附加",
"attachment": "附件",
"attachment-delete-pop": "刪除附件的操作無法還原。",
"attachmentDeletePopup-title": "刪除附件?",
"attachments": "附件",
"auto-watch": "新增看板時自動加入觀察",
"avatar-too-big": "頭像檔案太大 (最大 70 KB)",
"auto-watch": "新增看板時自動加入觀看",
"avatar-too-big": "頭像檔案太大(最大 70 KB)",
"back": "返回",
"board-change-color": "更改顏色",
"board-change-color": "更換顏色",
"board-nb-stars": "%s 星號標記",
"board-not-found": "看板不存在",
"board-private-info": "該看板將被設為 <strong>私有</strong>.",
"board-public-info": "該看板將被設為 <strong>公開</strong>.",
"boardChangeColorPopup-title": "修改看板背景",
"board-private-info": "此看板將被設為 <strong>私密</strong>.",
"board-public-info": "此看板將被設為 <strong>公開</strong>.",
"boardChangeColorPopup-title": "更換看板背景",
"boardChangeTitlePopup-title": "重新命名看板",
"boardChangeVisibilityPopup-title": "更改可視級別",
"boardChangeVisibilityPopup-title": "改變觀看權限",
"boardChangeWatchPopup-title": "更改觀察",
"boardMenuPopup-title": "看板選單",
"boards": "看板",
"board-view": "Board View",
"board-view-cal": "Calendar",
"board-view-swimlanes": "Swimlanes",
"board-view": "看板視圖",
"board-view-cal": "行事曆",
"board-view-swimlanes": "泳道圖",
"board-view-lists": "清單",
"bucket-example": "例如 “目標清單”",
"bucket-example": "例如「目標清單」",
"cancel": "取消",
"card-archived": "This card is moved to Archive.",
"board-archived": "This board is moved to Archive.",
"card-archived": "此卡片已移到封存。",
"board-archived": "此看板已移到封存。",
"card-comments-title": "該卡片有 %s 則評論",
"card-delete-notice": "徹底刪除的操作不可復原,你將會遺失該卡片相關的所有操作記錄。",
"card-delete-pop": "所有的動作將從活動動態中被移除且您將無法重新打開該卡片。此操作無法復原。",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
"card-due": "到期",
"card-due-on": "到期",
"card-spent": "Spent Time",
"card-delete-notice": "刪除是永久性的,您將遺失該卡片的所有相關操作記錄。",
"card-delete-pop": "所有活動中的內容都將被刪除,此操作無法撤消,您將無法重新開啟此卡片。",
"card-delete-suggest-archive": "您可以將卡片移到封存來將卡片從看板上移除,並且保留其中的活動。",
"card-due": "期限",
"card-due-on": "期限日",
"card-spent": "耗費時間",
"card-edit-attachments": "編輯附件",
"card-edit-custom-fields": "Edit custom fields",
"card-edit-custom-fields": "編輯自訂欄位",
"card-edit-labels": "編輯標籤",
"card-edit-members": "編輯成員",
"card-labels-title": "更改該卡片上的標籤",
"card-members-title": "在該卡片中新增或移除看板成員",
"card-start": "開始",
"card-start-on": "開始",
"card-start-on": "開始日",
"cardAttachmentsPopup-title": "附件來源",
"cardCustomField-datePopup-title": "Change date",
"cardCustomFieldsPopup-title": "Edit custom fields",
"cardDeletePopup-title": "徹底刪除卡片?",
"cardCustomField-datePopup-title": "更改日期",
"cardCustomFieldsPopup-title": "編輯自訂欄位",
"cardDeletePopup-title": "刪除卡片?",
"cardDetailsActionsPopup-title": "卡片動作",
"cardLabelsPopup-title": "標籤",
"cardMembersPopup-title": "成員",
"cardMorePopup-title": "更多",
"cards": "卡片",
"cards-count": "卡片",
"casSignIn": "Sign In with CAS",
"cardType-card": "Card",
"cardType-linkedCard": "Linked Card",
"cardType-linkedBoard": "Linked Board",
"casSignIn": "以 CAS 登入",
"cardType-card": "卡片",
"cardType-linkedCard": "已連結卡片",
"cardType-linkedBoard": "已連結看板",
"change": "變更",
"change-avatar": "更改大頭貼",
"change-password": "更改密碼",
"change-avatar": "更換大頭貼",
"change-password": "變更密碼",
"change-permissions": "更改許可權",
"change-settings": "更改設定",
"changeAvatarPopup-title": "更改大頭貼",
"changeAvatarPopup-title": "更換大頭貼",
"changeLanguagePopup-title": "更改語言",
"changePasswordPopup-title": "更改密碼",
"changePasswordPopup-title": "變更密碼",
"changePermissionsPopup-title": "更改許可權",
"changeSettingsPopup-title": "更改設定",
"subtasks": "Subtasks",
"subtasks": "子任務",
"checklists": "待辦清單",
"click-to-star": "點此來標記該看板",
"click-to-unstar": "點此來去除該看板的標記",
"click-to-star": "點擊以添加標記於此看板。",
"click-to-unstar": "點擊以移除標記於此看板。",
"clipboard": "剪貼簿貼上或者拖曳檔案",
"close": "關閉",
"close-board": "關閉看板",
"close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
"close-board-pop": "您可以通過點擊主頁眉中的「封存」按鈕來恢復看板。",
"color-black": "黑色",
"color-blue": "藍色",
"color-crimson": "crimson",
"color-darkgreen": "darkgreen",
"color-gold": "gold",
"color-gray": "gray",
"color-crimson": "艷紅",
"color-darkgreen": "暗綠",
"color-gold": "金色",
"color-gray": "灰色",
"color-green": "綠色",
"color-indigo": "indigo",
"color-indigo": "紫藍",
"color-lime": "綠黃",
"color-magenta": "magenta",
"color-mistyrose": "mistyrose",
"color-navy": "navy",
"color-magenta": "洋紅",
"color-mistyrose": "玫瑰粉",
"color-navy": "藏青",
"color-orange": "橙色",
"color-paleturquoise": "paleturquoise",
"color-peachpuff": "peachpuff",
"color-paleturquoise": "淡藍綠",
"color-peachpuff": "桃色",
"color-pink": "粉紅",
"color-plum": "plum",
"color-plum": "梅色",
"color-purple": "紫色",
"color-red": "紅色",
"color-saddlebrown": "saddlebrown",
"color-silver": "silver",
"color-saddlebrown": "馬鞍棕",
"color-silver": "銀色",
"color-sky": "天藍",
"color-slateblue": "slateblue",
"color-white": "white",
"color-slateblue": "青藍",
"color-white": "白色",
"color-yellow": "黃色",
"unset-color": "Unset",
"comment": "留言",
"comment-placeholder": "新增評論",
"comment-only": "只可以發表評論",
"comment-only-desc": "只可以對卡片發表評論",
"no-comments": "No comments",
"no-comments-desc": "Can not see comments and activities.",
"unset-color": "未設置",
"comment": "評論",
"comment-placeholder": "撰寫評論",
"comment-only": "只能發表評論",
"comment-only-desc": "只能在卡片上發表評論",
"no-comments": "沒有評論",
"no-comments-desc": "無法檢視評論和活動。",
"computer": "從本機上傳",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "將卡片連結複製到剪貼板",
"linkCardPopup-title": "Link Card",
"searchCardPopup-title": "Search Card",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
"confirm-subtask-delete-dialog": "你確定要刪除子任務嗎?",
"confirm-checklist-delete-dialog": "你確定要刪除待辦清單嗎?",
"copy-card-link-to-clipboard": "將卡片連結複製到剪貼簿",
"linkCardPopup-title": "連結卡片",
"searchCardPopup-title": "搜尋卡片",
"copyCardPopup-title": "複製卡片",
"copyChecklistToManyCardsPopup-title": "複製待辦清單的樣板到多個卡片",
"copyChecklistToManyCardsPopup-instructions": "使用此 JSON 格式來表示目標卡片的標題和描述",
"copyChecklistToManyCardsPopup-format": "[ {\\\"title\\\": \\\"第一個卡片標題\\\", \\\"description\\\":\\\"第一個卡片描述\\\"}, {\\\"title\\\":\\\"第二個卡片標題\\\",\\\"description\\\":\\\"第二個卡片描述\\\"},{\\\"title\\\":\\\"最後一個卡片標題\\\",\\\"description\\\":\\\"最後一個卡片描述\\\"} ]",
"create": "建立",
"createBoardPopup-title": "建立看板",
"chooseBoardSourcePopup-title": "匯入看板",
"createLabelPopup-title": "建立標籤",
"createCustomField": "Create Field",
"createCustomFieldPopup-title": "Create Field",
"createCustomField": "建立欄位",
"createCustomFieldPopup-title": "建立欄位",
"current": "目前",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-delete-pop": "此操作將會從所有卡片中移除自訂欄位以及銷毀歷史紀錄,並且無法撤消。",
"custom-field-checkbox": "複選框",
"custom-field-date": "日期",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
"custom-field-number": "Number",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
"custom-field-dropdown": "下拉式選單",
"custom-field-dropdown-none": "(無)",
"custom-field-dropdown-options": "清單選項",
"custom-field-dropdown-options-placeholder": "按下 Enter 新增更多選項",
"custom-field-dropdown-unknown": "(未知)",
"custom-field-number": "數字",
"custom-field-text": "文字",
"custom-fields": "自訂欄位",
"date": "日期",
"decline": "拒絕",
"default-avatar": "預設大頭貼",
"delete": "刪除",
"deleteCustomFieldPopup-title": "Delete Custom Field?",
"deleteCustomFieldPopup-title": "刪除自訂欄位?",
"deleteLabelPopup-title": "刪除標籤?",
"description": "描述",
"disambiguateMultiLabelPopup-title": "清除標籤動作歧義",
@@ -240,22 +240,22 @@
"done": "完成",
"download": "下載",
"edit": "編輯",
"edit-avatar": "更改大頭貼",
"edit-profile": "編輯資料",
"edit-wip-limit": "Edit WIP Limit",
"soft-wip-limit": "Soft WIP Limit",
"editCardStartDatePopup-title": "更改開始日期",
"editCardDueDatePopup-title": "更改到期日期",
"editCustomFieldPopup-title": "Edit Field",
"editCardSpentTimePopup-title": "Change spent time",
"edit-avatar": "更換大頭貼",
"edit-profile": "編輯個人資料",
"edit-wip-limit": "編輯 WIP 限制",
"soft-wip-limit": "軟性 WIP 限制",
"editCardStartDatePopup-title": "變更開始日期",
"editCardDueDatePopup-title": "變更到期日期",
"editCustomFieldPopup-title": "編輯欄位",
"editCardSpentTimePopup-title": "變更耗費時間",
"editLabelPopup-title": "更改標籤",
"editNotificationPopup-title": "更改通知",
"editProfilePopup-title": "編輯資料",
"editProfilePopup-title": "編輯個人資料",
"email": "電子郵件",
"email-enrollAccount-subject": "您在 __siteName__ 的帳號已經建立",
"email-enrollAccount-text": "親愛的 __user__,\n\n點選下面的連結,即刻開始使用這項服務。\n\n__url__\n\n謝謝。",
"email-fail": "郵件寄送失敗",
"email-fail-text": "Error trying to send email",
"email-fail-text": "嘗試發送郵件時出現錯誤",
"email-invalid": "電子郵件地址錯誤",
"email-invite": "寄送郵件邀請",
"email-invite-subject": "__inviter__ 向您發出邀請",
@@ -277,17 +277,17 @@
"error-user-notCreated": "該使用者未能成功建立",
"error-username-taken": "這個使用者名稱已被使用",
"error-email-taken": "電子信箱已被使用",
"export-board": "Export board",
"filter": "過濾",
"filter-cards": "過濾卡片",
"filter-clear": "清空過濾條件",
"export-board": "匯出看板",
"filter": "篩選",
"filter-cards": "篩選卡片",
"filter-clear": "清除篩選條件",
"filter-no-label": "沒有標籤",
"filter-no-member": "沒有成員",
"filter-no-custom-fields": "No Custom Fields",
"filter-on": "過濾條件啟用",
"filter-on-desc": "你正在過濾該看板上的卡片,點此編輯過濾條件。",
"filter-to-selection": "要選擇的過濾條件",
"advanced-filter-label": "Advanced Filter",
"filter-no-custom-fields": "沒有自訂欄位",
"filter-on": "篩選器已開啟",
"filter-on-desc": "你正在篩選該看板上的卡片,點此編輯篩選條件。",
"filter-to-selection": "選擇的篩選條件",
"advanced-filter-label": "進階篩選",
"advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
"fullname": "全稱",
"header-logo-title": "返回您的看板頁面",
@@ -345,7 +345,7 @@
"list-delete-pop": "所有的動作將從活動動態中被移除且您將無法再開啟該清單\b。此操作無法復原。",
"list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
"lists": "清單",
"swimlanes": "Swimlanes",
"swimlanes": "泳道圖",
"log-out": "登出",
"log-in": "登入",
"loginPopup-title": "登入",
@@ -593,7 +593,7 @@
"r-top-of": "Top of",
"r-bottom-of": "Bottom of",
"r-its-list": "its list",
"r-archive": "Move to Archive",
"r-archive": "移到封存",
"r-unarchive": "Restore from Archive",
"r-card": "card",
"r-add": "新增",
@@ -659,5 +659,7 @@
"add-custom-html-after-body-start": "Add Custom HTML after <body> start",
"add-custom-html-before-body-end": "Add Custom HTML before </body> end",
"error-undefined": "Something went wrong",
"error-ldap-login": "An error occurred while trying to login"
"error-ldap-login": "An error occurred while trying to login",
"display-authentication-method": "Display Authentication Method",
"default-authentication-method": "Default Authentication Method"
}
+1 -1
View File
@@ -31,7 +31,7 @@ if (Meteor.isServer) {
user = Meteor.users.findOne({
'services.resume.loginTokens.hashedToken': hashToken,
});
} else {
} else if (!Meteor.settings.public.sandstorm) {
Authentication.checkUserId(req.userId);
user = Users.findOne({ _id: req.userId, isAdmin: true });
}
+10 -1
View File
@@ -40,6 +40,14 @@ Settings.attachSchema(new SimpleSchema({
type: String,
optional: true,
},
displayAuthenticationMethod: {
type: Boolean,
optional: true,
},
defaultAuthenticationMethod: {
type: String,
optional: false,
},
hideLogo: {
type: Boolean,
optional: true,
@@ -85,7 +93,8 @@ if (Meteor.isServer) {
const from = `Boards Support <support@${domain}>`;
const defaultSetting = {disableRegistration: false, mailServer: {
username: '', password: '', host: '', port: '', enableTLS: false, from,
}, createdAt: now, modifiedAt: now};
}, createdAt: now, modifiedAt: now, displayAuthenticationMethod: true,
defaultAuthenticationMethod: 'password'};
Settings.insert(defaultSetting);
}
const newSetting = Settings.findOne();
+1 -1
View File
@@ -569,7 +569,7 @@ if (Meteor.isServer) {
user.username = user.services.oidc.username;
user.emails = [{ address: email, verified: true }];
const initials = user.services.oidc.fullname.match(/\b[a-zA-Z]/g).join('').toUpperCase();
user.profile = { initials, fullname: user.services.oidc.fullname };
user.profile = { initials, fullname: user.services.oidc.fullname, boardView: 'board-view-lists' };
user.authenticationMethod = 'oauth2';
// see if any existing user has this email address or username, otherwise create new
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v2.06.0",
"version": "v2.19.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
@@ -87,6 +87,9 @@ tx pull -f -l ko
echo "Latvian (Latvia):"
tx pull -f -l lv_LV
echo "Macedonian:"
tx pull -f -l mk
echo "Mongolian (Mongolia):"
tx pull -f -l mn_MN
+3 -3
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 = 208,
appVersion = 221,
# Increment this for every release.
appMarketingVersion = (defaultText = "2.06.0~2019-01-27"),
appMarketingVersion = (defaultText = "2.19.0~2019-02-09"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
@@ -226,7 +226,7 @@ const pkgdef :Spk.PackageDefinition = (
verbPhrase = (defaultText = "removed from card"),
), ],
),
apiPath = "/api",
apiPath = "/",
saveIdentityCaps = true,
),
);
-21
View File
@@ -16,27 +16,6 @@ Meteor.startup(() => {
Authentication = {};
Authentication.checkUserId = function (userId) {
if (userId === undefined) {
// Monkey patch to work around the problem described in
// https://github.com/sandstorm-io/meteor-accounts-sandstorm/pull/31
const _httpMethods = HTTP.methods;
HTTP.methods = (newMethods) => {
Object.keys(newMethods).forEach((key) => {
if (newMethods[key].auth) {
newMethods[key].auth = function() {
const sandstormID = this.req.headers['x-sandstorm-user-id'];
const user = Meteor.users.findOne({'services.sandstorm.id': sandstormID});
if (user) {
userId = user._id;
}
//return user && user._id;
};
}
});
_httpMethods(newMethods);
};
}
if (userId === undefined) {
const error = new Meteor.Error('Unauthorized', 'Unauthorized');
error.statusCode = 401;
+24
View File
@@ -398,3 +398,27 @@ Migrations.add('add-custom-html-before-body-end', () => {
},
}, noValidateMulti);
});
Migrations.add('add-displayAuthenticationMethod', () => {
Settings.update({
displayAuthenticationMethod: {
$exists: false,
},
}, {
$set: {
displayAuthenticationMethod: true,
},
}, noValidateMulti);
});
Migrations.add('add-defaultAuthenticationMethod', () => {
Settings.update({
defaultAuthenticationMethod: {
$exists: false,
},
}, {
$set: {
defaultAuthenticationMethod: 'password',
},
}, noValidateMulti);
});
+11 -1
View File
@@ -1,5 +1,15 @@
Meteor.publish('setting', () => {
return Settings.find({}, {fields:{disableRegistration: 1, productName: 1, hideLogo: 1, customHTMLafterBodyStart: 1, customHTMLbeforeBodyEnd: 1}});
return Settings.find({}, {
fields:{
disableRegistration: 1,
productName: 1,
hideLogo: 1,
customHTMLafterBodyStart: 1,
customHTMLbeforeBodyEnd: 1,
displayAuthenticationMethod: 1,
defaultAuthenticationMethod: 1,
},
});
});
Meteor.publish('mailServer', function () {
+1 -1
View File
@@ -29,4 +29,4 @@ if [ "x" != "x${MONGODB_PORT}" ]; then
fi
echo "mongodb bind options: $BIND_OPTIONS"
mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS
mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS --smallfiles