Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f3e83b363 | ||
|
|
263ec64453 | ||
|
|
140dc6db25 | ||
|
|
47a7097044 | ||
|
|
b8e774107a | ||
|
|
3d3c78260b | ||
|
|
e8f4c4d8b8 | ||
|
|
2156b28445 | ||
|
|
a9fc74a9b4 | ||
|
|
02de9164f0 | ||
|
|
140a2d7915 | ||
|
|
17c4c96c29 | ||
|
|
56e5585730 | ||
|
|
51a0dd8861 | ||
|
|
8bfd94474a | ||
|
|
6789e8564a | ||
|
|
b48c6a5b9c | ||
|
|
b39b9f5463 | ||
|
|
e72f186a36 | ||
|
|
c3d495e7c6 | ||
|
|
98c6ea467a | ||
|
|
6e73abde50 | ||
|
|
7ff6f24a90 | ||
|
|
8368461b57 | ||
|
|
7dc8a2d659 | ||
|
|
bddbaa7bc2 | ||
|
|
f9abfe5244 | ||
|
|
97d57b05ad | ||
|
|
4334fbbb9d | ||
|
|
595c657b57 | ||
|
|
ed04769947 | ||
|
|
44dbd462b1 | ||
|
|
291797b238 | ||
|
|
1178a48e68 | ||
|
|
34b7bfd19c | ||
|
|
02c418f4bb | ||
|
|
ae3b061d4c | ||
|
|
eb49bb5e10 | ||
|
|
79745d1892 | ||
|
|
8b31c0768c | ||
|
|
25e294fd92 | ||
|
|
017d2deeee | ||
|
|
e1e20275a6 | ||
|
|
3c4f8f6796 | ||
|
|
406a9492fd | ||
|
|
c859cd2278 | ||
|
|
cd70d9d09e | ||
|
|
86e7e1c600 | ||
|
|
e540148d09 | ||
|
|
30b108ab36 | ||
|
|
ec535aaa9c | ||
|
|
bb108b2144 | ||
|
|
f3c76ac60b | ||
|
|
23ccb3b991 | ||
|
|
992ecfefa2 | ||
|
|
fd390d2560 | ||
|
|
3f1ac6b5db | ||
|
|
d8f112278b | ||
|
|
0704cfb8b6 | ||
|
|
5e806c3879 | ||
|
|
27b0fd35b4 | ||
|
|
5c1818fc9a | ||
|
|
a7fb9662e3 | ||
|
|
cb00cfc1b7 | ||
|
|
d7bc8d100d | ||
|
|
d067b3976c | ||
|
|
892ee60527 | ||
|
|
d83cb75f95 | ||
|
|
697aaa895d | ||
|
|
8add28d328 | ||
|
|
634df8f6f2 | ||
|
|
d194cc7a5a | ||
|
|
0834f6ed1e | ||
|
|
9d5e288bca | ||
|
|
0fe40ad9ec | ||
|
|
0765278195 | ||
|
|
f782b9c298 | ||
|
|
e611685e50 | ||
|
|
3edef95c4e | ||
|
|
9b902e1ca0 | ||
|
|
fc835815d8 | ||
|
|
da083c2e20 | ||
|
|
6ee17ab080 | ||
|
|
1e34585548 | ||
|
|
76cd5a2844 | ||
|
|
ffd1b93abf | ||
|
|
1eea102f26 | ||
|
|
94c1367684 | ||
|
|
9bf19f81a4 | ||
|
|
21de0ec396 | ||
|
|
ab4fec0f3c | ||
|
|
b983479476 | ||
|
|
f6e5e514ef | ||
|
|
ddd828083e | ||
|
|
e079b4df17 | ||
|
|
4e5ff17e18 | ||
|
|
86e1a9cd5d | ||
|
|
8a0efffdf8 | ||
|
|
c21f710a70 | ||
|
|
f3382abe3b | ||
|
|
d6c86f3cba | ||
|
|
3a6516f0cb | ||
|
|
b795115042 | ||
|
|
52fe845d24 | ||
|
|
b2b6bb2d39 | ||
|
|
db40ca25ac | ||
|
|
3eef42eee0 | ||
|
|
38d0ad74a9 | ||
|
|
3bbc805ee4 | ||
|
|
c37a454bd5 | ||
|
|
6f98be5608 | ||
|
|
ab4dab2ade | ||
|
|
88ffddfeba | ||
|
|
36f148a7cb | ||
|
|
fd1af07e43 | ||
|
|
fca87b53f0 | ||
|
|
ce0473480b | ||
|
|
828f6ea321 |
No files matched your search
+241
-1
@@ -1,3 +1,243 @@
|
||||
# v2.87 2019-06-21 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Rule cardAction - SetDate](https://github.com/wekan/wekan/pull/2506).
|
||||
Thanks to road42.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix Move card to top/bottom of list](https://github.com/wekan/wekan/pull/2508).
|
||||
Thanks to road42.
|
||||
- [Translation fixes](https://github.com/wekan/wekan/pull/2507).
|
||||
Thanks to road42.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.86 2019-06-19 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix Wekan unable to Select Text from Description edit box](https://github.com/wekan/wekan/issues/2451)
|
||||
by removing feature of card description submit on click outside. This is because when selecting text
|
||||
and dragging up did trigger submit of description, so description was closed and selecting text failed.
|
||||
This did affect all Chromium-based browsers: Chrome, Chromium, Chromium Edge.
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.85 2019-06-19 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fixed bug: rule doesn't move card to top/bottom](https://github.com/wekan/wekan/pull/2502).
|
||||
Thanks to road42.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.84 2019-06-18 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Buttons for adding rules to a board where missing for isBoardAdmin](https://github.com/wekan/wekan/pull/2500).
|
||||
Thanks to road42.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.83 2019-06-17 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix Bug: Unable to click board submenu on mobile](https://github.com/wekan/wekan/commit/7ff6f24a90374ae95edbb87b37e0c235e7aee434).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.82 2019-06-14 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix OIDC Docker login. Empty string results to empty array at wekan/server/authentication.js](https://github.com/wekan/wekan/commit/bddbaa7bc2f3cfe8553a2265e168231ab51876f3).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.81 2019-06-13 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Change OAuth2 whitelist default to empty string at snap, so it would be used as array on
|
||||
wekan/server/authentication.js](https://github.com/wekan/wekan/commit/4334fbbb9dacf45b0262019526a9697b015049a1).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.80 2019-06-13 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix OAuth2 typos in snap-src/bin/config](https://github.com/wekan/wekan/commit/44dbd462b19e613fcb47161d44e4046d5d91a319).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.79 2019-06-13 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix OAuth2 typos in Dockerfile and docker-compose.yml](https://github.com/wekan/wekan/pull/2488).
|
||||
Thanks to DominikPf.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.78 2019-06-12 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Try to fix OIDC login](https://github.com/wekan/wekan/commit/8b31c0768c34fc4557b54cec936a0b4288a8e722).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.77 2019-06-11 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- [Fix Snap build](https://github.com/wekan/wekan/commit/e1e20275a673d3065c6cf239db8d2f1a505baa69).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.76 2019-06-11 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Add support for CORS headers "Access-control-allow-headers" and
|
||||
"Access-control-expose-headers"](https://github.com/wekan/wekan/pull/2429).
|
||||
Thanks to risacher and xet7.
|
||||
- [Support scopes in OAuth2, so that Authentication via OAuth2 with Google is now possible](https://github.com/wekan/wekan/pull/2483).
|
||||
Thanks to moserben16.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix Scope parsing Issue for OAuth2 Login with simple String](https://github.com/wekan/wekan/pulls/2427).
|
||||
Thanks to DominikPf.
|
||||
- [Show attachment name in Outgoing Webhook when attachment is added to card](https://github.com/wekan/wekan/commit/992ecfefa2e46ee7321ec9b8bfc3400532e5645e).
|
||||
Thanks to xet7. Related [#2285](https://github.com/wekan/wekan/issues/2285).
|
||||
- [Show attachment name in Outgoing Webhook when attachment is removed from card](https://github.com/wekan/wekan/commit/23ccb3b991be6d7196e59f7d68df17b8949df049).
|
||||
Thanks to xet7. Related [#2285](https://github.com/wekan/wekan/issues/2285).
|
||||
- [Allow BoardAdmin to create board rules](https://github.com/wekan/wekan/pull/2433).
|
||||
Thanks to road42.
|
||||
- [Fix typo](https://github.com/wekan/wekan/pull/2442).
|
||||
Thanks to Jason-Cooke.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.75 2019-05-22 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [CAS allowed LDAP groups](https://github.com/wekan/meteor-accounts-cas/pull/4).
|
||||
Thanks to ppoulard. Please test. Related [#2356](https://github.com/wekan/wekan/issues/2356).
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix](https://github.com/wekan/wekan/commit/634df8f6f26a7a7a2df6f87a705d322d88638425):
|
||||
[OAuth2 Requested Scopes are wrong / cannot be configured](https://github.com/wekan/wekan/issues/2412).
|
||||
Thanks to DominikPf and xet7. Please test.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.74 2019-05-14 Wekan release
|
||||
|
||||
This release fixes the following bugs:
|
||||
|
||||
- Add missing [wekan-ldap#40](https://github.com/wekan/wekan-ldap/pull/40) code about
|
||||
[LDAP_SYNC_ADMIN_STATUS](https://github.com/wekan/wekan/commit/0fe40ad9ec82ef2045578f4cc1e2ebb6cc80d47a).
|
||||
Thanks to JulianJacobi, n-st, chirrut2 and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.73 2019-05-14 Wekan release
|
||||
|
||||
This release fixes the following bugs with Apache I-CLA:
|
||||
|
||||
- [Card count placement and export API functionality back](https://github.com/wekan/wekan/pulls/2406).
|
||||
Thanks to bentiss.
|
||||
- [Few fixes for Dockerfile](https://github.com/wekan/wekan/pulls/2407).
|
||||
Thanks to bentiss.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
- Fixed [#2338](https://github.com/wekan/wekan/issues/2338) -> [Slow opening of big boards with too many archived items](https://github.com/wekan/wekan/pull/2402).
|
||||
If some Wekan users see errors with this, please empty your browser cache.
|
||||
Thanks to nerminator.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.72 2019-05-13 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Added BIDI support to "Add Card"](https://github.com/wekan/wekan/pull/2401).
|
||||
Related [#884](https://github.com/wekan/wekan/issues/884).
|
||||
Thanks to guyzyl.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.71 2019-05-12 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Add partentId support on card web API](https://github.com/wekan/wekan/pulls/2400).
|
||||
Thanks to atilaromero.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.70 2019-05-11 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [View markdown on List names, Custom Fields (Text and Dropdown), Label names,
|
||||
All Boards view Board names and Board descriptions](https://github.com/wekan/wekan/commit/b795115042c2eb6bccbf029f21d78849a44128ca).
|
||||
Related [#2334](https://github.com/wekan/wekan/issues/2334).
|
||||
Thanks to shaygover and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.69 2019-05-11 Wekan release
|
||||
|
||||
This release fixes the following translation names:
|
||||
|
||||
- [Fix translation name in Wekan menu: oc to Occitan](https://github.com/wekan/wekan/commit/db40ca25ac5df17fcc8b7c93f12b7e2bffc349d2).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.68 2019-05-10 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Option to login to the LDAP server with the user's own username and password, instead of an administrator
|
||||
key](https://github.com/wekan/wekan/pull/2399). Default: false (use administrator key).
|
||||
With new setting: LDAP_USER_AUTHENTICATION=true.
|
||||
Thanks to thiagofernando.
|
||||
- [Added above new LDAP_USER_AUTHENTION=true option to Snap, Docker and Source settings](https://github.com/wekan/wekan/commit/3bbc805ee42e3c1638b50260d3fafc2b5f936923).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.67 2019-05-10 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Move board to Archive button at each board at All Boards page](https://github.com/wekan/wekan/commit/828f6ea321020eda77fea399df52889e2081dfac).
|
||||
Thanks to xet7. Related [#2389](https://github.com/wekan/wekan/issues/2389).
|
||||
- [If adding Subtasks does not work on old board, added wiki page how to make it work again](https://github.com/wekan/wekan/wiki/Subtasks).
|
||||
Thanks to xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v2.66 2019-05-09 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
@@ -89,7 +329,7 @@ and adds the following updates:
|
||||
and fixes the following bugs:
|
||||
|
||||
- [Fix Full width of lists and space before first list](https://github.com/wekan/wekan/pull/2343).
|
||||
Thanks to hupptehcnologies.
|
||||
Thanks to hupptechnologies.
|
||||
- Remove [extra](https://github.com/wekan/wekan/pull/2332) [quotes](https://github.com/wekan/wekan/pull/2333) from docker-compose.yml.
|
||||
Thanks to hibare.
|
||||
- Fix Docker builds by moving all separately cloned wekan/packages/* repos like ldap, oidc, etc code to wekan repo code,
|
||||
|
||||
+10
-5
@@ -40,6 +40,8 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
|
||||
OAUTH2_ID_MAP="" \
|
||||
OAUTH2_USERNAME_MAP="" \
|
||||
OAUTH2_FULLNAME_MAP="" \
|
||||
OAUTH2_ID_TOKEN_WHITELIST_FIELDS="" \
|
||||
OAUTH2_REQUEST_PERMISSIONS='openid profile email' \
|
||||
OAUTH2_EMAIL_MAP="" \
|
||||
LDAP_ENABLE=false \
|
||||
LDAP_PORT=389 \
|
||||
@@ -61,6 +63,7 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
|
||||
LDAP_ENCRYPTION=false \
|
||||
LDAP_CA_CERT="" \
|
||||
LDAP_REJECT_UNAUTHORIZED=false \
|
||||
LDAP_USER_AUTHENTICATION=false \
|
||||
LDAP_USER_SEARCH_FILTER="" \
|
||||
LDAP_USER_SEARCH_SCOPE="" \
|
||||
LDAP_USER_SEARCH_FIELD="" \
|
||||
@@ -96,6 +99,8 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
|
||||
LOGOUT_ON_HOURS="" \
|
||||
LOGOUT_ON_MINUTES="" \
|
||||
CORS="" \
|
||||
CORS_ALLOW_HEADERS="" \
|
||||
CORS_EXPOSE_HEADERS="" \
|
||||
DEFAULT_AUTHENTICATION_METHOD=""
|
||||
|
||||
# Copy the app to the image
|
||||
@@ -193,7 +198,7 @@ RUN \
|
||||
\
|
||||
# Get additional packages
|
||||
#mkdir -p /home/wekan/app/packages && \
|
||||
chown wekan:wekan --recursive /home/wekan && \
|
||||
#chown wekan:wekan --recursive /home/wekan && \
|
||||
# REPOS BELOW ARE INCLUDED TO WEKAN REPO
|
||||
#cd /home/wekan/app/packages && \
|
||||
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router && \
|
||||
@@ -211,7 +216,7 @@ RUN \
|
||||
gosu wekan:wekan /home/wekan/.meteor/meteor -- help; \
|
||||
\
|
||||
# extract the OpenAPI specification
|
||||
npm install -g api2html@0.3.0 && \
|
||||
npm install -g api2html@0.3.3 && \
|
||||
mkdir -p /home/wekan/python && \
|
||||
chown wekan:wekan --recursive /home/wekan/python && \
|
||||
cd /home/wekan/python && \
|
||||
@@ -219,9 +224,9 @@ RUN \
|
||||
cd /home/wekan/python/esprima-python && \
|
||||
python3 setup.py install --record files.txt && \
|
||||
cd /home/wekan/app &&\
|
||||
mkdir -p ./public/api && \
|
||||
python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml && \
|
||||
/opt/nodejs/bin/api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; \
|
||||
gosu wekan:wekan mkdir -p ./public/api && \
|
||||
gosu wekan:wekan python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml && \
|
||||
gosu wekan:wekan /opt/nodejs/bin/api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; \
|
||||
# Build app
|
||||
cd /home/wekan/app && \
|
||||
gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js && \
|
||||
|
||||
@@ -61,7 +61,7 @@ that by providing one-click installation on various platforms.
|
||||
- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) /
|
||||
[Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
|
||||
[More Platforms](https://github.com/wekan/wekan/wiki/Platforms). [ARM progress](https://github.com/wekan/wekan/issues/1053#issuecomment-410919264).
|
||||
- 1 GB RAM minimum free for Wekan. Production server should have miminum total 4 GB RAM.
|
||||
- 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
|
||||
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/devel/docker-compose.yml): 3 frontend servers,
|
||||
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
|
||||
- Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
|
||||
@@ -136,4 +136,4 @@ with [Meteor](https://www.meteor.com).
|
||||
[wekan_chat]: https://community.vanila.io/wekan
|
||||
|
||||
|
||||
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_large)
|
||||
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_large)
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v2.66.0"
|
||||
appVersion: "v2.87.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -14,7 +14,7 @@ BlazeComponent.extendComponent({
|
||||
const currentBoardId = Session.get('currentBoard');
|
||||
if (!currentBoardId)
|
||||
return;
|
||||
const handle = subManager.subscribe('board', currentBoardId);
|
||||
const handle = subManager.subscribe('board', currentBoardId, false);
|
||||
Tracker.nonreactive(() => {
|
||||
Tracker.autorun(() => {
|
||||
this.isBoardReady.set(handle.ready());
|
||||
|
||||
@@ -85,10 +85,15 @@ template(name="boardHeaderBar")
|
||||
if Filter.isActive
|
||||
a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}")
|
||||
i.fa.fa-times-thin
|
||||
|
||||
if currentUser.isAdmin
|
||||
a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}")
|
||||
i.fa.fa-magic
|
||||
span {{_ 'rules'}}
|
||||
else if currentUser.isBoardAdmin
|
||||
a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}")
|
||||
i.fa.fa-magic
|
||||
span {{_ 'rules'}}
|
||||
|
||||
a.board-header-btn.js-open-search-view(title="{{_ 'search'}}")
|
||||
i.fa.fa-search
|
||||
|
||||
@@ -18,11 +18,15 @@ template(name="boardList")
|
||||
else
|
||||
a.js-open-board.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
|
||||
span.details
|
||||
span.board-list-item-name= title
|
||||
span.board-list-item-name
|
||||
+viewer
|
||||
= title
|
||||
i.fa.js-star-board(
|
||||
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
|
||||
title="{{_ 'star-board-title'}}")
|
||||
p.board-list-item-desc= description
|
||||
p.board-list-item-desc
|
||||
+viewer
|
||||
= description
|
||||
if hasSpentTimeCards
|
||||
i.fa.js-has-spenttime-cards(
|
||||
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
|
||||
@@ -30,8 +34,9 @@ template(name="boardList")
|
||||
i.fa.js-clone-board(
|
||||
class="fa-clone"
|
||||
title="{{_ 'duplicate-board'}}")
|
||||
|
||||
|
||||
i.fa.js-archive-board(
|
||||
class="fa-archive"
|
||||
title="{{_ 'archive-board'}}")
|
||||
|
||||
template(name="boardListHeaderBar")
|
||||
h1 {{_ 'my-boards'}}
|
||||
|
||||
@@ -33,12 +33,12 @@ BlazeComponent.extendComponent({
|
||||
},
|
||||
|
||||
hasOvertimeCards() {
|
||||
subManager.subscribe('board', this.currentData()._id);
|
||||
subManager.subscribe('board', this.currentData()._id, false);
|
||||
return this.currentData().hasOvertimeCards();
|
||||
},
|
||||
|
||||
hasSpentTimeCards() {
|
||||
subManager.subscribe('board', this.currentData()._id);
|
||||
subManager.subscribe('board', this.currentData()._id, false);
|
||||
return this.currentData().hasSpentTimeCards();
|
||||
},
|
||||
|
||||
@@ -70,6 +70,11 @@ BlazeComponent.extendComponent({
|
||||
);
|
||||
evt.preventDefault();
|
||||
},
|
||||
'click .js-archive-board'(evt) {
|
||||
const boardId = this.currentData()._id;
|
||||
Meteor.call('archiveBoard', boardId);
|
||||
evt.preventDefault();
|
||||
},
|
||||
'click .js-accept-invite'() {
|
||||
const boardId = this.currentData()._id;
|
||||
Meteor.user().removeInvite(boardId);
|
||||
|
||||
@@ -106,15 +106,29 @@ $spaceBetweenTiles = 16px
|
||||
transition-duration: .15s
|
||||
transition-property: color, font-size, background
|
||||
|
||||
.fa-archive
|
||||
position: absolute;
|
||||
bottom: 0
|
||||
font-size: 14px
|
||||
height: 18px
|
||||
line-height: 18px
|
||||
opacity: 0
|
||||
left: 0
|
||||
padding: 9px 9px
|
||||
transition-duration: .15s
|
||||
transition-property: color, font-size, background
|
||||
|
||||
li:hover a
|
||||
&:hover
|
||||
.fa-star,
|
||||
.fa-clone,
|
||||
.fa-archive,
|
||||
.fa-star-o
|
||||
color: white
|
||||
|
||||
.fa-star,
|
||||
.fa-clone,
|
||||
.fa-archive,
|
||||
.fa-star-o
|
||||
color: white
|
||||
opacity: .75
|
||||
|
||||
@@ -4,9 +4,10 @@ template(name="cardCustomFieldsPopup")
|
||||
li.item(class="")
|
||||
a.name.js-select-field(href="#")
|
||||
span.full-name
|
||||
+viewer
|
||||
= name
|
||||
if hasCustomField
|
||||
i.fa.fa-check
|
||||
i.fa.fa-check
|
||||
hr
|
||||
a.quiet-button.full.js-settings
|
||||
i.fa.fa-cog
|
||||
@@ -61,9 +62,13 @@ template(name="cardCustomField-dropdown")
|
||||
select.inline
|
||||
each items
|
||||
if($eq data.value this._id)
|
||||
option(value=_id selected="selected") {{name}}
|
||||
option(value=_id selected="selected")
|
||||
+viewer
|
||||
= name
|
||||
else
|
||||
option(value=_id) {{name}}
|
||||
option(value=_id)
|
||||
+viewer
|
||||
= name
|
||||
.edit-controls.clearfix
|
||||
button.primary(type="submit") {{_ 'save'}}
|
||||
a.fa.fa-times-thin.js-close-inlined-form
|
||||
@@ -73,4 +78,4 @@ template(name="cardCustomField-dropdown")
|
||||
+viewer
|
||||
= selectedItem
|
||||
else
|
||||
| {{_ 'edit'}}
|
||||
| {{_ 'edit'}}
|
||||
@@ -77,7 +77,9 @@ template(name="cardDetails")
|
||||
h3.card-details-item-title {{_ 'labels'}}
|
||||
a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}")
|
||||
each labels
|
||||
span.card-label(class="card-label-{{color}}" title=name)= name
|
||||
span.card-label(class="card-label-{{color}}" title=name)
|
||||
+viewer
|
||||
= name
|
||||
if canModifyCard
|
||||
a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}")
|
||||
i.fa.fa-plus
|
||||
@@ -86,7 +88,8 @@ template(name="cardDetails")
|
||||
each customFieldsWD
|
||||
.card-details-item.card-details-item-customfield
|
||||
h3.card-details-item-title
|
||||
= definition.name
|
||||
+viewer
|
||||
= definition.name
|
||||
+cardCustomField
|
||||
|
||||
.card-details-items
|
||||
|
||||
@@ -345,12 +345,12 @@ Template.cardDetailsActionsPopup.events({
|
||||
'click .js-move-card-to-top' (evt) {
|
||||
evt.preventDefault();
|
||||
const minOrder = _.min(this.list().cards(this.swimlaneId).map((c) => c.sort));
|
||||
this.move(this.swimlaneId, this.listId, minOrder - 1);
|
||||
this.move(this.boardId, this.swimlaneId, this.listId, minOrder - 1);
|
||||
},
|
||||
'click .js-move-card-to-bottom' (evt) {
|
||||
evt.preventDefault();
|
||||
const maxOrder = _.max(this.list().cards(this.swimlaneId).map((c) => c.sort));
|
||||
this.move(this.swimlaneId, this.listId, maxOrder + 1);
|
||||
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
|
||||
},
|
||||
'click .js-archive' (evt) {
|
||||
evt.preventDefault();
|
||||
@@ -424,7 +424,7 @@ Template.moveCardPopup.events({
|
||||
});
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
subManager.subscribe('board', Session.get('currentBoard'));
|
||||
subManager.subscribe('board', Session.get('currentBoard'), false);
|
||||
this.selectedBoardId = new ReactiveVar(Session.get('currentBoard'));
|
||||
},
|
||||
|
||||
@@ -453,7 +453,7 @@ BlazeComponent.extendComponent({
|
||||
return [{
|
||||
'change .js-select-boards'(evt) {
|
||||
this.selectedBoardId.set($(evt.currentTarget).val());
|
||||
subManager.subscribe('board', this.selectedBoardId.get());
|
||||
subManager.subscribe('board', this.selectedBoardId.get(), false);
|
||||
},
|
||||
}];
|
||||
},
|
||||
@@ -676,7 +676,7 @@ BlazeComponent.extendComponent({
|
||||
if (selection === 'none') {
|
||||
this.parentBoard.set(null);
|
||||
} else {
|
||||
subManager.subscribe('board', $(evt.currentTarget).val());
|
||||
subManager.subscribe('board', $(evt.currentTarget).val(), false);
|
||||
this.parentBoard.set(selection);
|
||||
list.prop('disabled', false);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,8 @@ template(name="cardLabelsPopup")
|
||||
a.card-label-edit-button.fa.fa-pencil.js-edit-label
|
||||
span.card-label.card-label-selectable.js-select-label(class="card-label-{{color}}"
|
||||
class="{{# if isLabelSelected ../_id }}active{{/if}}")
|
||||
= name
|
||||
+viewer
|
||||
= name
|
||||
if(isLabelSelected ../_id)
|
||||
i.card-label-selectable-icon.fa.fa-check
|
||||
if currentUser.isBoardAdmin
|
||||
|
||||
@@ -58,7 +58,8 @@ template(name="minicard")
|
||||
.minicard-custom-field
|
||||
if definition.showLabelOnMiniCard
|
||||
.minicard-custom-field-item
|
||||
= definition.name
|
||||
+viewer
|
||||
= definition.name
|
||||
.minicard-custom-field-item
|
||||
+viewer
|
||||
= trueValue
|
||||
|
||||
@@ -99,6 +99,10 @@
|
||||
.highlight
|
||||
color: #ce1414
|
||||
|
||||
.cardCount
|
||||
color: #8c8c8c
|
||||
font-size: 0.8em
|
||||
|
||||
.list-body
|
||||
flex: 1 1 auto
|
||||
flex-direction: column
|
||||
|
||||
@@ -39,7 +39,7 @@ template(name="addCardForm")
|
||||
.minicard-labels
|
||||
each getLabels
|
||||
.minicard-label(class="card-label-{{color}}" title="{{name}}")
|
||||
textarea.minicard-composer-textarea.js-card-title(autofocus)
|
||||
textarea.minicard-composer-textarea.js-card-title(autofocus dir="auto")
|
||||
if members.get
|
||||
.minicard-members.js-minicard-composer-members
|
||||
each members.get
|
||||
@@ -96,7 +96,7 @@ template(name="searchElementPopup")
|
||||
form
|
||||
label
|
||||
| {{_ 'title'}}
|
||||
input.js-element-title(type="text" placeholder="{{_ 'title'}}" autofocus required)
|
||||
input.js-element-title(type="text" placeholder="{{_ 'title'}}" autofocus required dir="auto")
|
||||
unless isTemplateSearch
|
||||
label {{_ 'boards'}}:
|
||||
.link-board-wrapper
|
||||
|
||||
@@ -348,7 +348,7 @@ BlazeComponent.extendComponent({
|
||||
|
||||
this.boardId = Session.get('currentBoard');
|
||||
// In order to get current board info
|
||||
subManager.subscribe('board', this.boardId);
|
||||
subManager.subscribe('board', this.boardId, false);
|
||||
this.board = Boards.findOne(this.boardId);
|
||||
// List where to insert card
|
||||
const list = $(Popup._getTopStack().openerElement).closest('.js-list');
|
||||
@@ -414,7 +414,7 @@ BlazeComponent.extendComponent({
|
||||
events() {
|
||||
return [{
|
||||
'change .js-select-boards'(evt) {
|
||||
subManager.subscribe('board', $(evt.currentTarget).val());
|
||||
subManager.subscribe('board', $(evt.currentTarget).val(), false);
|
||||
this.selectedBoardId.set($(evt.currentTarget).val());
|
||||
},
|
||||
'change .js-select-swimlanes'(evt) {
|
||||
@@ -500,13 +500,13 @@ BlazeComponent.extendComponent({
|
||||
}
|
||||
const boardId = board._id;
|
||||
// Subscribe to this board
|
||||
subManager.subscribe('board', boardId);
|
||||
subManager.subscribe('board', boardId, false);
|
||||
this.selectedBoardId = new ReactiveVar(boardId);
|
||||
|
||||
if (!this.isBoardTemplateSearch) {
|
||||
this.boardId = Session.get('currentBoard');
|
||||
// In order to get current board info
|
||||
subManager.subscribe('board', this.boardId);
|
||||
subManager.subscribe('board', this.boardId, false);
|
||||
this.swimlaneId = '';
|
||||
// Swimlane where to insert card
|
||||
const swimlane = $(Popup._getTopStack().openerElement).parents('.js-swimlane');
|
||||
@@ -547,7 +547,7 @@ BlazeComponent.extendComponent({
|
||||
} else if (this.isBoardTemplateSearch) {
|
||||
const boards = board.searchBoards(this.term.get());
|
||||
boards.forEach((board) => {
|
||||
subManager.subscribe('board', board.linkedId);
|
||||
subManager.subscribe('board', board.linkedId, false);
|
||||
});
|
||||
return boards;
|
||||
} else {
|
||||
@@ -558,7 +558,7 @@ BlazeComponent.extendComponent({
|
||||
events() {
|
||||
return [{
|
||||
'change .js-select-boards'(evt) {
|
||||
subManager.subscribe('board', $(evt.currentTarget).val());
|
||||
subManager.subscribe('board', $(evt.currentTarget).val(), false);
|
||||
this.selectedBoardId.set($(evt.currentTarget).val());
|
||||
},
|
||||
'submit .js-search-term-form'(evt) {
|
||||
|
||||
@@ -10,7 +10,8 @@ template(name="listHeader")
|
||||
a.list-header-left-icon.fa.fa-angle-left.js-unselect-list
|
||||
h2.list-header-name(
|
||||
class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}")
|
||||
= title
|
||||
+viewer
|
||||
= title
|
||||
if wipLimit.enabled
|
||||
| (
|
||||
span(class="{{#if reachedWipLimit}}highlight{{/if}}") {{cards.count}}
|
||||
@@ -18,7 +19,7 @@ template(name="listHeader")
|
||||
|
||||
if showCardsCountForList cards.count
|
||||
|
|
||||
p.quiet.small {{cardsCount}} {{_ 'cards-count'}}
|
||||
span(class="cardCount") {{cardsCount}} {{_ 'cards-count'}}
|
||||
if isMiniScreen
|
||||
if currentList
|
||||
if isWatching
|
||||
|
||||
@@ -68,6 +68,8 @@ Template.userFormsLayout.helpers({
|
||||
name = 'Brezhoneg';
|
||||
} else if (lang.name === 'ig') {
|
||||
name = 'Igbo';
|
||||
} else if (lang.name === 'oc') {
|
||||
name = 'Occitan';
|
||||
}
|
||||
return { tag, name };
|
||||
}).sort(function(a, b) {
|
||||
|
||||
@@ -1,11 +1,44 @@
|
||||
template(name="cardActions")
|
||||
div.trigger-item
|
||||
div.trigger-content
|
||||
div.trigger-dropdown
|
||||
select(id="setdate-action")
|
||||
option(value="setDate") {{{_'r-set'}}}
|
||||
option(value="updateDate") {{{_'r-update'}}}
|
||||
div.trigger-text
|
||||
| {{{_'r-datefield'}}}
|
||||
div.trigger-dropdown
|
||||
select(id="setdate-datefield")
|
||||
option(value="startAt") {{{_'r-df-start-at'}}}
|
||||
option(value="dueAt") {{{_'r-df-due-at'}}}
|
||||
option(value="endAt") {{{_'r-df-end-at'}}}
|
||||
option(value="receivedAt") {{{_'r-df-received-at'}}}
|
||||
div.trigger-text
|
||||
| {{{_'r-to-current-datetime'}}}
|
||||
div.trigger-button.js-set-date-action.js-goto-rules
|
||||
i.fa.fa-plus
|
||||
|
||||
div.trigger-item
|
||||
div.trigger-content
|
||||
div.trigger-text
|
||||
| {{{_'r-remove-value-from'}}}
|
||||
| {{{_'r-datefield'}}}
|
||||
div.trigger-dropdown
|
||||
select(id="setdate-removedatefieldvalue")
|
||||
option(value="startAt") {{{_'r-df-start-at'}}}
|
||||
option(value="dueAt") {{{_'r-df-due-at'}}}
|
||||
option(value="endAt") {{{_'r-df-end-at'}}}
|
||||
option(value="receivedAt") {{{_'r-df-received-at'}}}
|
||||
div.trigger-button.js-remove-datevalue-action.js-goto-rules
|
||||
i.fa.fa-plus
|
||||
|
||||
div.trigger-item
|
||||
div.trigger-content
|
||||
div.trigger-dropdown
|
||||
select(id="label-action")
|
||||
option(value="add") {{{_'r-add'}}}
|
||||
option(value="remove") {{{_'r-remove'}}}
|
||||
div.trigger-text
|
||||
div.trigger-text
|
||||
| {{{_'r-label'}}}
|
||||
div.trigger-dropdown
|
||||
select(id="label-id")
|
||||
@@ -21,16 +54,16 @@ template(name="cardActions")
|
||||
select(id="member-action")
|
||||
option(value="add") {{{_'r-add'}}}
|
||||
option(value="remove") {{{_'r-remove'}}}
|
||||
div.trigger-text
|
||||
div.trigger-text
|
||||
| {{{_'r-member'}}}
|
||||
div.trigger-dropdown
|
||||
input(id="member-name",type=text,placeholder="{{{_'r-name'}}}")
|
||||
input(id="member-name",type=text,placeholder="{{{_'r-name'}}}")
|
||||
div.trigger-button.js-add-member-action.js-goto-rules
|
||||
i.fa.fa-plus
|
||||
|
||||
div.trigger-item
|
||||
div.trigger-content
|
||||
div.trigger-text
|
||||
div.trigger-text
|
||||
| {{{_'r-remove-all'}}}
|
||||
div.trigger-button.js-add-removeall-action.js-goto-rules
|
||||
i.fa.fa-plus
|
||||
|
||||
@@ -29,6 +29,54 @@ BlazeComponent.extendComponent({
|
||||
|
||||
events() {
|
||||
return [{
|
||||
'click .js-set-date-action' (event) {
|
||||
const ruleName = this.data().ruleName.get();
|
||||
const trigger = this.data().triggerVar.get();
|
||||
const triggerId = Triggers.insert(trigger);
|
||||
const actionSelected = this.find('#setdate-action').value;
|
||||
const dateFieldSelected = this.find('#setdate-datefield').value;
|
||||
const boardId = Session.get('currentBoard');
|
||||
const desc = Utils.getTriggerActionDesc(event, this);
|
||||
|
||||
const actionId = Actions.insert({
|
||||
actionType: actionSelected,
|
||||
dateField: dateFieldSelected,
|
||||
boardId,
|
||||
desc,
|
||||
});
|
||||
|
||||
Rules.insert({
|
||||
title: ruleName,
|
||||
triggerId,
|
||||
actionId,
|
||||
boardId,
|
||||
desc,
|
||||
});
|
||||
},
|
||||
|
||||
'click .js-remove-datevalue-action' (event) {
|
||||
const ruleName = this.data().ruleName.get();
|
||||
const trigger = this.data().triggerVar.get();
|
||||
const triggerId = Triggers.insert(trigger);
|
||||
const dateFieldSelected = this.find('#setdate-removedatefieldvalue').value;
|
||||
const boardId = Session.get('currentBoard');
|
||||
const desc = Utils.getTriggerActionDesc(event, this);
|
||||
|
||||
const actionId = Actions.insert({
|
||||
actionType: 'removeDate',
|
||||
dateField: dateFieldSelected,
|
||||
boardId,
|
||||
desc,
|
||||
});
|
||||
|
||||
Rules.insert({
|
||||
title: ruleName,
|
||||
triggerId,
|
||||
actionId,
|
||||
boardId,
|
||||
desc,
|
||||
});
|
||||
},
|
||||
'click .js-add-label-action' (event) {
|
||||
const ruleName = this.data().ruleName.get();
|
||||
const trigger = this.data().triggerVar.get();
|
||||
|
||||
@@ -17,6 +17,10 @@ template(name="rulesList")
|
||||
button.js-delete-rule
|
||||
i.fa.fa-trash-o
|
||||
| {{{_ 'r-delete-rule'}}}
|
||||
else if currentUser.isBoardAdmin
|
||||
button.js-delete-rule
|
||||
i.fa.fa-trash-o
|
||||
| {{{_ 'r-delete-rule'}}}
|
||||
else
|
||||
li.no-items-message {{{_ 'r-no-rules' }}}
|
||||
if currentUser.isAdmin
|
||||
@@ -24,4 +28,10 @@ template(name="rulesList")
|
||||
button.js-goto-trigger
|
||||
i.fa.fa-plus
|
||||
| {{{_ 'r-add-rule'}}}
|
||||
input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle")
|
||||
input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle")
|
||||
else if currentUser.isBoardAdmin
|
||||
div.rules-add
|
||||
button.js-goto-trigger
|
||||
i.fa.fa-plus
|
||||
| {{{_ 'r-add-rule'}}}
|
||||
input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle")
|
||||
@@ -22,7 +22,7 @@ template(name="cardTriggers")
|
||||
div.trigger-item
|
||||
div.trigger-content
|
||||
div.trigger-text
|
||||
| {{_'r-when-the-label-is'}}
|
||||
| {{_'r-when-the-label'}}
|
||||
div.trigger-dropdown
|
||||
select(id="spec-label")
|
||||
each labels
|
||||
|
||||
@@ -10,8 +10,8 @@ template(name="sidebar")
|
||||
i.fa.fa-keyboard-o
|
||||
span {{_ 'keyboard-shortcuts' }}
|
||||
.sidebar-content.js-board-sidebar-content.js-perfect-scrollbar
|
||||
a.hide-btn.js-hide-sidebar
|
||||
i.fa.fa-navicon
|
||||
//a.hide-btn.js-hide-sidebar
|
||||
// i.fa.fa-navicon
|
||||
unless isDefaultView
|
||||
h2
|
||||
a.fa.fa-chevron-left.js-back-home
|
||||
@@ -189,7 +189,9 @@ template(name="labelsWidget")
|
||||
each currentBoard.labels
|
||||
a.card-label(class="card-label-{{color}}"
|
||||
class="{{#if currentUser.isNotCommentOnly}}js-label{{/if}}")
|
||||
span.card-label-name= name
|
||||
span.card-label-name
|
||||
+viewer
|
||||
= name
|
||||
if currentUser.isBoardAdmin
|
||||
a.card-label.add-label.js-add-label
|
||||
i.fa.fa-plus
|
||||
|
||||
@@ -1,54 +1,56 @@
|
||||
template(name="archivesSidebar")
|
||||
+basicTabs(tabs=tabs)
|
||||
|
||||
+tabContent(slug="cards")
|
||||
p.quiet
|
||||
a.js-restore-all-cards {{_ 'restore-all'}}
|
||||
| -
|
||||
a.js-delete-all-cards {{_ 'delete-all'}}
|
||||
each archivedCards
|
||||
.minicard-wrapper.js-minicard
|
||||
+minicard(this)
|
||||
if currentUser.isBoardMember
|
||||
if isArchiveReady.get
|
||||
+basicTabs(tabs=tabs)
|
||||
+tabContent(slug="cards")
|
||||
p.quiet
|
||||
a.js-restore-card {{_ 'restore'}}
|
||||
a.js-restore-all-cards {{_ 'restore-all'}}
|
||||
| -
|
||||
a.js-delete-card {{_ 'delete'}}
|
||||
if cardIsInArchivedList
|
||||
p.quiet.small ({{_ 'warn-list-archived'}})
|
||||
else
|
||||
p.no-items-message {{_ 'no-archived-cards'}}
|
||||
|
||||
+tabContent(slug="lists")
|
||||
p.quiet
|
||||
a.js-restore-all-lists {{_ 'restore-all'}}
|
||||
| -
|
||||
a.js-delete-all-lists {{_ 'delete-all'}}
|
||||
ul.archived-lists
|
||||
each archivedLists
|
||||
li.archived-lists-item
|
||||
= title
|
||||
a.js-delete-all-cards {{_ 'delete-all'}}
|
||||
each archivedCards
|
||||
.minicard-wrapper.js-minicard
|
||||
+minicard(this)
|
||||
if currentUser.isBoardMember
|
||||
p.quiet
|
||||
a.js-restore-list {{_ 'restore'}}
|
||||
a.js-restore-card {{_ 'restore'}}
|
||||
| -
|
||||
a.js-delete-list {{_ 'delete'}}
|
||||
else
|
||||
li.no-items-message {{_ 'no-archived-lists'}}
|
||||
a.js-delete-card {{_ 'delete'}}
|
||||
if cardIsInArchivedList
|
||||
p.quiet.small ({{_ 'warn-list-archived'}})
|
||||
else
|
||||
p.no-items-message {{_ 'no-archived-cards'}}
|
||||
|
||||
+tabContent(slug="swimlanes")
|
||||
p.quiet
|
||||
a.js-restore-all-swimlanes {{_ 'restore-all'}}
|
||||
| -
|
||||
a.js-delete-all-swimlanes {{_ 'delete-all'}}
|
||||
ul.archived-lists
|
||||
each archivedSwimlanes
|
||||
li.archived-lists-item
|
||||
= title
|
||||
if currentUser.isBoardMember
|
||||
p.quiet
|
||||
a.js-restore-swimlane {{_ 'restore'}}
|
||||
| -
|
||||
a.js-delete-swimlane {{_ 'delete'}}
|
||||
else
|
||||
li.no-items-message {{_ 'no-archived-swimlanes'}}
|
||||
+tabContent(slug="lists")
|
||||
p.quiet
|
||||
a.js-restore-all-lists {{_ 'restore-all'}}
|
||||
| -
|
||||
a.js-delete-all-lists {{_ 'delete-all'}}
|
||||
ul.archived-lists
|
||||
each archivedLists
|
||||
li.archived-lists-item
|
||||
= title
|
||||
if currentUser.isBoardMember
|
||||
p.quiet
|
||||
a.js-restore-list {{_ 'restore'}}
|
||||
| -
|
||||
a.js-delete-list {{_ 'delete'}}
|
||||
else
|
||||
li.no-items-message {{_ 'no-archived-lists'}}
|
||||
|
||||
+tabContent(slug="swimlanes")
|
||||
p.quiet
|
||||
a.js-restore-all-swimlanes {{_ 'restore-all'}}
|
||||
| -
|
||||
a.js-delete-all-swimlanes {{_ 'delete-all'}}
|
||||
ul.archived-lists
|
||||
each archivedSwimlanes
|
||||
li.archived-lists-item
|
||||
= title
|
||||
if currentUser.isBoardMember
|
||||
p.quiet
|
||||
a.js-restore-swimlane {{_ 'restore'}}
|
||||
| -
|
||||
a.js-delete-swimlane {{_ 'delete'}}
|
||||
else
|
||||
li.no-items-message {{_ 'no-archived-swimlanes'}}
|
||||
else
|
||||
+spinner
|
||||
@@ -1,4 +1,26 @@
|
||||
const subManager = new SubsManager();
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.isArchiveReady = new ReactiveVar(false);
|
||||
|
||||
// The pattern we use to manually handle data loading is described here:
|
||||
// https://kadira.io/academy/meteor-routing-guide/content/subscriptions-and-data-management/using-subs-manager
|
||||
// XXX The boardId should be readed from some sort the component "props",
|
||||
// unfortunatly, Blaze doesn't have this notion.
|
||||
this.autorun(() => {
|
||||
const currentBoardId = Session.get('currentBoard');
|
||||
if (!currentBoardId)
|
||||
return;
|
||||
const handle = subManager.subscribe('board', currentBoardId, true);
|
||||
Tracker.nonreactive(() => {
|
||||
Tracker.autorun(() => {
|
||||
this.isArchiveReady.set( handle.ready() );
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
tabs() {
|
||||
return [
|
||||
{ name: TAPi18n.__('cards'), slug: 'cards' },
|
||||
|
||||
@@ -6,7 +6,9 @@ template(name="customFieldsSidebar")
|
||||
div.minicard
|
||||
a.fa.fa-pencil.js-edit-custom-field.minicard-edit-button
|
||||
div.minicard-title
|
||||
| {{ name }} ({{ type }})
|
||||
+viewer
|
||||
=name
|
||||
| ({{ type }})
|
||||
|
||||
if currentUser.isBoardMember
|
||||
hr
|
||||
|
||||
@@ -119,6 +119,8 @@ Template.changeLanguagePopup.helpers({
|
||||
name = 'Brezhoneg';
|
||||
} else if (lang.name === 'ig') {
|
||||
name = 'Igbo';
|
||||
} else if (lang.name === 'oc') {
|
||||
name = 'Occitan';
|
||||
}
|
||||
return { tag, name };
|
||||
}).sort(function (a, b) {
|
||||
|
||||
@@ -80,11 +80,11 @@ EscapeActions.register('inlinedForm',
|
||||
);
|
||||
|
||||
// submit on click outside
|
||||
document.addEventListener('click', function(evt) {
|
||||
const openedForm = currentlyOpenedForm.get();
|
||||
const isClickOutside = $(evt.target).closest('.js-inlined-form').length === 0;
|
||||
if (openedForm && isClickOutside) {
|
||||
$('.js-inlined-form button[type=submit]').click();
|
||||
openedForm.close();
|
||||
}
|
||||
}, true);
|
||||
//document.addEventListener('click', function(evt) {
|
||||
// const openedForm = currentlyOpenedForm.get();
|
||||
// const isClickOutside = $(evt.target).closest('.js-inlined-form').length === 0;
|
||||
// if (openedForm && isClickOutside) {
|
||||
// $('.js-inlined-form button[type=submit]').click();
|
||||
// openedForm.close();
|
||||
// }
|
||||
//}, true);
|
||||
@@ -239,6 +239,10 @@ services:
|
||||
# ==== CORS =====
|
||||
# CORS: Set Access-Control-Allow-Origin header.
|
||||
#- CORS=*
|
||||
# CORS_ALLOW_HEADERS: Set Access-Control-Allow-Headers header. "Authorization,Content-Type" is required for cross-origin use of the API.
|
||||
#- CORS_ALLOW_HEADERS=Authorization,Content-Type
|
||||
# CORS_EXPOSE_HEADERS: Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations
|
||||
#- CORS_EXPOSE_HEADERS=*
|
||||
#-----------------------------------------------------------------
|
||||
# ==== MATOMO INTEGRATION ====
|
||||
# Optional: Integration with Matomo https://matomo.org that is installed to your server
|
||||
@@ -324,6 +328,10 @@ services:
|
||||
#- OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo
|
||||
# OAuth2 Token Endpoint.
|
||||
#- OAUTH2_TOKEN_ENDPOINT=/oauth/token
|
||||
# OAUTH2 ID Token Whitelist Fields.
|
||||
#- OAUTH2_ID_TOKEN_WHITELIST_FIELDS=""
|
||||
# OAUTH2 Request Permissions.
|
||||
#- OAUTH2_REQUEST_PERMISSIONS=openid profile email
|
||||
# OAuth2 ID Mapping
|
||||
#- OAUTH2_ID_MAP=
|
||||
# OAuth2 Username Mapping
|
||||
@@ -400,6 +408,9 @@ services:
|
||||
# Reject Unauthorized Certificate
|
||||
#- LDAP_REJECT_UNAUTHORIZED=false
|
||||
#
|
||||
# Option to login to the LDAP server with the user's own username and password, instead of an administrator key. Default: false (use administrator key).
|
||||
#- LDAP_USER_AUTHENTICATION="true"
|
||||
#
|
||||
# Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
|
||||
#- LDAP_USER_SEARCH_FILTER=
|
||||
#
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Възстановено от Архива",
|
||||
"r-a-card": "карта",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+11
-2
@@ -432,7 +432,7 @@
|
||||
"shortcut-show-shortcuts": "Otevřít tento seznam odkazů",
|
||||
"shortcut-toggle-filterbar": "Přepnout lištu filtrování",
|
||||
"shortcut-toggle-sidebar": "Přepnout lištu tabla",
|
||||
"show-cards-minimum-count": "Zobrazit počet karet pokud sloupec obsahuje více než ",
|
||||
"show-cards-minimum-count": "Zobrazit počet karet pokud sloupec obsahuje více než",
|
||||
"sidebar-open": "Otevřít boční panel",
|
||||
"sidebar-close": "Zavřít boční panel",
|
||||
"signupPopup-title": "Vytvořit účet",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Obnoveno z archivu",
|
||||
"r-a-card": "karta",
|
||||
"r-when-a-label-is": "Pokud nějaký štítek je",
|
||||
"r-when-the-label-is": "Pokud tento štítek je",
|
||||
"r-when-the-label": "Pokud tento štítek je",
|
||||
"r-list-name": "název seznamu",
|
||||
"r-when-a-member": "Pokud nějaký člen je",
|
||||
"r-when-the-member": "Pokud tento člen je",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "Když je karta přesunuta do jiného sloupce",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "aus dem Archiv wiederhergestellt",
|
||||
"r-a-card": "einer Karte",
|
||||
"r-when-a-label-is": "Wenn ein Label",
|
||||
"r-when-the-label-is": " Wenn das Label",
|
||||
"r-when-the-label": "Wenn das Label",
|
||||
"r-list-name": "Listenname",
|
||||
"r-when-a-member": "Wenn ein Mitglied",
|
||||
"r-when-the-member": "Wenn das Mitglied",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Hinweis: Lassen Sie ein Feld leer, um alle möglichen Werte zu finden.",
|
||||
"r-checklist-note": "Hinweis: Die Elemente der Checkliste müssen als kommagetrennte Werte geschrieben werden.",
|
||||
"r-when-a-card-is-moved": "Wenn eine Karte in eine andere Liste verschoben wird",
|
||||
"r-set": "Setze",
|
||||
"r-update": "Aktualisiere",
|
||||
"r-datefield": "Datumsfeld",
|
||||
"r-df-start-at": "Start",
|
||||
"r-df-due-at": "Fällig",
|
||||
"r-df-end-at": "Ende",
|
||||
"r-df-received-at": "Empfangen",
|
||||
"r-to-current-datetime": "auf das aktuelle Datum/Zeit",
|
||||
"r-remove-value-from": "Entferne Wert von",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -672,6 +672,15 @@
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-added-to": "added to",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+44
-35
@@ -23,10 +23,10 @@
|
||||
"act-createCustomField": "creó el campo personalizado __customField__ en la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"act-createList": "añadida la lista __list__ al tablero __board__",
|
||||
"act-addBoardMember": "añadido el mimbro __member__ al tablero __board__",
|
||||
"act-archivedBoard": "El tablero __board__ se ha movido a Archivo",
|
||||
"act-archivedCard": "La tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__ se ha movido a Archivo",
|
||||
"act-archivedList": "La lista __list__ del carril __swimlane__ del tablero __board__ se ha movido a Archivo",
|
||||
"act-archivedSwimlane": "El carril __swimlane__ del tablero __board__ se ha movido a Archivo",
|
||||
"act-archivedBoard": "El tablero __board__ se ha archivado",
|
||||
"act-archivedCard": "La tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__ se ha archivado",
|
||||
"act-archivedList": "La lista __list__ del carril __swimlane__ del tablero __board__ se ha archivado",
|
||||
"act-archivedSwimlane": "El carril __swimlane__ del tablero __board__ se ha archivado",
|
||||
"act-importBoard": "importado el tablero __board__",
|
||||
"act-importCard": "importada la tarjeta __card__ a la lista __list__ del carrril __swimlane__ del tablero __board__",
|
||||
"act-importList": "importada la lista __list__ al carril __swimlane__ del tablero __board__",
|
||||
@@ -42,7 +42,7 @@
|
||||
"activities": "Actividades",
|
||||
"activity": "Actividad",
|
||||
"activity-added": "ha añadido %s a %s",
|
||||
"activity-archived": "%s movido a Archivo",
|
||||
"activity-archived": "%s se ha archivado",
|
||||
"activity-attached": "ha adjuntado %s a %s",
|
||||
"activity-created": "ha creado %s",
|
||||
"activity-customfield-created": "creó el campo personalizado %s",
|
||||
@@ -59,7 +59,7 @@
|
||||
"activity-checked-item": "marcado %s en la lista de verificación %s de %s",
|
||||
"activity-unchecked-item": "desmarcado %s en lista %s de %s",
|
||||
"activity-checklist-added": "ha añadido una lista de verificación a %s",
|
||||
"activity-checklist-removed": "eliminada una lista de verificación desde %s ",
|
||||
"activity-checklist-removed": "eliminada una lista de verificación desde %s",
|
||||
"activity-checklist-completed": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
|
||||
"activity-checklist-uncompleted": "no completado la lista %s de %s",
|
||||
"activity-checklist-item-added": "ha añadido el elemento de la lista de verificación a '%s' en %s",
|
||||
@@ -92,19 +92,19 @@
|
||||
"and-n-other-card_plural": "y otras __count__ tarjetas",
|
||||
"apply": "Aplicar",
|
||||
"app-is-offline": "Cargando, espera por favor. Refrescar esta página causará pérdida de datos. Si la carga no funciona, por favor comprueba que el servidor no se ha parado.",
|
||||
"archive": "Mover al Archivo",
|
||||
"archive-all": "Mover todo al Archivo",
|
||||
"archive-board": "Mover Tablero al Archivo",
|
||||
"archive-card": "Mover tarjeta al Archivo",
|
||||
"archive-list": "Mover Lista al Archivo",
|
||||
"archive-swimlane": "Mover carril al Archivo",
|
||||
"archive-selection": "Mover selección al Archivo",
|
||||
"archiveBoardPopup-title": "¿Mover Tablero al Archivo?",
|
||||
"archived-items": "Archivar",
|
||||
"archive": "Archivar",
|
||||
"archive-all": "Archivar todo",
|
||||
"archive-board": "Archivar este tablero",
|
||||
"archive-card": "Archivar esta tarjeta",
|
||||
"archive-list": "Archivar esta lista",
|
||||
"archive-swimlane": "Archivar este carril",
|
||||
"archive-selection": "Archivar esta selección",
|
||||
"archiveBoardPopup-title": "¿Archivar este tablero?",
|
||||
"archived-items": "Archivo",
|
||||
"archived-boards": "Tableros en Archivo",
|
||||
"restore-board": "Restaurar el tablero",
|
||||
"no-archived-boards": "No hay Tableros en el Archivo",
|
||||
"archives": "Archivar",
|
||||
"archives": "Archivo",
|
||||
"template": "Plantilla",
|
||||
"templates": "Plantillas",
|
||||
"assign-member": "Asignar miembros",
|
||||
@@ -133,8 +133,8 @@
|
||||
"board-view-lists": "Listas",
|
||||
"bucket-example": "Como “Cosas por hacer” por ejemplo",
|
||||
"cancel": "Cancelar",
|
||||
"card-archived": "Esta tarjeta se movió al Archivo",
|
||||
"board-archived": "Este tablero se movió al Archivo",
|
||||
"card-archived": "Se archivó esta tarjeta",
|
||||
"board-archived": "Se archivó este tablero",
|
||||
"card-comments-title": "Esta tarjeta tiene %s comentarios.",
|
||||
"card-delete-notice": "la eliminación es permanente. Perderás todas las acciones asociadas a esta tarjeta.",
|
||||
"card-delete-pop": "Se eliminarán todas las acciones del historial de actividades y no se podrá volver a abrir la tarjeta. Esta acción no puede deshacerse.",
|
||||
@@ -347,7 +347,7 @@
|
||||
"leave-board-pop": "¿Seguro que quieres abandonar __boardTitle__? Serás desvinculado de todas las tarjetas en este tablero.",
|
||||
"leaveBoardPopup-title": "¿Abandonar el tablero?",
|
||||
"link-card": "Enlazar a esta tarjeta",
|
||||
"list-archive-cards": "Mover todas las tarjetas de la lista al Archivo",
|
||||
"list-archive-cards": "Archivar todas las tarjetas de esta lista",
|
||||
"list-archive-cards-pop": "Esto eliminará del tablero todas las tarjetas en esta lista. Para ver las tarjetas en el Archivo y recuperarlas al tablero haga click en \"Menu\" > \"Archivo\"",
|
||||
"list-move-cards": "Mover todas las tarjetas de esta lista",
|
||||
"list-select-cards": "Seleccionar todas las tarjetas de esta lista",
|
||||
@@ -504,7 +504,7 @@
|
||||
"error-notAuthorized": "No estás autorizado a ver esta página.",
|
||||
"outgoing-webhooks": "Webhooks salientes",
|
||||
"outgoingWebhooksPopup-title": "Webhooks salientes",
|
||||
"boardCardTitlePopup-title": "Filtro de títulos de tarjeta ",
|
||||
"boardCardTitlePopup-title": "Filtro de títulos de tarjeta",
|
||||
"new-outgoing-webhook": "Nuevo webhook saliente",
|
||||
"no-name": "(Desconocido)",
|
||||
"Node_version": "Versión de Node",
|
||||
@@ -514,7 +514,7 @@
|
||||
"OS_Loadavg": "Carga media del sistema",
|
||||
"OS_Platform": "Plataforma del sistema",
|
||||
"OS_Release": "Publicación del sistema",
|
||||
"OS_Totalmem": "Memoria Total del sistema",
|
||||
"OS_Totalmem": "Memoria total del sistema",
|
||||
"OS_Type": "Tipo de sistema",
|
||||
"OS_Uptime": "Tiempo activo del sistema",
|
||||
"days": "días",
|
||||
@@ -528,8 +528,8 @@
|
||||
"no": "No",
|
||||
"accounts": "Cuentas",
|
||||
"accounts-allowEmailChange": "Permitir cambiar el correo electrónico",
|
||||
"accounts-allowUserNameChange": "Permitir el cambio del nombre de usuario",
|
||||
"createdAt": "Creado en",
|
||||
"accounts-allowUserNameChange": "Permitir cambiar el nombre de usuario",
|
||||
"createdAt": "Fecha de alta",
|
||||
"verified": "Verificado",
|
||||
"active": "Activo",
|
||||
"card-received": "Recibido",
|
||||
@@ -592,11 +592,11 @@
|
||||
"set-filter": "Filtrar",
|
||||
"r-moved-to": "Movido a",
|
||||
"r-moved-from": "Movido desde",
|
||||
"r-archived": "Movido a Archivo",
|
||||
"r-archived": "Se archivó",
|
||||
"r-unarchived": "Restaurado del archivo",
|
||||
"r-a-card": "una tarjeta",
|
||||
"r-when-a-label-is": "Cuando una etiqueta es",
|
||||
"r-when-the-label-is": "Cuando la etiqueta es",
|
||||
"r-when-the-label": "Cuando la etiqueta es",
|
||||
"r-list-name": "Nombre de lista",
|
||||
"r-when-a-member": "Cuando un miembro es",
|
||||
"r-when-the-member": "Cuando el miembro",
|
||||
@@ -610,11 +610,11 @@
|
||||
"r-when-the-item": "Cuando el elemento de la lista de verificación es",
|
||||
"r-checked": "Marcado",
|
||||
"r-unchecked": "Desmarcado",
|
||||
"r-move-card-to": "Mover tarjeta a",
|
||||
"r-move-card-to": "Mover la tarjeta a",
|
||||
"r-top-of": "Arriba de",
|
||||
"r-bottom-of": "Abajo de",
|
||||
"r-its-list": "su lista",
|
||||
"r-archive": "Mover al Archivo",
|
||||
"r-archive": "Archivar",
|
||||
"r-unarchive": "Restaurar del Archivo",
|
||||
"r-card": "tarjeta",
|
||||
"r-add": "Añadir",
|
||||
@@ -635,21 +635,21 @@
|
||||
"r-to": "a",
|
||||
"r-subject": "asunto",
|
||||
"r-rule-details": "Detalle de la regla",
|
||||
"r-d-move-to-top-gen": "Mover tarjeta arriba de su lista",
|
||||
"r-d-move-to-top-spec": "Mover tarjeta arriba de la lista",
|
||||
"r-d-move-to-bottom-gen": "Mover tarjeta abajo de su lista",
|
||||
"r-d-move-to-bottom-spec": "Mover tarjeta al fondo de la lista",
|
||||
"r-d-move-to-top-gen": "Mover la tarjeta al inicio de su lista",
|
||||
"r-d-move-to-top-spec": "Mover la tarjeta al inicio de la lista",
|
||||
"r-d-move-to-bottom-gen": "Mover la tarjeta al final de su lista",
|
||||
"r-d-move-to-bottom-spec": "Mover la tarjeta al final de la lista",
|
||||
"r-d-send-email": "Enviar email",
|
||||
"r-d-send-email-to": "a",
|
||||
"r-d-send-email-subject": "asunto",
|
||||
"r-d-send-email-message": "mensaje",
|
||||
"r-d-archive": "Mover tarjeta al Archivo",
|
||||
"r-d-archive": "Archivar la tarjeta",
|
||||
"r-d-unarchive": "Restaurar tarjeta del Archivo",
|
||||
"r-d-add-label": "Añadir etiqueta",
|
||||
"r-d-remove-label": "Eliminar etiqueta",
|
||||
"r-create-card": "Crear nueva tarjeta",
|
||||
"r-in-list": "en la lista",
|
||||
"r-in-swimlane": "en carril ",
|
||||
"r-in-swimlane": "en carril",
|
||||
"r-d-add-member": "Añadir miembro",
|
||||
"r-d-remove-member": "Eliminar miembro",
|
||||
"r-d-remove-all-member": "Eliminar todos los miembros",
|
||||
@@ -669,15 +669,24 @@
|
||||
"r-board-note": "Nota: deje un campo vacío para que coincida con todos los valores posibles",
|
||||
"r-checklist-note": "Nota: los ítems de la lista tienen que escribirse como valores separados por coma.",
|
||||
"r-when-a-card-is-moved": "Cuando una tarjeta es movida a otra lista",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
"authentication-method": "Método de autenticación",
|
||||
"authentication-type": "Tipo de autenticación",
|
||||
"custom-product-name": "Nombre de producto personalizado",
|
||||
"layout": "Disñeo",
|
||||
"layout": "Diseño",
|
||||
"hide-logo": "Ocultar logo",
|
||||
"add-custom-html-after-body-start": "Añade HTML personalizado después de <body> ",
|
||||
"add-custom-html-after-body-start": "Añade HTML personalizado después de <body>",
|
||||
"add-custom-html-before-body-end": "Añade HTML personalizado después de </body>",
|
||||
"error-undefined": "Algo no está bien",
|
||||
"error-ldap-login": "Ocurrió un error al intentar acceder",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+11
-2
@@ -507,7 +507,7 @@
|
||||
"boardCardTitlePopup-title": "فیلتر موضوع کارت",
|
||||
"new-outgoing-webhook": "New Outgoing Webhook",
|
||||
"no-name": "(ناشناخته)",
|
||||
"Node_version": "نسخه Node ",
|
||||
"Node_version": "نسخه Node",
|
||||
"OS_Arch": "OS Arch",
|
||||
"OS_Cpus": "OS CPU Count",
|
||||
"OS_Freemem": "OS Free Memory",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "بازگردانی از آرشیو",
|
||||
"r-a-card": "کارت",
|
||||
"r-when-a-label-is": "زمانی که لیبل هست",
|
||||
"r-when-the-label-is": "زمانی که لیبل هست",
|
||||
"r-when-the-label": "زمانی که لیبل هست",
|
||||
"r-list-name": "نام لیست",
|
||||
"r-when-a-member": "زمانی که کاربر هست",
|
||||
"r-when-the-member": "زمانی که کاربر",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "نکته: برای نمایش موارد ممکن کادر را خالی بگذارید.",
|
||||
"r-checklist-note": "نکته: چکلیستها باید توسط کاما از یکدیگر جدا شوند.",
|
||||
"r-when-a-card-is-moved": "دمانی که یک کارت به لیست دیگری منتقل شد",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+80
-71
@@ -83,7 +83,7 @@
|
||||
"added": "Lisätty",
|
||||
"addMemberPopup-title": "Jäsenet",
|
||||
"admin": "Ylläpitäjä",
|
||||
"admin-desc": "Voi nähfä ja muokata kortteja, poistaa jäseniä, ja muuttaa taulun asetuksia.",
|
||||
"admin-desc": "Voi nähdä ja muokata kortteja, poistaa jäseniä, ja muuttaa taulun asetuksia.",
|
||||
"admin-announcement": "Ilmoitus",
|
||||
"admin-announcement-active": "Aktiivinen järjestelmänlaajuinen ilmoitus",
|
||||
"admin-announcement-title": "Ilmoitus ylläpitäjältä",
|
||||
@@ -103,7 +103,7 @@
|
||||
"archived-items": "Arkisto",
|
||||
"archived-boards": "Taulut Arkistossa",
|
||||
"restore-board": "Palauta taulu",
|
||||
"no-archived-boards": "Ei tauluja Arkistossa",
|
||||
"no-archived-boards": "Ei tauluja Arkistossa.",
|
||||
"archives": "Arkisto",
|
||||
"template": "Malli",
|
||||
"templates": "Mallit",
|
||||
@@ -114,7 +114,7 @@
|
||||
"attachmentDeletePopup-title": "Poista liitetiedosto?",
|
||||
"attachments": "Liitetiedostot",
|
||||
"auto-watch": "Automaattisesti seuraa tauluja kun ne on luotu",
|
||||
"avatar-too-big": "Profiilikuva on liian suuri (70KB maksimi)",
|
||||
"avatar-too-big": "Profiilikuva on liian suuri (enintään 70 kt)",
|
||||
"back": "Takaisin",
|
||||
"board-change-color": "Muokkaa väriä",
|
||||
"board-nb-stars": "%s tähteä",
|
||||
@@ -125,9 +125,9 @@
|
||||
"boardChangeTitlePopup-title": "Nimeä taulu uudelleen",
|
||||
"boardChangeVisibilityPopup-title": "Muokkaa näkyvyyttä",
|
||||
"boardChangeWatchPopup-title": "Muokkaa seuraamista",
|
||||
"boardMenuPopup-title": "Taulu asetukset",
|
||||
"boardMenuPopup-title": "Tauluasetukset",
|
||||
"boards": "Taulut",
|
||||
"board-view": "Taulu näkymä",
|
||||
"board-view": "Taulunäkymä",
|
||||
"board-view-cal": "Kalenteri",
|
||||
"board-view-swimlanes": "Swimlanet",
|
||||
"board-view-lists": "Listat",
|
||||
@@ -136,8 +136,8 @@
|
||||
"card-archived": "Tämä kortti on siirretty Arkistoon.",
|
||||
"board-archived": "Tämä taulu on siirretty Arkistoon.",
|
||||
"card-comments-title": "Tässä kortissa on %s kommenttia.",
|
||||
"card-delete-notice": "Poistaminen on lopullista. Menetät kaikki toimet jotka on liitetty tähän korttiin.",
|
||||
"card-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja et tule pystymään uudelleenavaamaan korttia. Tätä ei voi peruuttaa.",
|
||||
"card-delete-notice": "Poistaminen on lopullista. Menetät kaikki tähän korttiin liitetyt toimet.",
|
||||
"card-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä, etkä pysty avata korttia uudelleen. Tätä ei voi peruuttaa.",
|
||||
"card-delete-suggest-archive": "Voit siirtää kortin Arkistoon poistaaksesi sen taululta ja säilyttääksesi toimintalokin.",
|
||||
"card-due": "Erääntyy",
|
||||
"card-due-on": "Erääntyy",
|
||||
@@ -154,14 +154,14 @@
|
||||
"cardCustomField-datePopup-title": "Muokkaa päivää",
|
||||
"cardCustomFieldsPopup-title": "Muokkaa mukautettuja kenttiä",
|
||||
"cardDeletePopup-title": "Poista kortti?",
|
||||
"cardDetailsActionsPopup-title": "Kortti toimet",
|
||||
"cardDetailsActionsPopup-title": "Korttitoimet",
|
||||
"cardLabelsPopup-title": "Tunnisteet",
|
||||
"cardMembersPopup-title": "Jäsenet",
|
||||
"cardMorePopup-title": "Lisää",
|
||||
"cardTemplatePopup-title": "Luo malli",
|
||||
"cards": "Kortit",
|
||||
"cards-count": "korttia",
|
||||
"casSignIn": "CAS kirjautuminen",
|
||||
"casSignIn": "CAS-kirjautuminen",
|
||||
"cardType-card": "Kortti",
|
||||
"cardType-linkedCard": "Linkitetty kortti",
|
||||
"cardType-linkedBoard": "Linkitetty taulu",
|
||||
@@ -182,7 +182,7 @@
|
||||
"clipboard": "Leikepöytä tai raahaa ja pudota",
|
||||
"close": "Sulje",
|
||||
"close-board": "Sulje taulu",
|
||||
"close-board-pop": "Voit palauttaa taulun klikkaamalla “Arkisto” painiketta taululistan yläpalkista.",
|
||||
"close-board-pop": "Voit palauttaa taulun klikkaamalla “Arkisto”-painiketta taululistan yläpalkista.",
|
||||
"color-black": "musta",
|
||||
"color-blue": "sininen",
|
||||
"color-crimson": "karmiininpunainen",
|
||||
@@ -216,14 +216,14 @@
|
||||
"no-comments": "Ei kommentteja",
|
||||
"no-comments-desc": "Ei voi nähdä kommentteja ja toimintaa.",
|
||||
"computer": "Tietokone",
|
||||
"confirm-subtask-delete-dialog": "Oletko varma että haluat poistaa alitehtävän?",
|
||||
"confirm-checklist-delete-dialog": "Oletko varma että haluat poistaa tarkistuslistan?",
|
||||
"confirm-subtask-delete-dialog": "Haluatko varmasti poistaa alitehtävän?",
|
||||
"confirm-checklist-delete-dialog": "Haluatko varmasti poistaa tarkistuslistan?",
|
||||
"copy-card-link-to-clipboard": "Kopioi kortin linkki leikepöydälle",
|
||||
"linkCardPopup-title": "Linkitä kortti",
|
||||
"searchElementPopup-title": "Etsi",
|
||||
"copyCardPopup-title": "Kopioi kortti",
|
||||
"copyChecklistToManyCardsPopup-title": "Kopioi tarkistuslistan malli monille korteille",
|
||||
"copyChecklistToManyCardsPopup-instructions": "Kohde korttien otsikot ja kuvaukset JSON muodossa",
|
||||
"copyChecklistToManyCardsPopup-instructions": "Kohde korttien otsikot ja kuvaukset JSON-muodossa",
|
||||
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Ensimmäisen kortin otsikko\", \"description\":\"Ensimmäisen kortin kuvaus\"}, {\"title\":\"Toisen kortin otsikko\",\"description\":\"Toisen kortin kuvaus\"},{\"title\":\"Viimeisen kortin otsikko\",\"description\":\"Viimeisen kortin kuvaus\"} ]",
|
||||
"create": "Luo",
|
||||
"createBoardPopup-title": "Luo taulu",
|
||||
@@ -237,7 +237,7 @@
|
||||
"custom-field-date": "Päivämäärä",
|
||||
"custom-field-dropdown": "Pudotusvalikko",
|
||||
"custom-field-dropdown-none": "(ei mitään)",
|
||||
"custom-field-dropdown-options": "Luettelon vaihtoehdot",
|
||||
"custom-field-dropdown-options": "Listan vaihtoehdot",
|
||||
"custom-field-dropdown-options-placeholder": "Paina Enter lisätäksesi lisää vaihtoehtoja",
|
||||
"custom-field-dropdown-unknown": "(tuntematon)",
|
||||
"custom-field-number": "Numero",
|
||||
@@ -245,13 +245,13 @@
|
||||
"custom-fields": "Mukautetut kentät",
|
||||
"date": "Päivämäärä",
|
||||
"decline": "Kieltäydy",
|
||||
"default-avatar": "Oletus profiilikuva",
|
||||
"default-avatar": "Oletusprofiilikuva",
|
||||
"delete": "Poista",
|
||||
"deleteCustomFieldPopup-title": "Poista mukautettu kenttä?",
|
||||
"deleteLabelPopup-title": "Poista tunniste?",
|
||||
"description": "Kuvaus",
|
||||
"disambiguateMultiLabelPopup-title": "Yksikäsitteistä tunniste toiminta",
|
||||
"disambiguateMultiMemberPopup-title": "Yksikäsitteistä jäsen toiminta",
|
||||
"disambiguateMultiLabelPopup-title": "Yksikäsitteistä tunnistetoiminta",
|
||||
"disambiguateMultiMemberPopup-title": "Yksikäsitteistä jäsentoiminta",
|
||||
"discard": "Hylkää",
|
||||
"done": "Valmis",
|
||||
"download": "Lataa",
|
||||
@@ -259,7 +259,7 @@
|
||||
"edit-avatar": "Muokkaa profiilikuvaa",
|
||||
"edit-profile": "Muokkaa profiilia",
|
||||
"edit-wip-limit": "Muokkaa WIP-rajaa",
|
||||
"soft-wip-limit": "Pehmeä WIP raja",
|
||||
"soft-wip-limit": "Pehmeä WIP-raja",
|
||||
"editCardStartDatePopup-title": "Muokkaa aloituspäivää",
|
||||
"editCardDueDatePopup-title": "Muokkaa eräpäivää",
|
||||
"editCustomFieldPopup-title": "Muokkaa kenttää",
|
||||
@@ -268,25 +268,25 @@
|
||||
"editNotificationPopup-title": "Muokkaa ilmoituksia",
|
||||
"editProfilePopup-title": "Muokkaa profiilia",
|
||||
"email": "Sähköposti",
|
||||
"email-enrollAccount-subject": "An account created for you on __siteName__",
|
||||
"email-enrollAccount-text": "Hei __user__,\n\nAlkaaksesi käyttämään palvelua, klikkaa allaolevaa linkkiä.\n\n__url__\n\nKiitos.",
|
||||
"email-enrollAccount-subject": "Sinulle on luotu tili palveluun __siteName__",
|
||||
"email-enrollAccount-text": "Hei __user__,\n\nKlikkaa alla olevaa linkkiä aloittaaksesi palvelun käytön.\n\n__url__\n\nKiitos.",
|
||||
"email-fail": "Sähköpostin lähettäminen epäonnistui",
|
||||
"email-fail-text": "Virhe yrittäessä lähettää sähköpostia",
|
||||
"email-invalid": "Virheellinen sähköposti",
|
||||
"email-invite": "Kutsu sähköpostilla",
|
||||
"email-invite-subject": "__inviter__ lähetti sinulle kutsun",
|
||||
"email-invite-text": "Hyvä __user__,\n\n__inviter__ kutsuu sinut liittymään taululle \"__board__\" yhteistyötä varten.\n\nOle hyvä ja seuraa allaolevaa linkkiä:\n\n__url__\n\nKiitos.",
|
||||
"email-resetPassword-subject": "Reset your password on __siteName__",
|
||||
"email-resetPassword-text": "Hei __user__,\n\nNollataksesi salasanasi, klikkaa allaolevaa linkkiä.\n\n__url__\n\nKiitos.",
|
||||
"email-invite-text": "Hyvä __user__,\n\n__inviter__ kutsuu sinut liittymään taululle \"__board__\" yhteistyötä varten.\n\nOle hyvä ja seuraa alla olevaa linkkiä:\n\n__url__\n\nKiitos.",
|
||||
"email-resetPassword-subject": "Nollaa salasanasi palvelussa __siteName__",
|
||||
"email-resetPassword-text": "Hei __user__,\n\nNollataksesi salasanasi, klikkaa alla olevaa linkkiä.\n\n__url__\n\nKiitos.",
|
||||
"email-sent": "Sähköposti lähetetty",
|
||||
"email-verifyEmail-subject": "Varmista sähköpostiosoitteesi osoitteessa __url__",
|
||||
"email-verifyEmail-text": "Hei __user__,\n\nvahvistaaksesi sähköpostiosoitteesi, klikkaa allaolevaa linkkiä.\n\n__url__\n\nKiitos.",
|
||||
"email-verifyEmail-text": "Hei __user__,\n\nvahvistaaksesi sähköpostiosoitteesi, klikkaa alla olevaa linkkiä.\n\n__url__\n\nKiitos.",
|
||||
"enable-wip-limit": "Ota käyttöön WIP-raja",
|
||||
"error-board-doesNotExist": "Tämä taulu ei ole olemassa",
|
||||
"error-board-doesNotExist": "Tätä taulua ei ole olemassa",
|
||||
"error-board-notAdmin": "Tehdäksesi tämän sinun täytyy olla tämän taulun ylläpitäjä",
|
||||
"error-board-notAMember": "Tehdäksesi tämän sinun täytyy olla tämän taulun jäsen",
|
||||
"error-json-malformed": "Tekstisi ei ole kelvollisessa JSON muodossa",
|
||||
"error-json-schema": "JSON tietosi ei sisällä oikeaa tietoa oikeassa muodossa",
|
||||
"error-json-malformed": "Tekstisi ei ole kelvollisessa JSON-muodossa",
|
||||
"error-json-schema": "JSON-tietosi ei sisällä oikeaa tietoa oikeassa muodossa",
|
||||
"error-list-doesNotExist": "Tätä listaa ei ole olemassa",
|
||||
"error-user-doesNotExist": "Tätä käyttäjää ei ole olemassa",
|
||||
"error-user-notAllowSelf": "Et voi kutsua itseäsi",
|
||||
@@ -316,14 +316,14 @@
|
||||
"import-board-c": "Tuo taulu",
|
||||
"import-board-title-trello": "Tuo taulu Trellosta",
|
||||
"import-board-title-wekan": "Tuo taulu edellisestä viennistä",
|
||||
"import-sandstorm-backup-warning": "Älä poista tietoja joita toit alkuperäisestä viennistä tai Trellosta ennenkuin tarkistat onnistuuko sulkea ja avata tämä jyvä uudelleen, vai näkyykö Board not found virhe, joka tarkoittaa tietojen häviämistä.",
|
||||
"import-sandstorm-warning": "Tuotu taulu poistaa kaikki olemassaolevan taulun tiedot ja korvaa ne tuodulla taululla.",
|
||||
"import-sandstorm-backup-warning": "Älä poista tietoja joita toit alkuperäisestä viennistä tai Trellosta ennen kuin tarkistat onnistuuko sulkea ja avata tämä jyvä uudelleen, vai näkyykö Board not found -virhe, joka tarkoittaa tietojen häviämistä.",
|
||||
"import-sandstorm-warning": "Tuotu taulu poistaa kaikki olemassa olevan taulun tiedot ja korvaa ne tuodulla taululla.",
|
||||
"from-trello": "Trellosta",
|
||||
"from-wekan": "Edellisestä viennistä",
|
||||
"import-board-instruction-trello": "Trello taulullasi, mene 'Menu', sitten 'More', 'Print and Export', 'Export JSON', ja kopioi tuloksena saamasi teksti",
|
||||
"import-board-instruction-trello": "Mene Trello-taulullasi 'Menu', sitten 'More', 'Print and Export', 'Export JSON', ja kopioi tuloksena saamasi teksti",
|
||||
"import-board-instruction-wekan": "Taulullasi, mene 'Valikko', sitten 'Vie taulu', ja kopioi teksti ladatusta tiedostosta.",
|
||||
"import-board-instruction-about-errors": "Jos virheitä tulee taulua tuotaessa, joskus tuonti silti toimii, ja taulu on Kaikki taulut sivulla.",
|
||||
"import-json-placeholder": "Liitä kelvollinen JSON tietosi tähän",
|
||||
"import-json-placeholder": "Liitä kelvollinen JSON-tietosi tähän",
|
||||
"import-map-members": "Vastaavat jäsenet",
|
||||
"import-members-map": "Tuomallasi taululla on muutamia jäseniä. Ole hyvä ja valitse tuomiasi jäseniä vastaavat käyttäjäsi",
|
||||
"import-show-user-mapping": "Tarkasta vastaavat jäsenet",
|
||||
@@ -345,17 +345,17 @@
|
||||
"last-admin-desc": "Et voi vaihtaa rooleja koska täytyy olla olemassa ainakin yksi ylläpitäjä.",
|
||||
"leave-board": "Jää pois taululta",
|
||||
"leave-board-pop": "Haluatko varmasti poistua taululta __boardTitle__? Sinut poistetaan kaikista tämän taulun korteista.",
|
||||
"leaveBoardPopup-title": "Jää pois taululta ?",
|
||||
"leaveBoardPopup-title": "Poistu taululta?",
|
||||
"link-card": "Linkki tähän korttiin",
|
||||
"list-archive-cards": "Siirrä kaikki tämän listan kortit Arkistoon",
|
||||
"list-archive-cards-pop": "Tämä poistaa kaikki tämän listan kortit taululta. Nähdäksesi Arkistossa olevat kortit ja tuodaksesi ne takaisin taululle, klikkaa “Valikko” > “Arkisto”.",
|
||||
"list-move-cards": "Siirrä kaikki kortit tässä listassa",
|
||||
"list-select-cards": "Valitse kaikki kortit tässä listassa",
|
||||
"set-color-list": "Aseta väri",
|
||||
"listActionPopup-title": "Listaa toimet",
|
||||
"swimlaneActionPopup-title": "Swimlane toimet",
|
||||
"listActionPopup-title": "Listatoimet",
|
||||
"swimlaneActionPopup-title": "Swimlane-toimet",
|
||||
"swimlaneAddPopup-title": "Lisää Swimlane alle",
|
||||
"listImportCardPopup-title": "Tuo Trello kortti",
|
||||
"listImportCardPopup-title": "Tuo Trello-kortti",
|
||||
"listMorePopup-title": "Lisää",
|
||||
"link-list": "Linkki tähän listaan",
|
||||
"list-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja listan poistaminen on lopullista. Tätä ei pysty peruuttamaan.",
|
||||
@@ -365,7 +365,7 @@
|
||||
"log-out": "Kirjaudu ulos",
|
||||
"log-in": "Kirjaudu sisään",
|
||||
"loginPopup-title": "Kirjaudu sisään",
|
||||
"memberMenuPopup-title": "Jäsen asetukset",
|
||||
"memberMenuPopup-title": "Jäsenasetukset",
|
||||
"members": "Jäsenet",
|
||||
"menu": "Valikko",
|
||||
"move-selection": "Siirrä valinta",
|
||||
@@ -390,7 +390,7 @@
|
||||
"notify-watch": "Vastaanota päivityksiä kaikilta tauluilta, listoilta tai korteilta joita seuraat.",
|
||||
"optional": "valinnainen",
|
||||
"or": "tai",
|
||||
"page-maybe-private": "Tämä sivu voi olla yksityinen. Voit ehkä pystyä näkemään sen <a href='%s'>kirjautumalla sisään</a>.",
|
||||
"page-maybe-private": "Tämä sivu voi olla yksityinen. Saatat nähdä sen <a href='%s'>kirjautumalla sisään</a>.",
|
||||
"page-not-found": "Sivua ei löytynyt.",
|
||||
"password": "Salasana",
|
||||
"paste-or-dragdrop": "liittääksesi, tai vedä & pudota kuvatiedosto siihen (vain kuva)",
|
||||
@@ -407,7 +407,7 @@
|
||||
"remove-cover": "Poista kansi",
|
||||
"remove-from-board": "Poista taululta",
|
||||
"remove-label": "Poista tunniste",
|
||||
"listDeletePopup-title": "Poista lista ?",
|
||||
"listDeletePopup-title": "Poista lista?",
|
||||
"remove-member": "Poista jäsen",
|
||||
"remove-member-from-card": "Poista kortilta",
|
||||
"remove-member-pop": "Poista __name__ (__username__) taululta __boardTitle__? Jäsen poistetaan kaikilta taulun korteilta. Heille lähetetään ilmoitus.",
|
||||
@@ -419,7 +419,7 @@
|
||||
"search": "Etsi",
|
||||
"rules": "Säännöt",
|
||||
"search-cards": "Etsi korttien otsikoista ja kuvauksista tällä taululla",
|
||||
"search-example": "Teksti jota etsitään?",
|
||||
"search-example": "Etsittävä teksti?",
|
||||
"select-color": "Valitse väri",
|
||||
"set-wip-limit-value": "Aseta tämän listan tehtävien enimmäismäärä",
|
||||
"setWipLimitPopup-title": "Aseta WIP-raja",
|
||||
@@ -429,9 +429,9 @@
|
||||
"shortcut-clear-filters": "Poista kaikki suodattimet",
|
||||
"shortcut-close-dialog": "Sulje valintaikkuna",
|
||||
"shortcut-filter-my-cards": "Suodata korttini",
|
||||
"shortcut-show-shortcuts": "Tuo esiin tämä pikavalinta lista",
|
||||
"shortcut-toggle-filterbar": "Muokkaa suodatus sivupalkin näkyvyyttä",
|
||||
"shortcut-toggle-sidebar": "Muokkaa taulu sivupalkin näkyvyyttä",
|
||||
"shortcut-show-shortcuts": "Tuo esiin tämä pikavalintalista",
|
||||
"shortcut-toggle-filterbar": "Muokkaa suodatussivupalkin näkyvyyttä",
|
||||
"shortcut-toggle-sidebar": "Muokkaa taulusivupalkin näkyvyyttä",
|
||||
"show-cards-minimum-count": "Näytä korttien lukumäärä jos lista sisältää enemmän kuin",
|
||||
"sidebar-open": "Avaa sivupalkki",
|
||||
"sidebar-close": "Sulje sivupalkki",
|
||||
@@ -446,8 +446,8 @@
|
||||
"spent-time-hours": "Käytetty aika (tuntia)",
|
||||
"overtime-hours": "Ylityö (tuntia)",
|
||||
"overtime": "Ylityö",
|
||||
"has-overtime-cards": "Sisältää ylityö kortteja",
|
||||
"has-spenttime-cards": "Sisältää käytetty aika kortteja",
|
||||
"has-overtime-cards": "Sisältää ylityökortteja",
|
||||
"has-spenttime-cards": "Sisältää käytetty aika -kortteja",
|
||||
"time": "Aika",
|
||||
"title": "Otsikko",
|
||||
"tracking": "Ilmoitukset",
|
||||
@@ -465,13 +465,13 @@
|
||||
"watch": "Seuraa",
|
||||
"watching": "Seurataan",
|
||||
"watching-info": "Sinulle ilmoitetaan tämän taulun muutoksista",
|
||||
"welcome-board": "Tervetuloa taulu",
|
||||
"welcome-board": "Tervetuloa-taulu",
|
||||
"welcome-swimlane": "Merkkipaalu 1",
|
||||
"welcome-list1": "Perusasiat",
|
||||
"welcome-list2": "Edistynyt",
|
||||
"card-templates-swimlane": "Kortti mallit",
|
||||
"list-templates-swimlane": "Lista mallit",
|
||||
"board-templates-swimlane": "Taulu mallit",
|
||||
"card-templates-swimlane": "Korttimallit",
|
||||
"list-templates-swimlane": "Listamallit",
|
||||
"board-templates-swimlane": "Taulumallit",
|
||||
"what-to-do": "Mitä haluat tehdä?",
|
||||
"wipLimitErrorPopup-title": "Virheellinen WIP-raja",
|
||||
"wipLimitErrorPopup-dialog-pt1": "Tässä listassa olevien tehtävien määrä on korkeampi kuin asettamasi WIP-raja.",
|
||||
@@ -480,36 +480,36 @@
|
||||
"settings": "Asetukset",
|
||||
"people": "Ihmiset",
|
||||
"registration": "Rekisteröinti",
|
||||
"disable-self-registration": "Poista käytöstä itse-rekisteröityminen",
|
||||
"disable-self-registration": "Poista käytöstä itserekisteröityminen",
|
||||
"invite": "Kutsu",
|
||||
"invite-people": "Kutsu ihmisiä",
|
||||
"to-boards": "Taulu(i)lle",
|
||||
"email-addresses": "Sähköpostiosoite",
|
||||
"smtp-host-description": "SMTP palvelimen osoite jolla sähköpostit lähetetään.",
|
||||
"smtp-port-description": "Portti jota STMP palvelimesi käyttää lähteville sähköposteille.",
|
||||
"smtp-tls-description": "Ota käyttöön TLS tuki SMTP palvelimelle",
|
||||
"smtp-host": "SMTP isäntä",
|
||||
"smtp-port": "SMTP portti",
|
||||
"smtp-host-description": "SMTP-palvelimen osoite jolla sähköpostit lähetetään.",
|
||||
"smtp-port-description": "STMP-palvelimesi käyttämä lähteville sähköposteille tarkoitettu portti.",
|
||||
"smtp-tls-description": "Ota käyttöön TLS-tuki SMTP-palvelimelle",
|
||||
"smtp-host": "SMTP-isäntä",
|
||||
"smtp-port": "SMTP-portti",
|
||||
"smtp-username": "Käyttäjätunnus",
|
||||
"smtp-password": "Salasana",
|
||||
"smtp-tls": "TLS tuki",
|
||||
"smtp-tls": "TLS-tuki",
|
||||
"send-from": "Lähettäjä",
|
||||
"send-smtp-test": "Lähetä testi sähköposti itsellesi",
|
||||
"send-smtp-test": "Lähetä testisähköposti itsellesi",
|
||||
"invitation-code": "Kutsukoodi",
|
||||
"email-invite-register-subject": "__inviter__ lähetti sinulle kutsun",
|
||||
"email-invite-register-text": "Hei __user__,\n\n__inviter__ kutsuu sinut mukaan kanban taulun käyttöön.\n\nOle hyvä ja seuraa allaolevaa linkkiä:\n__url__\n\nJa kutsukoodisi on: __icode__\n\nKiitos.",
|
||||
"email-smtp-test-subject": "SMTP testi sähköposti",
|
||||
"email-invite-register-text": "Hei __user__,\n\n__inviter__ kutsuu sinut mukaan kanban-taulun käyttöön.\n\nOle hyvä ja seuraa alla olevaa linkkiä:\n__url__\n\nKutsukoodisi on: __icode__\n\nKiitos.",
|
||||
"email-smtp-test-subject": "SMTP-testisähköposti",
|
||||
"email-smtp-test-text": "Olet onnistuneesti lähettänyt sähköpostin",
|
||||
"error-invitation-code-not-exist": "Kutsukoodi ei ole olemassa",
|
||||
"error-invitation-code-not-exist": "Kutsukoodia ei ole olemassa",
|
||||
"error-notAuthorized": "Sinulla ei ole oikeutta tarkastella tätä sivua.",
|
||||
"outgoing-webhooks": "Lähtevät Webkoukut",
|
||||
"outgoingWebhooksPopup-title": "Lähtevät Webkoukut",
|
||||
"boardCardTitlePopup-title": "Kortin otsikko suodatin",
|
||||
"boardCardTitlePopup-title": "Kortin otsikkosuodatin",
|
||||
"new-outgoing-webhook": "Uusi lähtevä Webkoukku",
|
||||
"no-name": "(Tuntematon)",
|
||||
"Node_version": "Node versio",
|
||||
"Node_version": "Node-versio",
|
||||
"OS_Arch": "Käyttöjärjestelmän arkkitehtuuri",
|
||||
"OS_Cpus": "Käyttöjärjestelmän CPU määrä",
|
||||
"OS_Cpus": "Käyttöjärjestelmän CPU-määrä",
|
||||
"OS_Freemem": "Käyttöjärjestelmän vapaa muisti",
|
||||
"OS_Loadavg": "Käyttöjärjestelmän kuorman keskiarvo",
|
||||
"OS_Platform": "Käyttöjärjestelmäalusta",
|
||||
@@ -548,13 +548,13 @@
|
||||
"delete-board-confirm-popup": "Kaikki listat, kortit, tunnisteet ja toimet poistetaan ja et pysty palauttamaan taulun sisältöä. Tätä ei voi peruuttaa.",
|
||||
"boardDeletePopup-title": "Poista taulu?",
|
||||
"delete-board": "Poista taulu",
|
||||
"default-subtasks-board": "Alitehtävät __board__ taululle",
|
||||
"default-subtasks-board": "Alitehtävät taululle __board__",
|
||||
"default": "Oletus",
|
||||
"queue": "Jono",
|
||||
"subtask-settings": "Alitehtävä asetukset",
|
||||
"boardSubtaskSettingsPopup-title": "Taulu alitehtävien asetukset",
|
||||
"subtask-settings": "Alitehtävä-asetukset",
|
||||
"boardSubtaskSettingsPopup-title": "Taulualitehtävien asetukset",
|
||||
"show-subtasks-field": "Korteilla voi olla alitehtäviä",
|
||||
"deposit-subtasks-board": "Tallenta alitehtävät tälle taululle:",
|
||||
"deposit-subtasks-board": "Talleta alitehtävät tälle taululle:",
|
||||
"deposit-subtasks-list": "Laskeutumislista alatehtäville tallennettu tänne:",
|
||||
"show-parent-in-minicard": "Näytä ylätehtävä minikortilla:",
|
||||
"prefix-with-full-path": "Etuliite koko polulla",
|
||||
@@ -562,7 +562,7 @@
|
||||
"subtext-with-full-path": "Aliteksti koko polulla",
|
||||
"subtext-with-parent": "Aliteksti ylätehtävällä",
|
||||
"change-card-parent": "Muuta kortin ylätehtävää",
|
||||
"parent-card": "Ylätehtävä kortti",
|
||||
"parent-card": "Ylätehtäväkortti",
|
||||
"source-board": "Lähdetaulu",
|
||||
"no-parent": "Älä näytä ylätehtävää",
|
||||
"activity-added-label": "lisätty tunniste '%s' kohteeseen %s",
|
||||
@@ -576,7 +576,7 @@
|
||||
"r-rule": "Sääntö",
|
||||
"r-add-trigger": "Lisää liipaisin",
|
||||
"r-add-action": "Lisää toimi",
|
||||
"r-board-rules": "Taulu säännöt",
|
||||
"r-board-rules": "Taulusäännöt",
|
||||
"r-add-rule": "Lisää sääntö",
|
||||
"r-view-rule": "Näytä sääntö",
|
||||
"r-delete-rule": "Poista sääntö",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Palautettu Arkistosta",
|
||||
"r-a-card": "kortti",
|
||||
"r-when-a-label-is": "Kun tunniste on",
|
||||
"r-when-the-label-is": "Kun tunniste on",
|
||||
"r-when-the-label": "Kun tunniste on",
|
||||
"r-list-name": "listan nimi",
|
||||
"r-when-a-member": "Kun jäsen on",
|
||||
"r-when-the-member": "Kun käyttäjä",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Huom: jätä kenttä tyhjäksi täsmätäksesi jokaiseen mahdolliseen arvoon.",
|
||||
"r-checklist-note": "Huom: tarkistuslistan kohteet täytyy kirjoittaa pilkulla eroteltuina.",
|
||||
"r-when-a-card-is-moved": "Kun kortti on siirretty toiseen listaan",
|
||||
"r-set": "Aseta",
|
||||
"r-update": "Päivitä",
|
||||
"r-datefield": "päivämäärä kenttä",
|
||||
"r-df-start-at": "alkaa",
|
||||
"r-df-due-at": "erääntyy",
|
||||
"r-df-end-at": "loppuu",
|
||||
"r-df-received-at": "vastaanotettu",
|
||||
"r-to-current-datetime": "nykyiseen päivään/aikaan",
|
||||
"r-remove-value-from": "Poista arvo kohteesta",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
@@ -682,10 +691,10 @@
|
||||
"error-undefined": "Jotain meni pieleen",
|
||||
"error-ldap-login": "Virhe tapahtui yrittäessä kirjautua sisään",
|
||||
"display-authentication-method": "Näytä kirjautumistapa",
|
||||
"default-authentication-method": "Oletus kirjautumistapa",
|
||||
"default-authentication-method": "Oletuskirjautumistapa",
|
||||
"duplicate-board": "Tee kaksoiskappale taulusta",
|
||||
"people-number": "Ihmisten määrä on:",
|
||||
"swimlaneDeletePopup-title": "Poista Swimlane ?",
|
||||
"swimlaneDeletePopup-title": "Poista Swimlane?",
|
||||
"swimlane-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja swimlanen poistaminen on lopullista. Tätä ei pysty peruuttamaan.",
|
||||
"restore-all": "Palauta kaikki",
|
||||
"delete-all": "Poista kaikki",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restauré depuis l'Archive",
|
||||
"r-a-card": "carte",
|
||||
"r-when-a-label-is": "Quand une étiquette est",
|
||||
"r-when-the-label-is": "Quand l'étiquette est",
|
||||
"r-when-the-label": "Quand l'étiquette est",
|
||||
"r-list-name": "Nom de la liste",
|
||||
"r-when-a-member": "Quand un participant est",
|
||||
"r-when-the-member": "Quand le participant",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note : laisser le champ vide pour faire correspondre avec toutes les valeurs possibles.",
|
||||
"r-checklist-note": "Note : les items de la checklist doivent être séparés par des virgules.",
|
||||
"r-when-a-card-is-moved": "Quand une carte est déplacée vers une autre liste",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+14
-5
@@ -213,7 +213,7 @@
|
||||
"comment-placeholder": "כתיבת הערה",
|
||||
"comment-only": "הערה בלבד",
|
||||
"comment-only-desc": "ניתן להגיב על כרטיסים בלבד.",
|
||||
"no-comments": " אין הערות",
|
||||
"no-comments": "אין הערות",
|
||||
"no-comments-desc": "לא ניתן לצפות בתגובות ובפעילויות.",
|
||||
"computer": "מחשב",
|
||||
"confirm-subtask-delete-dialog": "למחוק את תת המשימה?",
|
||||
@@ -371,7 +371,7 @@
|
||||
"move-selection": "העברת הבחירה",
|
||||
"moveCardPopup-title": "העברת כרטיס",
|
||||
"moveCardToBottom-title": "העברה לתחתית הרשימה",
|
||||
"moveCardToTop-title": "העברה לראש הרשימה ",
|
||||
"moveCardToTop-title": "העברה לראש הרשימה",
|
||||
"moveSelectionPopup-title": "העברת בחירה",
|
||||
"multi-selection": "בחירה מרובה",
|
||||
"multi-selection-on": "בחירה מרובה פועלת",
|
||||
@@ -497,7 +497,7 @@
|
||||
"send-smtp-test": "שליחת דוא״ל בדיקה לעצמך",
|
||||
"invitation-code": "קוד הזמנה",
|
||||
"email-invite-register-subject": "נשלחה אליך הזמנה מאת __inviter__",
|
||||
"email-invite-register-text": " __user__, יקר/ה\n\n__inviter__ מזמין/ה אתכם לשיתוף פעולה בלוח הקנבן.\n\nאנא לחצו על הקישור הבא:\n__url__\n\nקוד ההזמנה הוא: __icode__\n\nתודה.",
|
||||
"email-invite-register-text": "__user__, יקר/ה\n\n__inviter__ מזמין/ה אתכם לשיתוף פעולה בלוח הקנבן.\n\nאנא לחצו על הקישור הבא:\n__url__\n\nקוד ההזמנה הוא: __icode__\n\nתודה.",
|
||||
"email-smtp-test-subject": "דוא״ל לבדיקת SMTP",
|
||||
"email-smtp-test-text": "שלחת הודעת דוא״ל בהצלחה",
|
||||
"error-invitation-code-not-exist": "קוד ההזמנה אינו קיים",
|
||||
@@ -511,7 +511,7 @@
|
||||
"OS_Arch": "ארכיטקטורת מערכת הפעלה",
|
||||
"OS_Cpus": "מספר מעבדים",
|
||||
"OS_Freemem": "זיכרון (RAM) פנוי",
|
||||
"OS_Loadavg": "עומס ממוצע ",
|
||||
"OS_Loadavg": "עומס ממוצע",
|
||||
"OS_Platform": "מערכת הפעלה",
|
||||
"OS_Release": "גרסת מערכת הפעלה",
|
||||
"OS_Totalmem": "סך כל הזיכרון (RAM)",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "הוחזר מהארכיון",
|
||||
"r-a-card": "כרטיס",
|
||||
"r-when-a-label-is": "כאשר תווית",
|
||||
"r-when-the-label-is": "כאשר התווית היא",
|
||||
"r-when-the-label": "כאשר התווית היא",
|
||||
"r-list-name": "שם הרשימה",
|
||||
"r-when-a-member": "כאשר חבר הוא",
|
||||
"r-when-the-member": "כאשר חבר",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "לתשומת לבך: ניתן להשאיר את השדה ריק כדי ללכוד כל ערך אפשרי.",
|
||||
"r-checklist-note": "לתשומת לבך: את פריטי רשימת הביצוע יש לכתוב בתצורת רשימה של ערכים המופרדים בפסיקים.",
|
||||
"r-when-a-card-is-moved": "כאשר כרטיס מועבר לרשימה אחרת",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a कार्ड",
|
||||
"r-when-a-label-is": "जब एक नामपत्र है",
|
||||
"r-when-the-label-is": "जब नामपत्र है",
|
||||
"r-when-the-label": "जब नामपत्र है",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "जब एक सदस्य is",
|
||||
"r-when-the-member": "जब the सदस्य",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "जब एक कार्ड is स्थानांतरित तक another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Helyreállítva az archívumból",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "Amikor egy kártya másik listába kerül",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+24
-15
@@ -56,7 +56,7 @@
|
||||
"activity-sent": "inviato %s a %s",
|
||||
"activity-unjoined": "ha abbandonato %s",
|
||||
"activity-subtask-added": "aggiunto il sottocompito a 1%s",
|
||||
"activity-checked-item": " selezionata %s nella checklist %s di %s",
|
||||
"activity-checked-item": "selezionata %s nella checklist %s di %s",
|
||||
"activity-unchecked-item": "disattivato %s nella checklist %s di %s",
|
||||
"activity-checklist-added": "aggiunta checklist a %s",
|
||||
"activity-checklist-removed": "È stata rimossa una checklist da%s",
|
||||
@@ -348,7 +348,7 @@
|
||||
"leaveBoardPopup-title": "Abbandona Bacheca?",
|
||||
"link-card": "Link a questa scheda",
|
||||
"list-archive-cards": "Sposta tutte le schede in questo elenco nell'Archivio",
|
||||
"list-archive-cards-pop": "Questo rimuoverà tutte le schede nell'elenco dalla bacheca. Per vedere le schede nell'archivio e portarle dov'erano nella bacheca, clicca su \"Menu\" > \"Archivio\". ",
|
||||
"list-archive-cards-pop": "Questo rimuoverà tutte le schede nell'elenco dalla bacheca. Per vedere le schede nell'archivio e portarle dov'erano nella bacheca, clicca su \"Menu\" > \"Archivio\".",
|
||||
"list-move-cards": "Sposta tutte le schede in questa lista",
|
||||
"list-select-cards": "Selezione tutte le schede in questa lista",
|
||||
"set-color-list": "Imposta un colore",
|
||||
@@ -473,9 +473,9 @@
|
||||
"list-templates-swimlane": "Elenca i template",
|
||||
"board-templates-swimlane": "Bacheca dei template",
|
||||
"what-to-do": "Cosa vuoi fare?",
|
||||
"wipLimitErrorPopup-title": "Limite work in progress non valido. ",
|
||||
"wipLimitErrorPopup-dialog-pt1": "Il numero di compiti in questa lista è maggiore del limite di work in progress che hai definito in precedenza. ",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Per favore, sposta alcuni dei compiti fuori da questa lista, oppure imposta un limite di work in progress più alto. ",
|
||||
"wipLimitErrorPopup-title": "Limite work in progress non valido.",
|
||||
"wipLimitErrorPopup-dialog-pt1": "Il numero di compiti in questa lista è maggiore del limite di work in progress che hai definito in precedenza.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Per favore, sposta alcuni dei compiti fuori da questa lista, oppure imposta un limite di work in progress più alto.",
|
||||
"admin-panel": "Pannello dell'Amministratore",
|
||||
"settings": "Impostazioni",
|
||||
"people": "Persone",
|
||||
@@ -510,13 +510,13 @@
|
||||
"Node_version": "Versione di Node",
|
||||
"OS_Arch": "Architettura del sistema operativo",
|
||||
"OS_Cpus": "Conteggio della CPU del sistema operativo",
|
||||
"OS_Freemem": "Memoria libera del sistema operativo ",
|
||||
"OS_Loadavg": "Carico medio del sistema operativo ",
|
||||
"OS_Freemem": "Memoria libera del sistema operativo",
|
||||
"OS_Loadavg": "Carico medio del sistema operativo",
|
||||
"OS_Platform": "Piattaforma del sistema operativo",
|
||||
"OS_Release": "Versione di rilascio del sistema operativo",
|
||||
"OS_Totalmem": "Memoria totale del sistema operativo ",
|
||||
"OS_Type": "Tipo di sistema operativo ",
|
||||
"OS_Uptime": "Tempo di attività del sistema operativo. ",
|
||||
"OS_Totalmem": "Memoria totale del sistema operativo",
|
||||
"OS_Type": "Tipo di sistema operativo",
|
||||
"OS_Uptime": "Tempo di attività del sistema operativo.",
|
||||
"days": "giorni",
|
||||
"hours": "ore",
|
||||
"minutes": "minuti",
|
||||
@@ -585,18 +585,18 @@
|
||||
"r-when-a-card": "Quando una scheda",
|
||||
"r-is": "è",
|
||||
"r-is-moved": "viene spostata",
|
||||
"r-added-to": "Aggiunto/a a ",
|
||||
"r-added-to": "Aggiunto/a a",
|
||||
"r-removed-from": "Rimosso da",
|
||||
"r-the-board": "La bacheca",
|
||||
"r-list": "lista",
|
||||
"set-filter": "Imposta un filtro",
|
||||
"r-moved-to": "Spostato/a a ",
|
||||
"r-moved-to": "Spostato/a a",
|
||||
"r-moved-from": "Spostato/a da",
|
||||
"r-archived": "Spostato/a nell'archivio",
|
||||
"r-unarchived": "Ripristinato/a dall'archivio",
|
||||
"r-a-card": "una scheda",
|
||||
"r-when-a-label-is": "Quando un'etichetta viene",
|
||||
"r-when-the-label-is": "Quando l'etichetta viene",
|
||||
"r-when-the-label": "Quando l'etichetta viene",
|
||||
"r-list-name": "Nome dell'elenco",
|
||||
"r-when-a-member": "Quando un membro viene",
|
||||
"r-when-the-member": "Quando un membro viene",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Nota: Lascia un campo vuoto per abbinare ogni possibile valore",
|
||||
"r-checklist-note": "Nota: Gli elementi della checklist devono essere scritti come valori separati dalla virgola",
|
||||
"r-when-a-card-is-moved": "Quando una scheda viene spostata su un'altra lista",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "Oauth2",
|
||||
"cas": "CAS",
|
||||
@@ -685,9 +694,9 @@
|
||||
"default-authentication-method": "Metodo di autenticazione predefinito",
|
||||
"duplicate-board": "Duplica bacheca",
|
||||
"people-number": "Il numero di persone è:",
|
||||
"swimlaneDeletePopup-title": "Delete Swimlane ?",
|
||||
"swimlaneDeletePopup-title": "Cancella diagramma swimlane ?",
|
||||
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
|
||||
"restore-all": "Restore all",
|
||||
"delete-all": "Delete all",
|
||||
"delete-all": "Cancella tutto",
|
||||
"loading": "Loading, please wait."
|
||||
}
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "カードが別のリストに移動したとき",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Възстановено от Архива",
|
||||
"r-a-card": "карта",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+12
-3
@@ -42,7 +42,7 @@
|
||||
"activities": "Ostatnia aktywność",
|
||||
"activity": "Aktywność",
|
||||
"activity-added": "dodał(a) %s z %s",
|
||||
"activity-archived": "%s została przeniesiona do Archiwum ",
|
||||
"activity-archived": "%s została przeniesiona do Archiwum",
|
||||
"activity-attached": "załączono %s z %s",
|
||||
"activity-created": "utworzono %s",
|
||||
"activity-customfield-created": "utworzono niestandardowe pole %s",
|
||||
@@ -139,7 +139,7 @@
|
||||
"card-delete-notice": "Usunięcie jest trwałe. Stracisz wszystkie akcje powiązane z tą kartą.",
|
||||
"card-delete-pop": "Wszystkie akcje będą usunięte z widoku aktywności, nie można będzie ponownie otworzyć karty. Usunięcie jest nieodwracalne.",
|
||||
"card-delete-suggest-archive": "Możesz przenieść kartę do Archiwum, a następnie usunąć ją z tablicy i zachować ją w Aktywności.",
|
||||
"card-due": "Ukończenie\n",
|
||||
"card-due": "Ukończenie",
|
||||
"card-due-on": "Ukończenie w",
|
||||
"card-spent": "Spędzony czas",
|
||||
"card-edit-attachments": "Edytuj załączniki",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Przywrócone z Archiwum",
|
||||
"r-a-card": "karta",
|
||||
"r-when-a-label-is": "Gdy etykieta jest",
|
||||
"r-when-the-label-is": "Gdy etykieta jest",
|
||||
"r-when-the-label": "Gdy etykieta jest",
|
||||
"r-list-name": "nazwa listy",
|
||||
"r-when-a-member": "Gdy członek jest",
|
||||
"r-when-the-member": "Gdy członek jest",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Uwaga: pozostaw pole puste, aby każda wartość była brana pod uwagę.",
|
||||
"r-checklist-note": "Uwaga: wartości elementów listy muszą być oddzielone przecinkami.",
|
||||
"r-when-a-card-is-moved": "Gdy karta jest przeniesiona do innej listy",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+13
-4
@@ -31,7 +31,7 @@
|
||||
"act-importCard": "importado cartão __card__ para lista __list__ em raia __swimlane__ no quadro __board__",
|
||||
"act-importList": "importada lista __list__ para raia __swimlane__ no quadro __board__",
|
||||
"act-joinMember": "adicionado membro __member__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
|
||||
"act-moveCard": "movido cartão __card__ do quadro __board__ da raia __oldSwimlane__ da lista __oldList__ para a raia __swimlane__ na lista __list__ ",
|
||||
"act-moveCard": "movido cartão __card__ do quadro __board__ da raia __oldSwimlane__ da lista __oldList__ para a raia __swimlane__ na lista __list__",
|
||||
"act-moveCardToOtherBoard": "movido cartão __card__ da lista __oldList__ em raia __oldSwimlane__ no quadro __oldBoard__ para lista __list__ em raia __swimlane__ no quadro __board__",
|
||||
"act-removeBoardMember": "removido membro __member__ do quadro __board__",
|
||||
"act-restoredCard": "restaurado cartão __card__ a lista __list__ em raia __swimlane__ no quadro __board__",
|
||||
@@ -354,7 +354,7 @@
|
||||
"set-color-list": "Definir Cor",
|
||||
"listActionPopup-title": "Listar Ações",
|
||||
"swimlaneActionPopup-title": "Ações de Raia",
|
||||
"swimlaneAddPopup-title": "Adicionar uma Raia abaixo ",
|
||||
"swimlaneAddPopup-title": "Adicionar uma Raia abaixo",
|
||||
"listImportCardPopup-title": "Importe um cartão do Trello",
|
||||
"listMorePopup-title": "Mais",
|
||||
"link-list": "Vincular a esta lista",
|
||||
@@ -585,7 +585,7 @@
|
||||
"r-when-a-card": "Quando um cartão",
|
||||
"r-is": "é",
|
||||
"r-is-moved": "é movido",
|
||||
"r-added-to": "adicionado à ",
|
||||
"r-added-to": "adicionado à",
|
||||
"r-removed-from": "Removido de",
|
||||
"r-the-board": "o quadro",
|
||||
"r-list": "lista",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restaurado do Arquivo-morto",
|
||||
"r-a-card": "um cartão",
|
||||
"r-when-a-label-is": "Quando uma etiqueta é",
|
||||
"r-when-the-label-is": "Quando a etiqueta é",
|
||||
"r-when-the-label": "Quando a etiqueta é",
|
||||
"r-list-name": "listar nome",
|
||||
"r-when-a-member": "Quando um membro é",
|
||||
"r-when-the-member": "Quando o membro",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Nota: deixe o campo vazio para corresponder à todos os valores possíveis",
|
||||
"r-checklist-note": "Nota: itens de Checklists devem ser escritos separados por vírgulas",
|
||||
"r-when-a-card-is-moved": "Quando um cartão é movido de outra lista",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+325
-316
@@ -1,160 +1,160 @@
|
||||
{
|
||||
"accept": "Aceitar",
|
||||
"act-activity-notify": "Notificação de Actividade",
|
||||
"act-addAttachment": "adicionado anexo __attachment__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-deleteAttachment": "excluido anexo __attachment__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-addSubtask": "adicionada sub-tarefa __subtask__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-addLabel": "Adicionada etiqueta __label__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-addedLabel": "Adicionada etiqueta __label__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-removeLabel": "Removida etiqueta __label__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-removedLabel": "Removida etiqueta __label__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-addChecklist": "adicionada lista de verificação __checklist__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-addChecklistItem": "adicionado o item __checklistItem__ a lista de verificação__checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-removeChecklist": "emovida a lista de verificação __checklist__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-removeChecklistItem": "removido item __checklistItem__ da lista de verificação __checkList__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-checkedItem": "marcado __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-uncheckedItem": "desmarcado __checklistItem__ na lista __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-completeChecklist": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-uncompleteChecklist": "lista de verificação incompleta __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-createBoard": "criado quadro __board__",
|
||||
"act-createSwimlane": "criada a pista __swimlane__ no quadro __board__",
|
||||
"act-createCard": "criado cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-createCustomField": "criado campo personalizado __customField__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-createList": "adicionada lista __list__ ao quadro __board__",
|
||||
"act-addBoardMember": "adicionado membro __member__ ao quadro __board__",
|
||||
"act-archivedBoard": "Quadro __board__ foi Arquivado",
|
||||
"act-archivedCard": "Cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__ foi Arquivado",
|
||||
"act-archivedList": "Lista __list__ em pista __swimlane__ no quadro __board__ foi Arquivada",
|
||||
"act-archivedSwimlane": "Pista __swimlane__ no quadro __board__ foi Arquivada",
|
||||
"act-importBoard": "importado quadro __board__",
|
||||
"act-importCard": "importado cartão __card__ para lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-importList": "importada lista __list__ para pista __swimlane__ no quadro __board__",
|
||||
"act-joinMember": "adicionado membro __member__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-moveCard": "movido cartão __card__ do quadro __board__ da pista __oldSwimlane__ da lista __oldList__ para a pista __swimlane__ na lista __list__",
|
||||
"act-moveCardToOtherBoard": "movido cartão __card__ da lista __oldList__ em pista __oldSwimlane__ no quadro __oldBoard__ para lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-removeBoardMember": "removido membro __member__ do quadro __board__",
|
||||
"act-restoredCard": "restaurado cartão __card__ a lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-unjoinMember": "removido membro __member__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"act-addAttachment": "adicionou o anexo __attachment__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-deleteAttachment": "apagou o anexo __attachment__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-addSubtask": "adicionou a sub-tarefa __subtask__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-addLabel": "Adicionou a etiqueta __label__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-addedLabel": "Adicionou a etiqueta __label__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-removeLabel": "Removeu a etiqueta __label__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-removedLabel": "Removeu a etiqueta __label__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-addChecklist": "adicionoua lista de verificação __checklist__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-addChecklistItem": "adicionou o item __checklistItem__ à lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-removeChecklist": "removeu a lista de verificação __checklist__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-removeChecklistItem": "removeu o item __checklistItem__ da lista de verificação __checkList__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-checkedItem": "marcou __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-uncheckedItem": "desmarcou __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-completeChecklist": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-uncompleteChecklist": "descompletou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-createBoard": "criou o quadro __board__",
|
||||
"act-createSwimlane": "criou a pista __swimlane__ no quadro __board__",
|
||||
"act-createCard": "criou o cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-createCustomField": "criou o campo personalizado __customField__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-createList": "adicionou a lista __list__ ao quadro __board__",
|
||||
"act-addBoardMember": "adicionou o membro __member__ ao quadro __board__",
|
||||
"act-archivedBoard": "O quadro __board__ foi movido para o Arquivo",
|
||||
"act-archivedCard": "O cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__ foi movido para o Arquivo",
|
||||
"act-archivedList": "A lista __list__ na pista __swimlane__ no quadro __board__ foi movida para o Arquivo",
|
||||
"act-archivedSwimlane": "A pista __swimlane__ no quadro __board__ foi movida para o Arquivo",
|
||||
"act-importBoard": "importou o quadro __board__",
|
||||
"act-importCard": "importou o cartão __card__ para a lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-importList": "importou a lista __list__ para pista __swimlane__ no quadro __board__",
|
||||
"act-joinMember": "adicionou o membro __member__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-moveCard": "moveu o cartão __card__ do quadro __board__ da pista __oldSwimlane__ da lista __oldList__ para a pista __swimlane__ na lista __list__",
|
||||
"act-moveCardToOtherBoard": "moveuo cartão __card__ da lista __oldList__ na pista __oldSwimlane__ no quadro __oldBoard__ para a lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-removeBoardMember": "removeuo membro __member__ do quadro __board__",
|
||||
"act-restoredCard": "restaurou o cartão __card__ para a lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-unjoinMember": "removeu o membro __member__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"act-withBoardTitle": "__board__",
|
||||
"act-withCardTitle": "[__board__] __card__",
|
||||
"actions": "Ações",
|
||||
"activities": "Atividades",
|
||||
"activity": "Atividade",
|
||||
"actions": "Acções",
|
||||
"activities": "Actividades",
|
||||
"activity": "Actividade",
|
||||
"activity-added": "adicionou %s a %s",
|
||||
"activity-archived": "%s foi Arquivado",
|
||||
"activity-archived": "%s foi movido para o Arquivo",
|
||||
"activity-attached": "anexou %s a %s",
|
||||
"activity-created": "criou %s",
|
||||
"activity-customfield-created": "criado campo personalizado %s",
|
||||
"activity-customfield-created": "criado o campo personalizado %s",
|
||||
"activity-excluded": "excluiu %s de %s",
|
||||
"activity-imported": "importado %s em %s de %s",
|
||||
"activity-imported-board": "importado %s de %s",
|
||||
"activity-imported": "importou %s para %s de %s",
|
||||
"activity-imported-board": "importou %s de %s",
|
||||
"activity-joined": "juntou-se a %s",
|
||||
"activity-moved": "moveu %s de %s para %s",
|
||||
"activity-on": "em %s",
|
||||
"activity-removed": "removeu %s de %s",
|
||||
"activity-sent": "enviou %s de %s",
|
||||
"activity-sent": "enviou %s para %s",
|
||||
"activity-unjoined": "saiu de %s",
|
||||
"activity-subtask-added": "Adicionar sub-tarefa à",
|
||||
"activity-checked-item": "marcado %s na lista de verificação %s de %s",
|
||||
"activity-unchecked-item": "desmarcado %s na lista de verificação %s de %s",
|
||||
"activity-checklist-added": "Adicionada lista de verificação a %s",
|
||||
"activity-checklist-removed": "removida a lista de verificação de %s",
|
||||
"activity-checklist-completed": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"activity-checklist-uncompleted": "não-completada a lista de verificação %s de %s",
|
||||
"activity-checklist-item-added": "adicionado o item de lista de verificação para '%s' em %s",
|
||||
"activity-checklist-item-removed": "removida o item de lista de verificação de '%s' na %s",
|
||||
"add": "Novo",
|
||||
"activity-checked-item-card": "marcado %s na lista de verificação %s",
|
||||
"activity-unchecked-item-card": "desmarcado %s na lista de verificação %s",
|
||||
"activity-checklist-completed-card": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
|
||||
"activity-checklist-uncompleted-card": "não-completada a lista de verificação %s",
|
||||
"add-attachment": "Adicionar Anexos",
|
||||
"activity-subtask-added": "adicionou a sub-tarefa a",
|
||||
"activity-checked-item": "marcou %s na lista de verificação %s de %s",
|
||||
"activity-unchecked-item": "desmarcou %s na lista de verificação %s de %s",
|
||||
"activity-checklist-added": "adicionou a lista de verificação a %s",
|
||||
"activity-checklist-removed": "removeu a lista de verificação de %s",
|
||||
"activity-checklist-completed": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"activity-checklist-uncompleted": "descompletou a lista de verificação %s de %s",
|
||||
"activity-checklist-item-added": "adicionou o item a '%s' em %s",
|
||||
"activity-checklist-item-removed": "removeu o item de '%s' na %s",
|
||||
"add": "Adicionar",
|
||||
"activity-checked-item-card": "marcou %s na lista de verificação %s",
|
||||
"activity-unchecked-item-card": "desmarcou %s na lista de verificação %s",
|
||||
"activity-checklist-completed-card": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
|
||||
"activity-checklist-uncompleted-card": "descompletou a lista de verificação %s",
|
||||
"add-attachment": "Adicionar Anexo",
|
||||
"add-board": "Adicionar Quadro",
|
||||
"add-card": "Adicionar Cartão",
|
||||
"add-swimlane": "Adicionar Pista",
|
||||
"add-subtask": "Adicionar sub-tarefa",
|
||||
"add-checklist": "Adicionar lista de verificação",
|
||||
"add-subtask": "Adicionar Sub-tarefa",
|
||||
"add-checklist": "Adicionar Lista de Verificação",
|
||||
"add-checklist-item": "Adicionar um item à lista de verificação",
|
||||
"add-cover": "Adicionar Capa",
|
||||
"add-label": "Adicionar Etiqueta",
|
||||
"add-list": "Adicionar Lista",
|
||||
"add-members": "Adicionar Membros",
|
||||
"added": "Criado",
|
||||
"added": "Adicionado",
|
||||
"addMemberPopup-title": "Membros",
|
||||
"admin": "Administrador",
|
||||
"admin-desc": "Pode ver e editar cartões, remover membros e alterar configurações do quadro.",
|
||||
"admin-announcement": "Anúncio",
|
||||
"admin-announcement-active": "Anúncio ativo em todo o sistema",
|
||||
"admin-announcement-active": "Anúncio Activo em Todo o Sistema",
|
||||
"admin-announcement-title": "Anúncio do Administrador",
|
||||
"all-boards": "Todos os quadros",
|
||||
"and-n-other-card": "E __count__ outro cartão",
|
||||
"and-n-other-card_plural": "E __count__ outros cartões",
|
||||
"apply": "Aplicar",
|
||||
"app-is-offline": "A carregar, por favor espere. Atualizar a página causará perda de dados. Se a carga não funcionar, por favor verifique se o servidor não caiu.",
|
||||
"app-is-offline": "A carregar, por favor aguarde. Actualizar a página causará perda de dados. Se o carregamento não funcionar, por favor verifique se o servidor não parou.",
|
||||
"archive": "Mover para o Arquivo",
|
||||
"archive-all": "Mover Tudo para o Arquivo",
|
||||
"archive-board": "Mover Quadro para o Arquivo",
|
||||
"archive-card": "Mover Cartão para o Arquivo",
|
||||
"archive-list": "Mover Lista para o Arquivo",
|
||||
"archive-swimlane": "Mover Pista para Arquivo",
|
||||
"archive-selection": "Mover seleção para o Arquivo",
|
||||
"archiveBoardPopup-title": "Mover Quadro para o Arquivo?",
|
||||
"archive-board": "Mover o Quadro para o Arquivo",
|
||||
"archive-card": "Mover o Cartão para o Arquivo",
|
||||
"archive-list": "Mover a Lista para o Arquivo",
|
||||
"archive-swimlane": "Mover a Pista para o Arquivo",
|
||||
"archive-selection": "Mover a selecção para o Arquivo",
|
||||
"archiveBoardPopup-title": "Mover o Quadro para o Arquivo?",
|
||||
"archived-items": "Arquivo",
|
||||
"archived-boards": "Quadros no Arquivo",
|
||||
"restore-board": "Restaurar Quadro",
|
||||
"no-archived-boards": "Sem Quadros no Arquivo.",
|
||||
"archives": "Arquivos",
|
||||
"archives": "Arquivo",
|
||||
"template": "Modelo",
|
||||
"templates": "Modelos",
|
||||
"assign-member": "Atribuir Membro",
|
||||
"attached": "anexado",
|
||||
"attachment": "Anexo",
|
||||
"attachment-delete-pop": "Excluir um anexo é permanente. Não será possível recuperá-lo.",
|
||||
"attachmentDeletePopup-title": "Excluir Anexo?",
|
||||
"attachment-delete-pop": "Apagar um anexo é permanente. Não será possível recuperá-lo.",
|
||||
"attachmentDeletePopup-title": "Apagar Anexo?",
|
||||
"attachments": "Anexos",
|
||||
"auto-watch": "Veja automaticamente os boards que são criados",
|
||||
"avatar-too-big": "O avatar é muito grande (70KB max)",
|
||||
"auto-watch": "Observar automaticamente os quadros quando são criados",
|
||||
"avatar-too-big": "O avatar é muito grande (70KB máx)",
|
||||
"back": "Voltar",
|
||||
"board-change-color": "Alterar cor",
|
||||
"board-nb-stars": "%s estrelas",
|
||||
"board-not-found": "Quadro não encontrado",
|
||||
"board-private-info": "Este quadro será <strong>privado</strong>.",
|
||||
"board-public-info": "Este quadro será <strong>público</strong>.",
|
||||
"boardChangeColorPopup-title": "Alterar Tela de Fundo",
|
||||
"boardChangeColorPopup-title": "Alterar Imagem de Fundo do Quadro",
|
||||
"boardChangeTitlePopup-title": "Renomear Quadro",
|
||||
"boardChangeVisibilityPopup-title": "Alterar Visibilidade",
|
||||
"boardChangeWatchPopup-title": "Alterar observação",
|
||||
"boardMenuPopup-title": "Configurações do quadro",
|
||||
"boardChangeWatchPopup-title": "Alterar Observação",
|
||||
"boardMenuPopup-title": "Configurações do Quadro",
|
||||
"boards": "Quadros",
|
||||
"board-view": "Visão de quadro",
|
||||
"board-view": "Visão do Quadro",
|
||||
"board-view-cal": "Calendário",
|
||||
"board-view-swimlanes": "Pistas",
|
||||
"board-view-lists": "Listas",
|
||||
"bucket-example": "\"Bucket List\", por exemplo",
|
||||
"bucket-example": "\"Lista de Desejos\", por exemplo",
|
||||
"cancel": "Cancelar",
|
||||
"card-archived": "Este cartão está Arquivado.",
|
||||
"board-archived": "Este quadro está Arquivado.",
|
||||
"card-comments-title": "Este cartão possui %s comentários.",
|
||||
"card-delete-notice": "A exclusão será permanente. Perderá todas as ações associadas a este cartão.",
|
||||
"card-delete-pop": "Todas as ações serão excluídas da lista de Atividades e não poderá reabrir o cartão. Não há como desfazer.",
|
||||
"card-archived": "Este cartão no Arquivo.",
|
||||
"board-archived": "Este quadro está no Arquivo.",
|
||||
"card-comments-title": "Este cartão possui %s comentário.",
|
||||
"card-delete-notice": "A remoção será permanente. Perderá todas as acções associadas a este cartão.",
|
||||
"card-delete-pop": "Todas as acções serão removidas do feed de Actividade e não poderá reabrir o cartão. Não há como desfazer.",
|
||||
"card-delete-suggest-archive": "Pode mover um cartão para o Arquivo para removê-lo do quadro e preservar a atividade.",
|
||||
"card-due": "Data fim",
|
||||
"card-due-on": "Finaliza em",
|
||||
"card-due": "Data limite",
|
||||
"card-due-on": "Data limite em",
|
||||
"card-spent": "Tempo Gasto",
|
||||
"card-edit-attachments": "Editar anexos",
|
||||
"card-edit-custom-fields": "Editar campos personalizados",
|
||||
"card-edit-labels": "Editar etiquetas",
|
||||
"card-edit-members": "Editar membros",
|
||||
"card-labels-title": "Alterar etiquetas do cartão.",
|
||||
"card-labels-title": "Alterar as etiquetas do cartão.",
|
||||
"card-members-title": "Acrescentar ou remover membros do quadro deste cartão.",
|
||||
"card-start": "Data início",
|
||||
"card-start-on": "Começa em",
|
||||
"card-start": "Data de início",
|
||||
"card-start-on": "Inicia em",
|
||||
"cardAttachmentsPopup-title": "Anexar a partir de",
|
||||
"cardCustomField-datePopup-title": "Mudar data",
|
||||
"cardCustomField-datePopup-title": "Alterar a data",
|
||||
"cardCustomFieldsPopup-title": "Editar campos personalizados",
|
||||
"cardDeletePopup-title": "Excluir Cartão?",
|
||||
"cardDetailsActionsPopup-title": "Ações do cartão",
|
||||
"cardDeletePopup-title": "Apagar Cartão?",
|
||||
"cardDetailsActionsPopup-title": "Acções do Cartão",
|
||||
"cardLabelsPopup-title": "Etiquetas",
|
||||
"cardMembersPopup-title": "Membros",
|
||||
"cardMorePopup-title": "Mais",
|
||||
@@ -163,25 +163,25 @@
|
||||
"cards-count": "Cartões",
|
||||
"casSignIn": "Entrar com CAS",
|
||||
"cardType-card": "Cartão",
|
||||
"cardType-linkedCard": "Cartão ligado",
|
||||
"cardType-linkedBoard": "Quadro ligado",
|
||||
"cardType-linkedCard": "Cartão Ligado",
|
||||
"cardType-linkedBoard": "Quadro Ligado",
|
||||
"change": "Alterar",
|
||||
"change-avatar": "Alterar Avatar",
|
||||
"change-password": "Alterar Senha",
|
||||
"change-permissions": "Alterar permissões",
|
||||
"change-settings": "Altera configurações",
|
||||
"changeAvatarPopup-title": "Alterar Avatar",
|
||||
"changeLanguagePopup-title": "Alterar Idioma",
|
||||
"changePasswordPopup-title": "Alterar Senha",
|
||||
"changePermissionsPopup-title": "Alterar Permissões",
|
||||
"changeSettingsPopup-title": "Altera configurações",
|
||||
"change-avatar": "Alterar o Avatar",
|
||||
"change-password": "Alterar a Senha",
|
||||
"change-permissions": "Alterar as permissões",
|
||||
"change-settings": "Alterar as Configurações",
|
||||
"changeAvatarPopup-title": "Alterar o Avatar",
|
||||
"changeLanguagePopup-title": "Alterar o Idioma",
|
||||
"changePasswordPopup-title": "Alterar a Senha",
|
||||
"changePermissionsPopup-title": "Alterar as Permissões",
|
||||
"changeSettingsPopup-title": "Alterar as Configurações",
|
||||
"subtasks": "Sub-tarefas",
|
||||
"checklists": "Listas de verificação",
|
||||
"click-to-star": "Marcar quadro como favorito.",
|
||||
"click-to-unstar": "Remover quadro dos favoritos.",
|
||||
"click-to-star": "Clique para marcar este quadro como favorito.",
|
||||
"click-to-unstar": "Clique para remover este quadro dos favoritos.",
|
||||
"clipboard": "Área de Transferência ou arraste e solte",
|
||||
"close": "Fechar",
|
||||
"close-board": "Fechar Quadro",
|
||||
"close-board": "Fechar o Quadro",
|
||||
"close-board-pop": "Poderá restaurar o quadro clicando no botão “Arquivo” a partir do cabeçalho do Início.",
|
||||
"color-black": "preto",
|
||||
"color-blue": "azul",
|
||||
@@ -209,105 +209,105 @@
|
||||
"color-white": "branco",
|
||||
"color-yellow": "amarelo",
|
||||
"unset-color": "Remover",
|
||||
"comment": "Comentário",
|
||||
"comment-placeholder": "Escrever Comentário",
|
||||
"comment-only": "Somente comentários",
|
||||
"comment": "Comentar",
|
||||
"comment-placeholder": "Escrever o Comentário",
|
||||
"comment-only": "Apenas comentários",
|
||||
"comment-only-desc": "Pode comentar apenas em cartões.",
|
||||
"no-comments": "Sem comentários",
|
||||
"no-comments-desc": "Sem visualização de comentários e atividades.",
|
||||
"no-comments-desc": "Não pode ver comentários nem actividades.",
|
||||
"computer": "Computador",
|
||||
"confirm-subtask-delete-dialog": "Tem certeza que deseja excluir a sub-tarefa?",
|
||||
"confirm-checklist-delete-dialog": "Tem certeza que quer excluir a lista de verificação?",
|
||||
"copy-card-link-to-clipboard": "Copiar link do cartão para a área de transferência",
|
||||
"confirm-subtask-delete-dialog": "Tem certeza que deseja apagar a sub-tarefa?",
|
||||
"confirm-checklist-delete-dialog": "Tem certeza que quer apagar a lista de verificação?",
|
||||
"copy-card-link-to-clipboard": "Copiar a ligação do cartão para a área de transferência",
|
||||
"linkCardPopup-title": "Ligar Cartão",
|
||||
"searchElementPopup-title": "Buscar",
|
||||
"searchElementPopup-title": "Procurar",
|
||||
"copyCardPopup-title": "Copiar o cartão",
|
||||
"copyChecklistToManyCardsPopup-title": "Copiar modelo de lista de verificação para vários cartões",
|
||||
"copyChecklistToManyCardsPopup-instructions": "Títulos e descrições do cartão de destino neste formato JSON",
|
||||
"copyChecklistToManyCardsPopup-title": "Copiar o Modelo de Lista de Verificação para Vários Cartões",
|
||||
"copyChecklistToManyCardsPopup-instructions": "Títulos e Descrições de Cartões de Destino neste formato JSON",
|
||||
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Título do primeiro cartão\", \"description\":\"Descrição do primeiro cartão\"}, {\"title\":\"Título do segundo cartão\",\"description\":\"Descrição do segundo cartão\"},{\"title\":\"Título do último cartão\",\"description\":\"Descrição do último cartão\"} ]",
|
||||
"create": "Criar",
|
||||
"createBoardPopup-title": "Criar Quadro",
|
||||
"chooseBoardSourcePopup-title": "Importar quadro",
|
||||
"createLabelPopup-title": "Criar Etiqueta",
|
||||
"createCustomField": "Criar campo",
|
||||
"createCustomFieldPopup-title": "Criar campo",
|
||||
"current": "atual",
|
||||
"custom-field-delete-pop": "Não existe desfazer. Isso irá excluir o campo personalizado de todos os cartões e destruir seu histórico",
|
||||
"custom-field-checkbox": "Caixa de seleção",
|
||||
"createCustomField": "Criar Campo",
|
||||
"createCustomFieldPopup-title": "Criar Campo",
|
||||
"current": "actual",
|
||||
"custom-field-delete-pop": "Não existe desfazer. Isto irá remover este campo personalizado de todos os cartões e destruir o seu histórico",
|
||||
"custom-field-checkbox": "Caixa de selecção",
|
||||
"custom-field-date": "Data",
|
||||
"custom-field-dropdown": "Lista suspensa",
|
||||
"custom-field-dropdown": "Lista Suspensa",
|
||||
"custom-field-dropdown-none": "(nada)",
|
||||
"custom-field-dropdown-options": "Lista de opções",
|
||||
"custom-field-dropdown-options": "Opções da Lista",
|
||||
"custom-field-dropdown-options-placeholder": "Pressione enter para adicionar mais opções",
|
||||
"custom-field-dropdown-unknown": "(desconhecido)",
|
||||
"custom-field-number": "Número",
|
||||
"custom-field-text": "Texto",
|
||||
"custom-fields": "Campos personalizados",
|
||||
"custom-fields": "Campos Personalizados",
|
||||
"date": "Data",
|
||||
"decline": "Rejeitar",
|
||||
"default-avatar": "Avatar padrão",
|
||||
"delete": "Excluir",
|
||||
"deleteCustomFieldPopup-title": "Excluir campo personalizado?",
|
||||
"deleteLabelPopup-title": "Excluir Etiqueta?",
|
||||
"default-avatar": "Avatar por omissão",
|
||||
"delete": "Apagar",
|
||||
"deleteCustomFieldPopup-title": "Apagar o Campo Personalizado?",
|
||||
"deleteLabelPopup-title": "Apagar a Etiqueta?",
|
||||
"description": "Descrição",
|
||||
"disambiguateMultiLabelPopup-title": "Desambiguar ações de etiquetas",
|
||||
"disambiguateMultiMemberPopup-title": "Desambiguar ações de membros",
|
||||
"disambiguateMultiLabelPopup-title": "Desambiguar Acção da Etiqueta",
|
||||
"disambiguateMultiMemberPopup-title": "Desambiguar Acção do Membro",
|
||||
"discard": "Descartar",
|
||||
"done": "Feito",
|
||||
"download": "Baixar",
|
||||
"download": "Descarregar",
|
||||
"edit": "Editar",
|
||||
"edit-avatar": "Alterar Avatar",
|
||||
"edit-profile": "Editar Perfil",
|
||||
"edit-wip-limit": "Editar Limite WIP",
|
||||
"soft-wip-limit": "Limite de WIP",
|
||||
"editCardStartDatePopup-title": "Altera data de início",
|
||||
"editCardDueDatePopup-title": "Altera data fim",
|
||||
"editCustomFieldPopup-title": "Editar campo",
|
||||
"editCardSpentTimePopup-title": "Editar tempo gasto",
|
||||
"editLabelPopup-title": "Alterar Etiqueta",
|
||||
"editNotificationPopup-title": "Editar Notificações",
|
||||
"editProfilePopup-title": "Editar Perfil",
|
||||
"edit-avatar": "Alterar o Avatar",
|
||||
"edit-profile": "Editar o Perfil",
|
||||
"edit-wip-limit": "Editar o Limite WIP",
|
||||
"soft-wip-limit": "Limite Suave de WIP",
|
||||
"editCardStartDatePopup-title": "Alterar a data de início",
|
||||
"editCardDueDatePopup-title": "Alterar a data limite",
|
||||
"editCustomFieldPopup-title": "Editar Campo",
|
||||
"editCardSpentTimePopup-title": "Alterar o tempo gasto",
|
||||
"editLabelPopup-title": "Alterar a Etiqueta",
|
||||
"editNotificationPopup-title": "Editar a Notificação",
|
||||
"editProfilePopup-title": "Editar o Perfil",
|
||||
"email": "E-mail",
|
||||
"email-enrollAccount-subject": "Uma conta foi criada para si em __siteName__",
|
||||
"email-enrollAccount-text": "Olá __user__\npara começar a utilizar o serviço basta clicar no link abaixo.\n__url__\nMuito Obrigado.",
|
||||
"email-fail": "Falhou ao enviar e-mail",
|
||||
"email-fail-text": "Erro ao tentar enviar e-mail",
|
||||
"email-enrollAccount-text": "Olá __user__\nPara começar a utilizar o serviço, basta clicar na ligação abaixo.\n__url__\nObrigado.",
|
||||
"email-fail": "Falhou a enviar o e-mail",
|
||||
"email-fail-text": "Erro a tentar enviar o e-mail",
|
||||
"email-invalid": "E-mail inválido",
|
||||
"email-invite": "Convite via E-mail",
|
||||
"email-invite-subject": "__inviter__ lhe enviou um convite",
|
||||
"email-invite-text": "Caro __user__\n__inviter__ convidou-o para se juntar ao quadro \"__board__\" como colaborador.\nPor favor prossiga através do link abaixo:\n__url__\nMuito obrigado.",
|
||||
"email-invite": "Convidar via E-mail",
|
||||
"email-invite-subject": "__inviter__ enviou-lhe um convite",
|
||||
"email-invite-text": "Caro __user__\n__inviter__ convidou-o para se juntar ao quadro \"__board__\" para colaborar.\nPor favor prossiga através da ligação abaixo:\n__url__\nObrigado.",
|
||||
"email-resetPassword-subject": "Redefina sua senha em __siteName__",
|
||||
"email-resetPassword-text": "Olá __user__\nPara redefinir sua senha, por favor clique no link abaixo.\n__url__\nMuito obrigado.",
|
||||
"email-resetPassword-text": "Olá __user__\nPara redefinir a sua senha, por favor clique na ligação abaixo.\n__url__\nObrigado.",
|
||||
"email-sent": "E-mail enviado",
|
||||
"email-verifyEmail-subject": "Verifique seu endereço de e-mail em __siteName__",
|
||||
"email-verifyEmail-text": "Olá __user__\nPara verificar sua conta de e-mail, clique no link abaixo.\n__url__\nObrigado.",
|
||||
"email-verifyEmail-subject": "Verifique o seu endereço de e-mail em __siteName__",
|
||||
"email-verifyEmail-text": "Olá __user__\nPara verificar a sua conta de e-mail, clique na ligação abaixo.\n__url__\nObrigado.",
|
||||
"enable-wip-limit": "Ativar Limite WIP",
|
||||
"error-board-doesNotExist": "Este quadro não existe",
|
||||
"error-board-notAdmin": "Precisa ser administrador desse quadro para fazer isto",
|
||||
"error-board-notAMember": "Precisa ser um membro desse quadro para fazer isto",
|
||||
"error-json-malformed": "Seu texto não é um JSON válido",
|
||||
"error-json-schema": "Seu JSON não inclui as informações no formato correto",
|
||||
"error-board-notAdmin": "Precisa de ser administrador deste quadro para fazer isso",
|
||||
"error-board-notAMember": "Precisa de ser um membro deste quadro para fazer isso",
|
||||
"error-json-malformed": "O seu texto não é um JSON válido",
|
||||
"error-json-schema": "O seu JSON não inclui as informações apropriadas no formato correto",
|
||||
"error-list-doesNotExist": "Esta lista não existe",
|
||||
"error-user-doesNotExist": "Este utilizador não existe",
|
||||
"error-user-notAllowSelf": "Não pode convidar a si mesmo",
|
||||
"error-user-notAllowSelf": "Não se pode convidar a si mesmo",
|
||||
"error-user-notCreated": "Este utilizador não foi criado",
|
||||
"error-username-taken": "Esse nome de utilizador já existe",
|
||||
"error-email-taken": "E-mail já está em uso",
|
||||
"error-email-taken": "Endereço de e-mail já está em uso",
|
||||
"export-board": "Exportar quadro",
|
||||
"filter": "Filtrar",
|
||||
"filter-cards": "Filtrar Cartões",
|
||||
"filter-clear": "Limpar filtro",
|
||||
"filter-no-label": "Sem etiquetas",
|
||||
"filter-no-member": "Sem membros",
|
||||
"filter-no-custom-fields": "Não há campos personalizados",
|
||||
"filter-on": "Filtro está ativo",
|
||||
"filter-no-custom-fields": "Sem Campos Personalizados",
|
||||
"filter-on": "Filtro está activo",
|
||||
"filter-on-desc": "Está a filtrar cartões neste quadro. Clique aqui para editar o filtro.",
|
||||
"filter-to-selection": "Filtrar esta seleção",
|
||||
"advanced-filter-label": "Filtro avançado",
|
||||
"advanced-filter-description": "Filtros avançados permitem escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || (). Um espaço é utilizado como separador entre os operadores. Pode filtrar para todos os campos personalizados escrevendo os nomes e valores. Exemplo: Campo1 == Valor1. Nota^Se o campo ou valor tiver espaços precisa encapsular eles em citações sozinhas. Exemplo: Campo1 == Eu\\sou. Também pode combinar múltiplas condições. Exemplo: C1 == V1 || C1 == V2. Normalmente todos os operadores são interpretados da esquerda para direita. Pode alterar a ordem colocando parênteses - como na expressão matemática. Exemplo: C1 == V1 && (C2 == V2 || C2 == V3). Também pode pesquisar campos de texto usando regex: C1 == /Tes.*/i",
|
||||
"filter-to-selection": "Filtrar esta selecção",
|
||||
"advanced-filter-label": "Filtro Avançado",
|
||||
"advanced-filter-description": "Filtro Avançado permite escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || ( ). Um espaço é usado como separador entre Operadores. Pode filtrar em todos os Campos Personalizados escreventos os seus nomes e valores. Por Exemplo: Campo1 == Valor1. Nota: Se os campos ou valores contiverem espaços, tem de os encapsular em apóstrofes. Por Exemplo: 'Campo 1' == 'Valor 1'. Para que caracteres de controlo únicos (' \\/) sejam ignorados, pode usar \\. Por exemplo: Campo1 == I\\'m. Pode também combinar múltiplas condições. Por Exemplo: F1 == V1 || F1 == V2. Normalmente todos os operadores são interpretados da esquerda para a direita. Pode alterar a ordem inserindo parênteses. Por Exemplo: F1 == V1 && ( F2 == V2 || F2 == V3 ). Pode também procurar em campos de texto utilizando uma expressão regular: F1 == /Tes.*/i",
|
||||
"fullname": "Nome Completo",
|
||||
"header-logo-title": "Voltar para a lista de quadros.",
|
||||
"hide-system-messages": "Esconde mensagens de sistema",
|
||||
"header-logo-title": "Voltar para a sua lista de quadros.",
|
||||
"hide-system-messages": "Esconder mensagens de sistema",
|
||||
"headerBarCreateBoardPopup-title": "Criar Quadro",
|
||||
"home": "Início",
|
||||
"import": "Importar",
|
||||
@@ -316,67 +316,67 @@
|
||||
"import-board-c": "Importar quadro",
|
||||
"import-board-title-trello": "Importar quadro do Trello",
|
||||
"import-board-title-wekan": "Importar quadro a partir de exportação prévia",
|
||||
"import-sandstorm-backup-warning": "Não exclua os dados importados do quadro original exportado ou do Trello antes de verificar se esse item fecha e abre novamente, ou se receber o erro Quadro não encontrado, que significa perda de dados.",
|
||||
"import-sandstorm-warning": "O quadro importado irá excluir todos os dados existentes no quadro e irá sobrescrever com o quadro importado.",
|
||||
"import-sandstorm-backup-warning": "Não apague os dados importados do quadro original exportado ou do Trello antes de verificar se esse item fecha e abre novamente, ou se receber o erro Quadro não encontrado, que significa perda de dados.",
|
||||
"import-sandstorm-warning": "O quadro importado irá apagar todos os dados existentes no quadro e irá sobrescrever com o quadro importado.",
|
||||
"from-trello": "Do Trello",
|
||||
"from-wekan": "A partir de exportação prévia",
|
||||
"import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', então copie o texto emitido",
|
||||
"import-board-instruction-wekan": "Em seu quadro vá para 'Menu', depois 'Exportar quadro' e copie o texto no arquivo baixado.",
|
||||
"import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', e copie o texto resultante.",
|
||||
"import-board-instruction-wekan": "No seu quadro vá para 'Menu', depois 'Exportar quadro' e copie o texto no ficheiro descarregado.",
|
||||
"import-board-instruction-about-errors": "Se receber erros ao importar o quadro, às vezes a importação ainda funciona e o quadro está na página Todos os Quadros.",
|
||||
"import-json-placeholder": "Cole seus dados JSON válidos aqui",
|
||||
"import-map-members": "Mapear membros",
|
||||
"import-members-map": "Seu quadro importado possui alguns membros. Por favor, mapeie os membros que deseja importar para seus utilizadors",
|
||||
"import-show-user-mapping": "Revisar mapeamento dos membros",
|
||||
"import-members-map": "O seu quadro importado possui alguns membros. Por favor, mapeie os membros que deseja importar para seus utilizadores",
|
||||
"import-show-user-mapping": "Rever mapeamento dos membros",
|
||||
"import-user-select": "Escolha um utilizador existente que deseja usar como esse membro",
|
||||
"importMapMembersAddPopup-title": "Selecione membro",
|
||||
"importMapMembersAddPopup-title": "Seleccione membro",
|
||||
"info": "Versão",
|
||||
"initials": "Iniciais",
|
||||
"invalid-date": "Data inválida",
|
||||
"invalid-time": "Hora inválida",
|
||||
"invalid-user": "Utilizador inválido",
|
||||
"joined": "juntou-se",
|
||||
"just-invited": "Já foi convidado para este quadro",
|
||||
"just-invited": "Acabou de ser convidado para este quadro",
|
||||
"keyboard-shortcuts": "Atalhos do teclado",
|
||||
"label-create": "Criar Etiqueta",
|
||||
"label-default": "%s etiqueta (padrão)",
|
||||
"label-delete-pop": "Não será possível recuperá-la. A etiqueta será excluída de todos os cartões e seu histórico será destruído.",
|
||||
"label-default": "%s etiqueta (omissão)",
|
||||
"label-delete-pop": "Não há como desfazer. A etiqueta será apagada de todos os cartões e o seu histórico será destruído.",
|
||||
"labels": "Etiquetas",
|
||||
"language": "Idioma",
|
||||
"last-admin-desc": "Não pode alterar funções porque deve existir pelo menos um administrador.",
|
||||
"leave-board": "Sair do Quadro",
|
||||
"leave-board-pop": "Tem a certeza de que pretende sair de __boardTitle__? Será removido de todos os cartões neste quadro.",
|
||||
"leaveBoardPopup-title": "Sair do Quadro?",
|
||||
"link-card": "Vincular a este cartão",
|
||||
"leaveBoardPopup-title": "Sair do Quadro ?",
|
||||
"link-card": "Ligar a este cartão",
|
||||
"list-archive-cards": "Move todos os cartões nesta lista para o Arquivo",
|
||||
"list-archive-cards-pop": "Isto removerá todos os cartões desta lista para o quadro. Para visualizar cartões arquivados e trazê-los de volta para o quadro, clique em “Menu” > “Arquivo”.",
|
||||
"list-move-cards": "Mover todos os cartões desta lista",
|
||||
"list-select-cards": "Selecionar todos os cartões nesta lista",
|
||||
"list-archive-cards-pop": "Isto irá remover todos os cartões nesta lista do quadro. Para ver os cartões no Arquivo e trazê-los de volta para o quadro, clique em “Menu” > “Arquivo”.",
|
||||
"list-move-cards": "Mover todos os cartões nesta lista",
|
||||
"list-select-cards": "Seleccionar todos os cartões nesta lista",
|
||||
"set-color-list": "Definir Cor",
|
||||
"listActionPopup-title": "Listar Ações",
|
||||
"swimlaneActionPopup-title": "Ações de Pista",
|
||||
"swimlaneActionPopup-title": "Acções de Pista",
|
||||
"swimlaneAddPopup-title": "Adicionar uma Pista abaixo",
|
||||
"listImportCardPopup-title": "Importe um cartão do Trello",
|
||||
"listMorePopup-title": "Mais",
|
||||
"link-list": "Vincular a esta lista",
|
||||
"list-delete-pop": "Todas as ações serão excluídas da lista de atividades e não poderá recuperar a lista. Não há como desfazer.",
|
||||
"list-delete-suggest-archive": "Pode mover uma lista para o Arquivo para removê-la do quadro e preservar a atividade.",
|
||||
"link-list": "Ligar a esta lista",
|
||||
"list-delete-pop": "Todas as acções serão removidas do feed de actividade e não poderá recuperar a lista. Não há como desfazer.",
|
||||
"list-delete-suggest-archive": "Pode mover uma lista para o Arquivo para a remover do quadro e preservar a actividade.",
|
||||
"lists": "Listas",
|
||||
"swimlanes": "Pistas",
|
||||
"log-out": "Sair",
|
||||
"log-out": "Terminar a Sessão",
|
||||
"log-in": "Entrar",
|
||||
"loginPopup-title": "Entrar",
|
||||
"memberMenuPopup-title": "Configuração de Membros",
|
||||
"memberMenuPopup-title": "Configuração dos Membros",
|
||||
"members": "Membros",
|
||||
"menu": "Menu",
|
||||
"move-selection": "Mover seleção",
|
||||
"moveCardPopup-title": "Mover Cartão",
|
||||
"moveCardToBottom-title": "Mover para o final",
|
||||
"moveCardToTop-title": "Mover para o topo",
|
||||
"moveSelectionPopup-title": "Mover seleção",
|
||||
"multi-selection": "Multi-Seleção",
|
||||
"multi-selection-on": "Multi-seleção está ativo",
|
||||
"muted": "Silenciar",
|
||||
"muted-info": "Nunca receberá qualquer notificação desse quadro",
|
||||
"move-selection": "Mover a selecção",
|
||||
"moveCardPopup-title": "Mover o Cartão",
|
||||
"moveCardToBottom-title": "Mover para o Fundo",
|
||||
"moveCardToTop-title": "Mover para o Topo",
|
||||
"moveSelectionPopup-title": "Mover a selecção",
|
||||
"multi-selection": "Selecção Múltipla",
|
||||
"multi-selection-on": "Selecção Múltipla está activa",
|
||||
"muted": "Silenciado",
|
||||
"muted-info": "Nunca será notificado de quaisquer alterações neste quadro",
|
||||
"my-boards": "Meus Quadros",
|
||||
"name": "Nome",
|
||||
"no-archived-cards": "Sem cartões no Arquivo.",
|
||||
@@ -385,29 +385,29 @@
|
||||
"no-results": "Nenhum resultado.",
|
||||
"normal": "Normal",
|
||||
"normal-desc": "Pode ver e editar cartões. Não pode alterar configurações.",
|
||||
"not-accepted-yet": "Convite ainda não aceito",
|
||||
"notify-participate": "Receber atualizações de qualquer cartão que criar ou participar como membro",
|
||||
"notify-watch": "Receber atualizações de qualquer quadro, lista ou cartões que estiver a observar",
|
||||
"not-accepted-yet": "Convite ainda não aceite",
|
||||
"notify-participate": "Receber actualizações de qualquer cartão que criar ou participar como membro",
|
||||
"notify-watch": "Receber actualizações de qualquer quadro, lista ou cartões que estiver a observar",
|
||||
"optional": "opcional",
|
||||
"or": "ou",
|
||||
"page-maybe-private": "Esta página pode ser privada. Poderá vê-la se estiver <a href='%s'>logado</a>.",
|
||||
"page-maybe-private": "Esta página pode ser privada. Poderá vê-la se <a href='%s'>iniciar a sessão</a>.",
|
||||
"page-not-found": "Página não encontrada.",
|
||||
"password": "Senha",
|
||||
"paste-or-dragdrop": "para colar, ou arraste e solte o arquivo da imagem para cá (somente imagens)",
|
||||
"paste-or-dragdrop": "para colar, ou arrastar e soltar o ficheiro da imagem para lá (somente imagens)",
|
||||
"participating": "Participando",
|
||||
"preview": "Pré-visualizar",
|
||||
"previewAttachedImagePopup-title": "Pré-visualizar",
|
||||
"previewClipboardImagePopup-title": "Pré-visualizar",
|
||||
"private": "Privado",
|
||||
"private-desc": "Este quadro é privado. Apenas seus membros podem acessar e editá-lo.",
|
||||
"private-desc": "Este quadro é privado. Apenas o membros do quadro o podem visualizar e editar.",
|
||||
"profile": "Perfil",
|
||||
"public": "Público",
|
||||
"public-desc": "Este quadro é público. Ele é visível a qualquer pessoa com o link e será exibido em motores de busca como o Google. Apenas os seus membros podem editá-lo.",
|
||||
"quick-access-description": "Clique na estrela para adicionar um atalho nesta barra.",
|
||||
"public-desc": "Este quadro é público. Está visível para qualquer pessoa com a ligação e será exibido em motores de busca como o Google. Apenas os membros do quadro o podem editar.",
|
||||
"quick-access-description": "Clique na estrela de um quadro para adicionar um atalho nesta barra.",
|
||||
"remove-cover": "Remover Capa",
|
||||
"remove-from-board": "Remover do Quadro",
|
||||
"remove-label": "Remover Etiqueta",
|
||||
"listDeletePopup-title": "Excluir Lista?",
|
||||
"listDeletePopup-title": "Apagar Lista ?",
|
||||
"remove-member": "Remover Membro",
|
||||
"remove-member-from-card": "Remover do Cartão",
|
||||
"remove-member-pop": "Remover __name__ (__username__) de __boardTitle__? O membro será removido de todos os cartões neste quadro e será notificado.",
|
||||
@@ -415,63 +415,63 @@
|
||||
"rename": "Renomear",
|
||||
"rename-board": "Renomear Quadro",
|
||||
"restore": "Restaurar",
|
||||
"save": "Salvar",
|
||||
"search": "Buscar",
|
||||
"save": "Guardar",
|
||||
"search": "Procurar",
|
||||
"rules": "Regras",
|
||||
"search-cards": "Pesquisa em títulos e descrições de cartões neste quadro",
|
||||
"search-example": "Texto para procurar",
|
||||
"select-color": "Selecionar Cor",
|
||||
"search-cards": "Pesquisar nos títulos e descrições dos cartões deste quadro",
|
||||
"search-example": "Texto a procurar?",
|
||||
"select-color": "Seleccionar Cor",
|
||||
"set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista",
|
||||
"setWipLimitPopup-title": "Definir Limite WIP",
|
||||
"shortcut-assign-self": "Atribuir a si o cartão atual",
|
||||
"shortcut-assign-self": "Atribuir a si o cartão actual",
|
||||
"shortcut-autocomplete-emoji": "Autocompletar emoji",
|
||||
"shortcut-autocomplete-members": "Preenchimento automático de membros",
|
||||
"shortcut-clear-filters": "Limpar todos filtros",
|
||||
"shortcut-close-dialog": "Fechar dialogo",
|
||||
"shortcut-filter-my-cards": "Filtrar meus cartões",
|
||||
"shortcut-show-shortcuts": "Mostrar lista de atalhos",
|
||||
"shortcut-toggle-filterbar": "Alternar barra de filtro",
|
||||
"shortcut-toggle-sidebar": "Fechar barra lateral.",
|
||||
"show-cards-minimum-count": "Mostrar contador de cartões se a lista tiver mais de",
|
||||
"sidebar-open": "Abrir barra lateral",
|
||||
"sidebar-close": "Fechar barra lateral",
|
||||
"shortcut-autocomplete-members": "Autocompletar membros",
|
||||
"shortcut-clear-filters": "Limpar todos os filtros",
|
||||
"shortcut-close-dialog": "Fechar Caixa de Dialogo",
|
||||
"shortcut-filter-my-cards": "Filtrar os meus cartões",
|
||||
"shortcut-show-shortcuts": "Mostrar esta lista de atalhos",
|
||||
"shortcut-toggle-filterbar": "Alternar a Barra Lateral de Filtros",
|
||||
"shortcut-toggle-sidebar": "Alternar a Barra Lateral do Quadro",
|
||||
"show-cards-minimum-count": "Mostrar contagem de cartões se a lista tiver mais de",
|
||||
"sidebar-open": "Abrir a Barra Lateral",
|
||||
"sidebar-close": "Fechar a Barra Lateral",
|
||||
"signupPopup-title": "Criar uma Conta",
|
||||
"star-board-title": "Clique para marcar este quadro como favorito. Ele aparecerá no topo na lista dos seus quadros.",
|
||||
"star-board-title": "Clique para marcar este quadro como favorito. O quadro irá aparecer no topo da sua lista de quadros.",
|
||||
"starred-boards": "Quadros Favoritos",
|
||||
"starred-boards-description": "Quadros favoritos aparecem no topo da lista dos seus quadros.",
|
||||
"subscribe": "Acompanhar",
|
||||
"team": "Equipe",
|
||||
"starred-boards-description": "Os quadros favoritos aparecem no topo da sua lista de quadros.",
|
||||
"subscribe": "Subscrever",
|
||||
"team": "Equipa",
|
||||
"this-board": "este quadro",
|
||||
"this-card": "este cartão",
|
||||
"spent-time-hours": "Tempo gasto (Horas)",
|
||||
"overtime-hours": "Tempo extras (Horas)",
|
||||
"overtime": "Tempo extras",
|
||||
"has-overtime-cards": "Tem cartões de horas extras",
|
||||
"has-spenttime-cards": "Gastou cartões de tempo",
|
||||
"spent-time-hours": "Tempo gasto (horas)",
|
||||
"overtime-hours": "Horas extra (horas)",
|
||||
"overtime": "Horas extra",
|
||||
"has-overtime-cards": "Tem cartões com horas extra",
|
||||
"has-spenttime-cards": "Tem cartões com tempo gasto",
|
||||
"time": "Tempo",
|
||||
"title": "Título",
|
||||
"tracking": "Rastreamento",
|
||||
"tracking-info": "Será notificado se houver qualquer alteração em cartões em que é o criador ou membro",
|
||||
"tracking": "A seguir",
|
||||
"tracking-info": "Será notificado de quaisquer alterações em cartões em que é o criador ou membro.",
|
||||
"type": "Tipo",
|
||||
"unassign-member": "Membro não associado",
|
||||
"unsaved-description": "Possui uma descrição não salva",
|
||||
"unassign-member": "Desatribuir membro",
|
||||
"unsaved-description": "Possui uma descrição não guardada.",
|
||||
"unwatch": "Deixar de observar",
|
||||
"upload": "Carregar",
|
||||
"upload-avatar": "Carregar um avatar",
|
||||
"uploaded-avatar": "Avatar carregado",
|
||||
"upload": "Enviar",
|
||||
"upload-avatar": "Enviar um avatar",
|
||||
"uploaded-avatar": "Enviado um avatar",
|
||||
"username": "Nome de utilizador",
|
||||
"view-it": "Visualizar",
|
||||
"warn-list-archived": "aviso: este cartão está em uma lista no Arquivo",
|
||||
"view-it": "Visualizá-lo",
|
||||
"warn-list-archived": "aviso: este cartão está numa lista no Arquivo",
|
||||
"watch": "Observar",
|
||||
"watching": "Observando",
|
||||
"watching-info": "Será notificado de qualquer alteração neste quadro",
|
||||
"watching-info": "Será notificado de quaisquer alterações neste quadro",
|
||||
"welcome-board": "Quadro de Boas Vindas",
|
||||
"welcome-swimlane": "Marco 1",
|
||||
"welcome-list1": "Básico",
|
||||
"welcome-list2": "Avançado",
|
||||
"card-templates-swimlane": "Modelos de cartão",
|
||||
"list-templates-swimlane": "Modelos de lista",
|
||||
"board-templates-swimlane": "Modelos de quadro",
|
||||
"card-templates-swimlane": "Modelos de Cartão",
|
||||
"list-templates-swimlane": "Modelos de Lista",
|
||||
"board-templates-swimlane": "Modelos de Quadro",
|
||||
"what-to-do": "O que gostaria de fazer?",
|
||||
"wipLimitErrorPopup-title": "Limite WIP Inválido",
|
||||
"wipLimitErrorPopup-dialog-pt1": "O número de tarefas nesta lista excede o limite WIP definido.",
|
||||
@@ -480,14 +480,14 @@
|
||||
"settings": "Configurações",
|
||||
"people": "Pessoas",
|
||||
"registration": "Registo",
|
||||
"disable-self-registration": "Desabilitar Cadastrar-se",
|
||||
"invite": "Convite",
|
||||
"invite-people": "Convide Pessoas",
|
||||
"to-boards": "Para o/os quadro(s)",
|
||||
"email-addresses": "Endereço de E-mail",
|
||||
"smtp-host-description": "O endereço do servidor SMTP que envia seus e-mails.",
|
||||
"disable-self-registration": "Desabilitar Auto-Registo",
|
||||
"invite": "Convidar",
|
||||
"invite-people": "Convidar Pessoas",
|
||||
"to-boards": "Para o(s) quadro(s)",
|
||||
"email-addresses": "Endereços de E-mail",
|
||||
"smtp-host-description": "O endereço do servidor SMTP que envia os seus e-mails.",
|
||||
"smtp-port-description": "A porta que o servidor SMTP usa para enviar os e-mails.",
|
||||
"smtp-tls-description": "Habilitar suporte TLS para servidor SMTP",
|
||||
"smtp-tls-description": "Habilitar suporte TLS para o servidor SMTP",
|
||||
"smtp-host": "Servidor SMTP",
|
||||
"smtp-port": "Porta SMTP",
|
||||
"smtp-username": "Nome de utilizador",
|
||||
@@ -496,20 +496,20 @@
|
||||
"send-from": "De",
|
||||
"send-smtp-test": "Enviar um e-mail de teste para si mesmo",
|
||||
"invitation-code": "Código do Convite",
|
||||
"email-invite-register-subject": "__inviter__ lhe enviou um convite",
|
||||
"email-invite-register-text": "Caro __user__,\n\n__inviter__ convida-o para o quadro Kanban para colaborações.\n\nPor favor, siga o link abaixo:\n__url__ \n\nE seu código de convite é: __icode__\n\nObrigado.",
|
||||
"email-smtp-test-subject": "E-mail de teste via SMTP",
|
||||
"email-invite-register-subject": "__inviter__ enviou-lhe um convite",
|
||||
"email-invite-register-text": "Caro __user__,\n\n__inviter__ convida-o para o quadro Kanban para colaborações.\n\nPor favor, siga a ligação abaixo:\n__url__ \n\nE seu código de convite é: __icode__\n\nObrigado.",
|
||||
"email-smtp-test-subject": "E-mail de Teste de SMTP",
|
||||
"email-smtp-test-text": "Enviou um e-mail com sucesso",
|
||||
"error-invitation-code-not-exist": "O código do convite não existe",
|
||||
"error-notAuthorized": "Não está autorizado à ver esta página.",
|
||||
"outgoing-webhooks": "Webhook de saída",
|
||||
"outgoingWebhooksPopup-title": "Webhook de saída",
|
||||
"error-notAuthorized": "Não tem autorização para ver esta página.",
|
||||
"outgoing-webhooks": "Webhooks de saída",
|
||||
"outgoingWebhooksPopup-title": "Webhooks de saída",
|
||||
"boardCardTitlePopup-title": "Filtro do Título do Cartão",
|
||||
"new-outgoing-webhook": "Novo Webhook de saída",
|
||||
"no-name": "(Desconhecido)",
|
||||
"Node_version": "Versão do Node",
|
||||
"OS_Arch": "Arquitetura do SO",
|
||||
"OS_Cpus": "Quantidade de CPUS do SO",
|
||||
"OS_Arch": "Arquitectura do SO",
|
||||
"OS_Cpus": "Quantidade de CPUs do SO",
|
||||
"OS_Freemem": "Memória Disponível do SO",
|
||||
"OS_Loadavg": "Carga Média do SO",
|
||||
"OS_Platform": "Plataforma do SO",
|
||||
@@ -527,94 +527,94 @@
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"accounts": "Contas",
|
||||
"accounts-allowEmailChange": "Permitir Mudança de e-mail",
|
||||
"accounts-allowUserNameChange": "Permitir alteração de nome de utilizador",
|
||||
"accounts-allowEmailChange": "Permitir Alteração do E-mail",
|
||||
"accounts-allowUserNameChange": "Permitir Alteração de Nome de Utilizador",
|
||||
"createdAt": "Criado em",
|
||||
"verified": "Verificado",
|
||||
"active": "Ativo",
|
||||
"active": "Activo",
|
||||
"card-received": "Recebido",
|
||||
"card-received-on": "Recebido em",
|
||||
"card-end": "Fim",
|
||||
"card-end-on": "Termina em",
|
||||
"editCardReceivedDatePopup-title": "Modificar data de recebimento",
|
||||
"editCardEndDatePopup-title": "Mudar data de fim",
|
||||
"editCardReceivedDatePopup-title": "Alterar data de recebimento",
|
||||
"editCardEndDatePopup-title": "Alterar data de fim",
|
||||
"setCardColorPopup-title": "Definir cor",
|
||||
"setCardActionsColorPopup-title": "Escolha uma cor",
|
||||
"setSwimlaneColorPopup-title": "Escolha uma cor",
|
||||
"setListColorPopup-title": "Escolha uma cor",
|
||||
"assigned-by": "Atribuído por",
|
||||
"requested-by": "Solicitado por",
|
||||
"board-delete-notice": "Excluir é permanente. Irá perder todas as listas, cartões e ações associados nesse quadro.",
|
||||
"delete-board-confirm-popup": "Todas as listas, cartões, etiquetas e atividades serão excluídos e não poderá recuperar o conteúdo do quadro. Não há como desfazer.",
|
||||
"boardDeletePopup-title": "Excluir quadro?",
|
||||
"delete-board": "Excluir quadro",
|
||||
"default-subtasks-board": "Sub-tarefas para quadro __board__",
|
||||
"default": "Padrão",
|
||||
"assigned-by": "Atribuído Por",
|
||||
"requested-by": "Solicitado Por",
|
||||
"board-delete-notice": "Apagar é permanente. Irá perder todas as listas, cartões e acções associadas a este quadro.",
|
||||
"delete-board-confirm-popup": "Todas as listas, cartões, etiquetas e actividades serão apagadas e não poderá recuperar o conteúdo do quadro. Não há como desfazer.",
|
||||
"boardDeletePopup-title": "Apagar Quadro?",
|
||||
"delete-board": "Apagar Quadro",
|
||||
"default-subtasks-board": "Sub-tarefas para o quadro __board__",
|
||||
"default": "Omissão",
|
||||
"queue": "Fila",
|
||||
"subtask-settings": "Configurações de sub-tarefas",
|
||||
"boardSubtaskSettingsPopup-title": "Configurações das sub-tarefas do quadro",
|
||||
"subtask-settings": "Configurações de Sub-tarefas",
|
||||
"boardSubtaskSettingsPopup-title": "Configurações das Sub-tarefas do Quadro",
|
||||
"show-subtasks-field": "Cartões podem ter sub-tarefas",
|
||||
"deposit-subtasks-board": "Inserir sub-tarefas a este quadro:",
|
||||
"deposit-subtasks-list": "Listas de sub-tarefas inseridas aqui:",
|
||||
"show-parent-in-minicard": "Mostrar Pai do mini cartão:",
|
||||
"prefix-with-full-path": "Prefixo com caminho completo",
|
||||
"prefix-with-parent": "Prefixo com Pai",
|
||||
"subtext-with-full-path": "Sub-texto com caminho completo",
|
||||
"subtext-with-parent": "Sub-texto com Pai",
|
||||
"change-card-parent": "Mudar Pai do cartão",
|
||||
"deposit-subtasks-board": "Depositar sub-tarefas neste quadro:",
|
||||
"deposit-subtasks-list": "Lista de destino para sub-tarefas depositadas aqui:",
|
||||
"show-parent-in-minicard": "Mostrar pai no mini-cartão:",
|
||||
"prefix-with-full-path": "Prefixar com o caminho completo",
|
||||
"prefix-with-parent": "Prefixar com o pai",
|
||||
"subtext-with-full-path": "Sub-texto com o caminho completo",
|
||||
"subtext-with-parent": "Sub-texto com o pai",
|
||||
"change-card-parent": "Alterar o pai do cartão",
|
||||
"parent-card": "Pai do cartão",
|
||||
"source-board": "Fonte do quadro",
|
||||
"no-parent": "Não mostrar Pai",
|
||||
"activity-added-label": "adicionada etiqueta '%s' para %s",
|
||||
"activity-removed-label": "removida etiqueta '%s' de %s",
|
||||
"activity-delete-attach": "excluído um anexo de %s",
|
||||
"activity-added-label-card": "adicionada etiqueta '%s'",
|
||||
"activity-removed-label-card": "removida etiqueta '%s'",
|
||||
"activity-delete-attach-card": "excluído um anexo",
|
||||
"activity-set-customfield": "definir campo personalizado '%s' para '%s' em %s",
|
||||
"activity-unset-customfield": "redefinir campo personalizado '%s' em %s",
|
||||
"source-board": "Quadro fonte",
|
||||
"no-parent": "Não mostrar o pai",
|
||||
"activity-added-label": "adicionou a etiqueta '%s' a %s",
|
||||
"activity-removed-label": "removeu a etiqueta '%s' de %s",
|
||||
"activity-delete-attach": "apagou um anexo de %s",
|
||||
"activity-added-label-card": "adicionou a etiqueta '%s'",
|
||||
"activity-removed-label-card": "removeu a etiqueta '%s'",
|
||||
"activity-delete-attach-card": "apagou um anexo",
|
||||
"activity-set-customfield": "definiu o campo personalizado '%s' para '%s' em %s",
|
||||
"activity-unset-customfield": "removeu o campo personalizado '%s' de %s",
|
||||
"r-rule": "Regra",
|
||||
"r-add-trigger": "Adicionar gatilho",
|
||||
"r-add-action": "Adicionar ação",
|
||||
"r-board-rules": "Quadro de regras",
|
||||
"r-add-action": "Adicionar acção",
|
||||
"r-board-rules": "Regras do quadro",
|
||||
"r-add-rule": "Adicionar regra",
|
||||
"r-view-rule": "Ver regra",
|
||||
"r-delete-rule": "Excluir regra",
|
||||
"r-delete-rule": "Apagar regra",
|
||||
"r-new-rule-name": "Título da nova regra",
|
||||
"r-no-rules": "Sem regras",
|
||||
"r-when-a-card": "Quando um cartão",
|
||||
"r-is": "é",
|
||||
"r-is-moved": "é movido",
|
||||
"r-added-to": "adicionado à",
|
||||
"r-added-to": "adicionado a",
|
||||
"r-removed-from": "Removido de",
|
||||
"r-the-board": "o quadro",
|
||||
"r-list": "lista",
|
||||
"set-filter": "Inserir Filtro",
|
||||
"set-filter": "Definir Filtro",
|
||||
"r-moved-to": "Movido para",
|
||||
"r-moved-from": "Movido de",
|
||||
"r-archived": "Movido para o Arquivo",
|
||||
"r-unarchived": "Restaurado do Arquivo",
|
||||
"r-a-card": "um cartão",
|
||||
"r-when-a-label-is": "Quando uma etiqueta é",
|
||||
"r-when-the-label-is": "Quando a etiqueta é",
|
||||
"r-list-name": "listar nome",
|
||||
"r-when-the-label": "Quando a etiqueta é",
|
||||
"r-list-name": "listar o nome",
|
||||
"r-when-a-member": "Quando um membro é",
|
||||
"r-when-the-member": "Quando o membro",
|
||||
"r-name": "nome",
|
||||
"r-when-a-attach": "Quando um anexo",
|
||||
"r-when-a-checklist": "Quando a lista de verificação é",
|
||||
"r-when-the-checklist": "Quando a lista de verificação",
|
||||
"r-completed": "Completado",
|
||||
"r-made-incomplete": "Feito incompleto",
|
||||
"r-when-a-item": "Quando o item da lista de verificação é",
|
||||
"r-completed": "Completada",
|
||||
"r-made-incomplete": "Tornado incompleta",
|
||||
"r-when-a-item": "Quando um item de uma lista de verificação é",
|
||||
"r-when-the-item": "Quando o item da lista de verificação",
|
||||
"r-checked": "Marcado",
|
||||
"r-unchecked": "Desmarcado",
|
||||
"r-move-card-to": "Mover cartão para",
|
||||
"r-top-of": "Topo de",
|
||||
"r-bottom-of": "Final de",
|
||||
"r-its-list": "é lista",
|
||||
"r-archive": "Mover para Arquivo",
|
||||
"r-bottom-of": "Fundo de",
|
||||
"r-its-list": "a sua lista",
|
||||
"r-archive": "Mover para o Arquivo",
|
||||
"r-unarchive": "Restaurar do Arquivo",
|
||||
"r-card": "cartão",
|
||||
"r-add": "Novo",
|
||||
@@ -622,7 +622,7 @@
|
||||
"r-label": "etiqueta",
|
||||
"r-member": "membro",
|
||||
"r-remove-all": "Remover todos os membros do cartão",
|
||||
"r-set-color": "Definir cor para",
|
||||
"r-set-color": "Definir a cor para",
|
||||
"r-checklist": "lista de verificação",
|
||||
"r-check-all": "Marcar todos",
|
||||
"r-uncheck-all": "Desmarcar todos",
|
||||
@@ -637,13 +637,13 @@
|
||||
"r-rule-details": "Detalhes da regra",
|
||||
"r-d-move-to-top-gen": "Mover cartão para o topo da sua lista",
|
||||
"r-d-move-to-top-spec": "Mover cartão para o topo da lista",
|
||||
"r-d-move-to-bottom-gen": "Mover cartão para o final da sua lista",
|
||||
"r-d-move-to-bottom-spec": "Mover cartão para final da lista",
|
||||
"r-d-move-to-bottom-gen": "Mover cartão para o fundo da sua lista",
|
||||
"r-d-move-to-bottom-spec": "Mover cartão para fundo da lista",
|
||||
"r-d-send-email": "Enviar e-mail",
|
||||
"r-d-send-email-to": "para",
|
||||
"r-d-send-email-subject": "assunto",
|
||||
"r-d-send-email-message": "mensagem",
|
||||
"r-d-archive": "Mover cartão para Arquivo",
|
||||
"r-d-archive": "Mover cartão para o Arquivo",
|
||||
"r-d-unarchive": "Restaurar cartão do Arquivo",
|
||||
"r-d-add-label": "Adicionar etiqueta",
|
||||
"r-d-remove-label": "Remover etiqueta",
|
||||
@@ -665,10 +665,19 @@
|
||||
"r-with-items": "com os itens",
|
||||
"r-items-list": "item1,item2,item3",
|
||||
"r-add-swimlane": "Adicionar pista",
|
||||
"r-swimlane-name": "Nome da pista",
|
||||
"r-board-note": "Nota: deixe o campo vazio para corresponder à todos os valores possíveis",
|
||||
"r-checklist-note": "Nota: itens de Checklists devem ser escritos separados por vírgulas",
|
||||
"r-swimlane-name": "nome da pista",
|
||||
"r-board-note": "Nota: deixe o campo vazio para corresponder a todos os valores possíveis.",
|
||||
"r-checklist-note": "Nota: itens de listas de verificação devem ser escritos separados por vírgulas.",
|
||||
"r-when-a-card-is-moved": "Quando um cartão é movido de outra lista",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
@@ -680,14 +689,14 @@
|
||||
"add-custom-html-after-body-start": "Adicionar HTML Personalizado depois do início do <body>",
|
||||
"add-custom-html-before-body-end": "Adicionar HTML Personalizado antes do fim do </body>",
|
||||
"error-undefined": "Ocorreu um erro",
|
||||
"error-ldap-login": "Um erro ocorreu enquanto tentava entrar",
|
||||
"error-ldap-login": "Ocorreu um erro ocorreu enquanto tentava entrar",
|
||||
"display-authentication-method": "Mostrar Método de Autenticação",
|
||||
"default-authentication-method": "Método de Autenticação Padrão",
|
||||
"default-authentication-method": "Método de Autenticação por Omissão",
|
||||
"duplicate-board": "Duplicar Quadro",
|
||||
"people-number": "O número de pessoas é:",
|
||||
"swimlaneDeletePopup-title": "Delete Swimlane ?",
|
||||
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
|
||||
"restore-all": "Restore all",
|
||||
"delete-all": "Delete all",
|
||||
"loading": "Loading, please wait."
|
||||
"swimlaneDeletePopup-title": "Apagar Pista ?",
|
||||
"swimlane-delete-pop": "Todas as acções serão removidas do feed de actividade e não será possível recuperar a pista. Não há como desfazer.",
|
||||
"restore-all": "Restaurar todos",
|
||||
"delete-all": "Apagar todos",
|
||||
"loading": "A carregar, por favor aguarde."
|
||||
}
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+14
-5
@@ -20,7 +20,7 @@
|
||||
"act-createBoard": "создал доску __board__",
|
||||
"act-createSwimlane": "создал дорожку __swimlane__ на доске __board__",
|
||||
"act-createCard": "создал карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
|
||||
"act-createCustomField": "создал поле __customField__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__\n",
|
||||
"act-createCustomField": "создал поле __customField__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
|
||||
"act-createList": "добавил список __list__ на доску __board__",
|
||||
"act-addBoardMember": "добавил участника __member__ на доску __board__",
|
||||
"act-archivedBoard": "Доска __board__ перемещена в Архив",
|
||||
@@ -258,7 +258,7 @@
|
||||
"edit": "Редактировать",
|
||||
"edit-avatar": "Изменить аватар",
|
||||
"edit-profile": "Изменить профиль",
|
||||
"edit-wip-limit": " Изменить лимит на кол-во задач",
|
||||
"edit-wip-limit": "Изменить лимит на кол-во задач",
|
||||
"soft-wip-limit": "Мягкий лимит",
|
||||
"editCardStartDatePopup-title": "Изменить дату начала",
|
||||
"editCardDueDatePopup-title": "Изменить дату выполнения",
|
||||
@@ -548,7 +548,7 @@
|
||||
"delete-board-confirm-popup": "Все списки, карточки, метки и действия будут удалены, и вы не сможете восстановить содержимое доски. Отменить нельзя.",
|
||||
"boardDeletePopup-title": "Удалить доску?",
|
||||
"delete-board": "Удалить доску",
|
||||
"default-subtasks-board": "Подзадача для доски __board__ ",
|
||||
"default-subtasks-board": "Подзадача для доски __board__",
|
||||
"default": "По умолчанию",
|
||||
"queue": "Очередь",
|
||||
"subtask-settings": "Настройки подзадач",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Восстановлена из архива",
|
||||
"r-a-card": "карточку",
|
||||
"r-when-a-label-is": "Когда метка",
|
||||
"r-when-the-label-is": "Когда метка",
|
||||
"r-when-the-label": "Когда метка",
|
||||
"r-list-name": "имя",
|
||||
"r-when-a-member": "Когда участник",
|
||||
"r-when-the-member": "Когда участник",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Примечание: пустое поле соответствует любым возможным значениям.",
|
||||
"r-checklist-note": "Примечание: пункты контрольных списков при перечислении разделяются запятыми.",
|
||||
"r-when-a-card-is-moved": "Когда карточка перемещена в другой список",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
@@ -677,7 +686,7 @@
|
||||
"custom-product-name": "Собственное наименование",
|
||||
"layout": "Внешний вид",
|
||||
"hide-logo": "Скрыть логотип",
|
||||
"add-custom-html-after-body-start": "Добавить HTML после начала <body> ",
|
||||
"add-custom-html-after-body-start": "Добавить HTML после начала <body>",
|
||||
"add-custom-html-before-body-end": "Добавить HTML до завершения </body>",
|
||||
"error-undefined": "Что-то пошло не так",
|
||||
"error-ldap-login": "Ошибка при попытке авторизации",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+13
-4
@@ -330,7 +330,7 @@
|
||||
"import-user-select": "Välj din befintliga användare du vill använda som den här medlemmen",
|
||||
"importMapMembersAddPopup-title": "Välj medlem",
|
||||
"info": "Version",
|
||||
"initials": "Initialer ",
|
||||
"initials": "Initialer",
|
||||
"invalid-date": "Ogiltigt datum",
|
||||
"invalid-time": "Ogiltig tid",
|
||||
"invalid-user": "Ogiltig användare",
|
||||
@@ -361,7 +361,7 @@
|
||||
"list-delete-pop": "Alla åtgärder kommer att tas bort från aktivitetsmatningen och du kommer inte att kunna återställa listan. Det går inte att ångra.",
|
||||
"list-delete-suggest-archive": "Du kan flytta en lista till Arkiv för att ta bort den från anslagstavlan och bevara aktiviteten.",
|
||||
"lists": "Listor",
|
||||
"swimlanes": "Simbanor ",
|
||||
"swimlanes": "Simbanor",
|
||||
"log-out": "Logga ut",
|
||||
"log-in": "Logga in",
|
||||
"loginPopup-title": "Logga in",
|
||||
@@ -476,7 +476,7 @@
|
||||
"wipLimitErrorPopup-title": "Ogiltig WIP-gräns",
|
||||
"wipLimitErrorPopup-dialog-pt1": "Antalet uppgifter i den här listan är högre än WIP-gränsen du har definierat.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Flytta några uppgifter ur listan, eller ställ in en högre WIP-gräns.",
|
||||
"admin-panel": "Administratörspanel ",
|
||||
"admin-panel": "Administratörspanel",
|
||||
"settings": "Inställningar",
|
||||
"people": "Personer",
|
||||
"registration": "Registrering",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Återställd från Arkiv",
|
||||
"r-a-card": "ett kort",
|
||||
"r-when-a-label-is": "När en etikett är",
|
||||
"r-when-the-label-is": "När etiketten är",
|
||||
"r-when-the-label": "När etiketten är",
|
||||
"r-list-name": "listnamn",
|
||||
"r-when-a-member": "När en medlem är",
|
||||
"r-when-the-member": "När medlemmen",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Notera: lämna ett fält tomt för att matcha alla möjliga värden.",
|
||||
"r-checklist-note": "Notera: Objekt i en checklista måste skrivas som kommaseparerade objekt",
|
||||
"r-when-a-card-is-moved": "När ett kort flyttas till en annan lista",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+12
-3
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Arşivden geri çıkarıldı",
|
||||
"r-a-card": "Kart",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "liste adı",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Not: Her olası değere uyması için bir alanı boş bırakın.",
|
||||
"r-checklist-note": "Not: kontrol listesindeki öğelerin virgülle ayrılmış değerler olarak yazılması gerekir.",
|
||||
"r-when-a-card-is-moved": "Bir kart başka bir listeye taşındığında",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "Oauth2",
|
||||
"cas": "CAS",
|
||||
@@ -687,7 +696,7 @@
|
||||
"people-number": "The number of people is:",
|
||||
"swimlaneDeletePopup-title": "Kulvar silinsin mi?",
|
||||
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
|
||||
"restore-all": "Restore all",
|
||||
"restore-all": "Her şeyi eski haline getir",
|
||||
"delete-all": "Hepsini sil",
|
||||
"loading": "Loading, please wait."
|
||||
"loading": "Yükleniyor, lütfen bekleyiniz"
|
||||
}
|
||||
+27
-18
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"accept": "Прийняти",
|
||||
"act-activity-notify": "Сповіщення діяльності",
|
||||
"act-activity-notify": "Сповіщення активності",
|
||||
"act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
@@ -17,7 +17,7 @@
|
||||
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-createBoard": "Створити Коробко",
|
||||
"act-createBoard": "Дошку __board__створено",
|
||||
"act-createSwimlane": "created swimlane __swimlane__ to board __board__",
|
||||
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
@@ -39,26 +39,26 @@
|
||||
"act-withBoardTitle": "__board__",
|
||||
"act-withCardTitle": "[__board__] __card__",
|
||||
"actions": "Дії",
|
||||
"activities": "Діяльність",
|
||||
"activity": "Активність",
|
||||
"activity-added": "додав %s до %s",
|
||||
"activities": "Діяльності",
|
||||
"activity": "Діяльність",
|
||||
"activity-added": "%s додано до %s",
|
||||
"activity-archived": "%s перенесено до архіву",
|
||||
"activity-attached": "прикріпив %s до %s",
|
||||
"activity-created": "створив %s",
|
||||
"activity-customfield-created": "створив налаштовуване поле",
|
||||
"activity-excluded": "виключено %s з %s",
|
||||
"activity-imported": "імпортовано %s до %s з %s",
|
||||
"activity-imported-board": "імпортовано %s з %s",
|
||||
"activity-joined": "приєднався %s",
|
||||
"activity-moved": "переміщений %s з %s до %s",
|
||||
"activity-attached": "%s прикріплено до %s",
|
||||
"activity-created": "%sстворено",
|
||||
"activity-customfield-created": "Створено спеціальне поле",
|
||||
"activity-excluded": "%s виключено з %s",
|
||||
"activity-imported": "%s імпортовано до %s з %s",
|
||||
"activity-imported-board": "%s імпортовано з %s",
|
||||
"activity-joined": "%s приєднано",
|
||||
"activity-moved": "%s переміщено з %s до %s",
|
||||
"activity-on": "%s",
|
||||
"activity-removed": "видалив %s з %s",
|
||||
"activity-sent": "відправив %s до %s",
|
||||
"activity-removed": "%s видалено з %s",
|
||||
"activity-sent": "%s відправлено до %s",
|
||||
"activity-unjoined": "unjoined %s",
|
||||
"activity-subtask-added": "додав підзадачу до %s",
|
||||
"activity-subtask-added": "Додано підзадачу до %s",
|
||||
"activity-checked-item": "checked %s in checklist %s of %s",
|
||||
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
|
||||
"activity-checklist-added": "додав список до %s",
|
||||
"activity-checklist-added": "Додано контрольний список до %s",
|
||||
"activity-checklist-removed": "removed a checklist from %s",
|
||||
"activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Відновлено з Архіву",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+16
-7
@@ -6,8 +6,8 @@
|
||||
"act-addSubtask": "添加子任务 __subtask__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
|
||||
"act-addLabel": "添加标签 __label__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
|
||||
"act-addedLabel": "添加标签 __label__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
|
||||
"act-removeLabel": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的标签 __label__ ",
|
||||
"act-removedLabel": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的标签 __label__ ",
|
||||
"act-removeLabel": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的标签 __label__",
|
||||
"act-removedLabel": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的标签 __label__",
|
||||
"act-addChecklist": "添加清单 __checklist__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
|
||||
"act-addChecklistItem": "添加清单项 __checklistItem__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__",
|
||||
"act-removeChecklist": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__",
|
||||
@@ -16,7 +16,7 @@
|
||||
"act-uncheckedItem": "反选看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 的清单项 __checklistItem__",
|
||||
"act-completeChecklist": "完成检查列表__checklist__ 卡片 __card__ 列表 __list__ 泳道 __swimlane__ 看板 __board__",
|
||||
"act-uncompleteChecklist": "看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 未完成",
|
||||
"act-addComment": "对看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 发表了评论: __comment__ ",
|
||||
"act-addComment": "对看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 发表了评论: __comment__",
|
||||
"act-createBoard": "创建看板 __board__",
|
||||
"act-createSwimlane": "创建泳道 __swimlane__ 到看板 __board__",
|
||||
"act-createCard": "在看板 __board__ 的泳道 __swimlane__ 的列表 __list__ 中添加卡片 __card__",
|
||||
@@ -33,7 +33,7 @@
|
||||
"act-joinMember": "已将成员 __member__ 添加到 __board__ 看板中的 __swimlane__ 泳道中的 __list__ 列表中的 __card__ 卡片中",
|
||||
"act-moveCard": "移动卡片 __card__ 到看板 __board__ 从列表 __oldList__ 泳道 __oldSwimlane__ 至列表 __list__ 泳道 __swimlane__",
|
||||
"act-moveCardToOtherBoard": "移动卡片 __card__ 从列表 __oldList__ 泳道 __oldSwimlane__ 看板 __oldBoard__ 至列表 __list__ 泳道 __swimlane__ 看板 __board__",
|
||||
"act-removeBoardMember": "从看板 __board__ 移除成员 __member__ ",
|
||||
"act-removeBoardMember": "从看板 __board__ 移除成员 __member__",
|
||||
"act-restoredCard": "恢复卡片 __card__ 至列表 __list__ 泳道 __swimlane__ 看板 __board__",
|
||||
"act-unjoinMember": "移除成员 __member__ 从卡片 __card__ 列表 __list__ a泳道 __swimlane__ 看板 __board__",
|
||||
"act-withBoardTitle": "看板__board__",
|
||||
@@ -317,7 +317,7 @@
|
||||
"import-board-title-trello": "从Trello导入看板",
|
||||
"import-board-title-wekan": "从以前的导出数据导入看板",
|
||||
"import-sandstorm-backup-warning": "在检查此颗粒是否关闭和再次打开之前,不要删除从原始导出的看板或Trello导入的数据,否则看板会发生未知的错误,这将意味着数据丢失。",
|
||||
"import-sandstorm-warning": "导入的面板将删除所有已存在于面板上的数据并替换他们为导入的面板。 ",
|
||||
"import-sandstorm-warning": "导入的面板将删除所有已存在于面板上的数据并替换他们为导入的面板。",
|
||||
"from-trello": "自 Trello",
|
||||
"from-wekan": "自以前的导出",
|
||||
"import-board-instruction-trello": "在你的Trello看板中,点击“菜单”,然后选择“更多”,“打印与导出”,“导出为 JSON” 并拷贝结果文本",
|
||||
@@ -358,7 +358,7 @@
|
||||
"listImportCardPopup-title": "导入 Trello 卡片",
|
||||
"listMorePopup-title": "更多",
|
||||
"link-list": "关联到这个列表",
|
||||
"list-delete-pop": "所有活动将被从活动动态中删除并且你无法恢复他们,此操作无法撤销。 ",
|
||||
"list-delete-pop": "所有活动将被从活动动态中删除并且你无法恢复他们,此操作无法撤销。",
|
||||
"list-delete-suggest-archive": "您可以移动列表到归档以将其从看板中移除并保留活动。",
|
||||
"lists": "列表",
|
||||
"swimlanes": "泳道图",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "已从归档中恢复",
|
||||
"r-a-card": "一个卡片",
|
||||
"r-when-a-label-is": "当一个标签是",
|
||||
"r-when-the-label-is": "当该标签是",
|
||||
"r-when-the-label": "当该标签是",
|
||||
"r-list-name": "列表名称",
|
||||
"r-when-a-member": "当一个成员是",
|
||||
"r-when-the-member": "当该成员",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "注意:保留一个空字段去匹配所有可能的值。",
|
||||
"r-checklist-note": "注意:清单中的项目必须用都好分割。",
|
||||
"r-when-a-card-is-moved": "当移动卡片到另一个列表时",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+10
-1
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
+22
-13
@@ -17,17 +17,17 @@
|
||||
"act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-createBoard": "created board __board__",
|
||||
"act-createBoard": "新增看板 __board__ ",
|
||||
"act-createSwimlane": "created swimlane __swimlane__ to board __board__",
|
||||
"act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-createList": "added list __list__ to board __board__",
|
||||
"act-createList": "新增清單__list__至看板__board__",
|
||||
"act-addBoardMember": "added member __member__ to board __board__",
|
||||
"act-archivedBoard": "Board __board__ moved to Archive",
|
||||
"act-archivedBoard": "看板 __board__ 已被封存",
|
||||
"act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
|
||||
"act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
|
||||
"act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
|
||||
"act-importBoard": "imported board __board__",
|
||||
"act-importBoard": "看板 __board__ 已匯入",
|
||||
"act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
|
||||
"act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
|
||||
"act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
|
||||
@@ -379,8 +379,8 @@
|
||||
"muted-info": "您將不會收到有關這個看板的任何訊息",
|
||||
"my-boards": "我的看板",
|
||||
"name": "名稱",
|
||||
"no-archived-cards": "No cards in Archive.",
|
||||
"no-archived-lists": "No lists in Archive.",
|
||||
"no-archived-cards": "沒有封存的卡片",
|
||||
"no-archived-lists": "沒有封存的清單",
|
||||
"no-archived-swimlanes": "No swimlanes in Archive.",
|
||||
"no-results": "無結果",
|
||||
"normal": "普通",
|
||||
@@ -417,7 +417,7 @@
|
||||
"restore": "還原",
|
||||
"save": "儲存",
|
||||
"search": "搜尋",
|
||||
"rules": "Rules",
|
||||
"rules": "規則",
|
||||
"search-cards": "Search from card titles and descriptions on this board",
|
||||
"search-example": "Text to search for?",
|
||||
"select-color": "選擇顏色",
|
||||
@@ -443,16 +443,16 @@
|
||||
"team": "團隊",
|
||||
"this-board": "這個看板",
|
||||
"this-card": "這個卡片",
|
||||
"spent-time-hours": "Spent time (hours)",
|
||||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"spent-time-hours": "耗費時間 (小時)",
|
||||
"overtime-hours": "超時 (小時)",
|
||||
"overtime": "超時",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "時間",
|
||||
"title": "標題",
|
||||
"tracking": "追蹤",
|
||||
"tracking-info": "你將會收到與你有關的卡片的所有變更通知",
|
||||
"type": "Type",
|
||||
"type": "類型",
|
||||
"unassign-member": "取消分配成員",
|
||||
"unsaved-description": "未儲存的描述",
|
||||
"unwatch": "取消觀察",
|
||||
@@ -461,7 +461,7 @@
|
||||
"uploaded-avatar": "大頭貼已經上傳",
|
||||
"username": "使用者名稱",
|
||||
"view-it": "檢視",
|
||||
"warn-list-archived": "warning: this card is in an list at Archive",
|
||||
"warn-list-archived": "警告: 卡片位在封存的清單中",
|
||||
"watch": "觀察",
|
||||
"watching": "觀察中",
|
||||
"watching-info": "你將會收到關於這個看板所有的變更通知",
|
||||
@@ -596,7 +596,7 @@
|
||||
"r-unarchived": "Restored from Archive",
|
||||
"r-a-card": "a card",
|
||||
"r-when-a-label-is": "When a label is",
|
||||
"r-when-the-label-is": "When the label is",
|
||||
"r-when-the-label": "When the label",
|
||||
"r-list-name": "list name",
|
||||
"r-when-a-member": "When a member is",
|
||||
"r-when-the-member": "When the member",
|
||||
@@ -669,6 +669,15 @@
|
||||
"r-board-note": "Note: leave a field empty to match every possible value.",
|
||||
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
|
||||
"r-when-a-card-is-moved": "When a card is moved to another list",
|
||||
"r-set": "Set",
|
||||
"r-update": "Update",
|
||||
"r-datefield": "date field",
|
||||
"r-df-start-at": "start",
|
||||
"r-df-due-at": "due",
|
||||
"r-df-end-at": "end",
|
||||
"r-df-received-at": "received",
|
||||
"r-to-current-datetime": "to current date/time",
|
||||
"r-remove-value-from": "Remove value from",
|
||||
"ldap": "LDAP",
|
||||
"oauth2": "OAuth2",
|
||||
"cas": "CAS",
|
||||
|
||||
@@ -166,7 +166,8 @@ if (Meteor.isServer) {
|
||||
}
|
||||
if (activity.attachmentId) {
|
||||
const attachment = activity.attachment();
|
||||
params.attachment = attachment._id;
|
||||
params.attachment = attachment.original.name;
|
||||
params.attachmentId = attachment._id;
|
||||
}
|
||||
if (activity.checklistId) {
|
||||
const checklist = activity.checklist();
|
||||
|
||||
@@ -88,18 +88,22 @@ if (Meteor.isServer) {
|
||||
}
|
||||
});
|
||||
|
||||
Attachments.files.after.remove((userId, doc) => {
|
||||
Activities.remove({
|
||||
attachmentId: doc._id,
|
||||
});
|
||||
Attachments.files.before.remove((userId, doc) => {
|
||||
Activities.insert({
|
||||
userId,
|
||||
type: 'card',
|
||||
activityType: 'deleteAttachment',
|
||||
attachmentId: doc._id,
|
||||
boardId: doc.boardId,
|
||||
cardId: doc.cardId,
|
||||
listId: doc.listId,
|
||||
swimlaneId: doc.swimlaneId,
|
||||
});
|
||||
});
|
||||
|
||||
Attachments.files.after.remove((userId, doc) => {
|
||||
Activities.remove({
|
||||
attachmentId: doc._id,
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -867,6 +867,22 @@ if (Meteor.isServer) {
|
||||
} else throw new Meteor.Error('error-board-doesNotExist');
|
||||
},
|
||||
});
|
||||
|
||||
Meteor.methods({
|
||||
archiveBoard(boardId) {
|
||||
check(boardId, String);
|
||||
const board = Boards.findOne(boardId);
|
||||
if (board) {
|
||||
const userId = Meteor.userId();
|
||||
const index = board.memberIndex(userId);
|
||||
if (index >= 0) {
|
||||
board.archive();
|
||||
return true;
|
||||
} else throw new Meteor.Error('error-board-notAMember');
|
||||
} else throw new Meteor.Error('error-board-doesNotExist');
|
||||
},
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
if (Meteor.isServer) {
|
||||
|
||||
@@ -1685,6 +1685,7 @@ if (Meteor.isServer) {
|
||||
* @param {string} boardId the board ID of the new card
|
||||
* @param {string} listId the list ID of the new card
|
||||
* @param {string} authorID the user ID of the person owning the card
|
||||
* @param {string} parentId the parent ID of the new card
|
||||
* @param {string} title the title of the new card
|
||||
* @param {string} description the description of the new card
|
||||
* @param {string} swimlaneId the swimlane ID of the new card
|
||||
@@ -1695,6 +1696,7 @@ if (Meteor.isServer) {
|
||||
Authentication.checkUserId(req.userId);
|
||||
const paramBoardId = req.params.boardId;
|
||||
const paramListId = req.params.listId;
|
||||
const paramParentId = req.params.parentId;
|
||||
const currentCards = Cards.find({
|
||||
listId: paramListId,
|
||||
archived: false,
|
||||
@@ -1708,6 +1710,7 @@ if (Meteor.isServer) {
|
||||
title: req.body.title,
|
||||
boardId: paramBoardId,
|
||||
listId: paramListId,
|
||||
parentId: paramParentId,
|
||||
description: req.body.description,
|
||||
userId: req.body.authorId,
|
||||
swimlaneId: req.body.swimlaneId,
|
||||
@@ -1761,6 +1764,7 @@ if (Meteor.isServer) {
|
||||
* @param {string} [listId] the new list ID of the card (move operation)
|
||||
* @param {string} [description] the new description of the card
|
||||
* @param {string} [authorId] change the owner of the card
|
||||
* @param {string} [parentId] change the parent of the card
|
||||
* @param {string} [labelIds] the new list of label IDs attached to the card
|
||||
* @param {string} [swimlaneId] the new swimlane ID of the card
|
||||
* @param {string} [members] the new list of member IDs attached to the card
|
||||
@@ -1817,6 +1821,19 @@ if (Meteor.isServer) {
|
||||
}, paramListId);
|
||||
|
||||
}
|
||||
if (req.body.hasOwnProperty('parentId')) {
|
||||
const newParentId = req.body.parentId;
|
||||
Cards.direct.update({
|
||||
_id: paramCardId,
|
||||
listId: paramListId,
|
||||
boardId: paramBoardId,
|
||||
archived: false,
|
||||
}, {
|
||||
$set: {
|
||||
parentId: newParentId,
|
||||
},
|
||||
});
|
||||
}
|
||||
if (req.body.hasOwnProperty('description')) {
|
||||
const newDescription = req.body.description;
|
||||
Cards.direct.update({
|
||||
|
||||
+15
-8
@@ -6,27 +6,34 @@ if (Meteor.isServer) {
|
||||
// `ApiRoutes.path('boards/export', boardId)``
|
||||
// on the client instead of copy/pasting the route path manually between the
|
||||
// client and the server.
|
||||
/*
|
||||
* This route is used to export the board FROM THE APPLICATION.
|
||||
* If user is already logged-in, pass loginToken as param "authToken":
|
||||
* '/api/boards/:boardId/export?authToken=:token'
|
||||
/**
|
||||
* @operation export
|
||||
* @tag Boards
|
||||
*
|
||||
* @summary This route is used to export the board.
|
||||
*
|
||||
* @description If user is already logged-in, pass loginToken as param
|
||||
* "authToken": '/api/boards/:boardId/export?authToken=:token'
|
||||
*
|
||||
* See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/
|
||||
* for detailed explanations
|
||||
*
|
||||
* @param {string} boardId the ID of the board we are exporting
|
||||
* @param {string} authToken the loginToken
|
||||
*/
|
||||
|
||||
|
||||
JsonRoutes.add('get', '/api/boards/:boardId/export', function(req, res) {
|
||||
const boardId = req.params.boardId;
|
||||
let user = null;
|
||||
// todo XXX for real API, first look for token in Authentication: header
|
||||
// then fallback to parameter
|
||||
|
||||
const loginToken = req.query.authToken;
|
||||
if (loginToken) {
|
||||
const hashToken = Accounts._hashLoginToken(loginToken);
|
||||
user = Meteor.users.findOne({
|
||||
'services.resume.loginTokens.hashedToken': hashToken,
|
||||
});
|
||||
} else if (!Meteor.settings.public.sandstorm) {
|
||||
Authentication.checkUserId(req.userId);
|
||||
user = Users.findOne({ _id: req.userId, isAdmin: true });
|
||||
}
|
||||
|
||||
const exporter = new Exporter(boardId);
|
||||
|
||||
@@ -678,7 +678,7 @@ def parse_schemas(schemas_dir):
|
||||
data = ''.join(f.readlines())
|
||||
try:
|
||||
# if the file failed, it's likely it doesn't contain a schema
|
||||
program = esprima.parseScript(data, options={'comment': True, 'loc': True})
|
||||
program = esprima.parseModule(data, options={'comment': True, 'loc': True})
|
||||
except:
|
||||
continue
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v2.66.0",
|
||||
"version": "v2.87.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -81,7 +81,12 @@ Meteor.loginWithCas = function(options, callback) {
|
||||
// check auth on server.
|
||||
Accounts.callLoginMethod({
|
||||
methodArguments: [{ cas: { credentialToken: credentialToken } }],
|
||||
userCallback: callback
|
||||
userCallback: err => {
|
||||
// Fix redirect bug after login successfully
|
||||
if (!err) {
|
||||
window.location.href = '/';
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}, 100);
|
||||
|
||||
@@ -71,14 +71,37 @@ class CAS {
|
||||
callback({message: 'Empty response.'});
|
||||
}
|
||||
if (result['cas:serviceResponse']['cas:authenticationSuccess']) {
|
||||
var userData = {
|
||||
const userData = {
|
||||
id: result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:user'][0].toLowerCase(),
|
||||
}
|
||||
const attributes = result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:attributes'][0];
|
||||
for (var fieldName in attributes) {
|
||||
userData[fieldName] = attributes[fieldName][0];
|
||||
};
|
||||
callback(undefined, true, userData);
|
||||
const attributes = result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:attributes'][0];
|
||||
|
||||
// Check allowed ldap groups if exist (array only)
|
||||
// example cas settings : "allowedLdapGroups" : ["wekan", "admin"],
|
||||
let findedGroup = false;
|
||||
const allowedLdapGroups = Meteor.settings.cas.allowedLdapGroups || false;
|
||||
for (const fieldName in attributes) {
|
||||
if (allowedLdapGroups && fieldName === 'cas:memberOf') {
|
||||
for (const groups in attributes[fieldName]) {
|
||||
const str = attributes[fieldName][groups];
|
||||
if (!Array.isArray(allowedLdapGroups)) {
|
||||
callback({message: 'Settings "allowedLdapGroups" must be an array'});
|
||||
}
|
||||
for (const allowedLdapGroup in allowedLdapGroups) {
|
||||
if (str.search(`cn=${allowedLdapGroups[allowedLdapGroup]}`) >= 0) {
|
||||
findedGroup = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
userData[fieldName] = attributes[fieldName][0];
|
||||
}
|
||||
|
||||
if (allowedLdapGroups && !findedGroup) {
|
||||
callback({message: 'Group not finded.'}, false);
|
||||
} else {
|
||||
callback(undefined, true, userData);
|
||||
}
|
||||
} else {
|
||||
callback(undefined, false);
|
||||
}
|
||||
|
||||
@@ -1,41 +1,44 @@
|
||||
import ldapjs from 'ldapjs';
|
||||
import util from 'util';
|
||||
import Bunyan from 'bunyan';
|
||||
import { log_debug, log_info, log_warn, log_error } from './logger';
|
||||
import {log_debug, log_info, log_warn, log_error} from './logger';
|
||||
|
||||
|
||||
export default class LDAP {
|
||||
constructor(){
|
||||
constructor() {
|
||||
this.ldapjs = ldapjs;
|
||||
|
||||
this.connected = false;
|
||||
|
||||
this.options = {
|
||||
host: this.constructor.settings_get('LDAP_HOST'),
|
||||
port: this.constructor.settings_get('LDAP_PORT'),
|
||||
Reconnect: this.constructor.settings_get('LDAP_RECONNECT'),
|
||||
timeout: this.constructor.settings_get('LDAP_TIMEOUT'),
|
||||
connect_timeout: this.constructor.settings_get('LDAP_CONNECT_TIMEOUT'),
|
||||
idle_timeout: this.constructor.settings_get('LDAP_IDLE_TIMEOUT'),
|
||||
encryption: this.constructor.settings_get('LDAP_ENCRYPTION'),
|
||||
ca_cert: this.constructor.settings_get('LDAP_CA_CERT'),
|
||||
reject_unauthorized: this.constructor.settings_get('LDAP_REJECT_UNAUTHORIZED') || false,
|
||||
Authentication: this.constructor.settings_get('LDAP_AUTHENTIFICATION'),
|
||||
Authentication_UserDN: this.constructor.settings_get('LDAP_AUTHENTIFICATION_USERDN'),
|
||||
Authentication_Password: this.constructor.settings_get('LDAP_AUTHENTIFICATION_PASSWORD'),
|
||||
Authentication_Fallback: this.constructor.settings_get('LDAP_LOGIN_FALLBACK'),
|
||||
BaseDN: this.constructor.settings_get('LDAP_BASEDN'),
|
||||
Internal_Log_Level: this.constructor.settings_get('INTERNAL_LOG_LEVEL'),
|
||||
User_Search_Filter: this.constructor.settings_get('LDAP_USER_SEARCH_FILTER'),
|
||||
User_Search_Scope: this.constructor.settings_get('LDAP_USER_SEARCH_SCOPE'),
|
||||
User_Search_Field: this.constructor.settings_get('LDAP_USER_SEARCH_FIELD'),
|
||||
Search_Page_Size: this.constructor.settings_get('LDAP_SEARCH_PAGE_SIZE'),
|
||||
Search_Size_Limit: this.constructor.settings_get('LDAP_SEARCH_SIZE_LIMIT'),
|
||||
group_filter_enabled: this.constructor.settings_get('LDAP_GROUP_FILTER_ENABLE'),
|
||||
group_filter_object_class: this.constructor.settings_get('LDAP_GROUP_FILTER_OBJECTCLASS'),
|
||||
group_filter_group_id_attribute: this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE'),
|
||||
host : this.constructor.settings_get('LDAP_HOST'),
|
||||
port : this.constructor.settings_get('LDAP_PORT'),
|
||||
Reconnect : this.constructor.settings_get('LDAP_RECONNECT'),
|
||||
timeout : this.constructor.settings_get('LDAP_TIMEOUT'),
|
||||
connect_timeout : this.constructor.settings_get('LDAP_CONNECT_TIMEOUT'),
|
||||
idle_timeout : this.constructor.settings_get('LDAP_IDLE_TIMEOUT'),
|
||||
encryption : this.constructor.settings_get('LDAP_ENCRYPTION'),
|
||||
ca_cert : this.constructor.settings_get('LDAP_CA_CERT'),
|
||||
reject_unauthorized : this.constructor.settings_get('LDAP_REJECT_UNAUTHORIZED') || false,
|
||||
Authentication : this.constructor.settings_get('LDAP_AUTHENTIFICATION'),
|
||||
Authentication_UserDN : this.constructor.settings_get('LDAP_AUTHENTIFICATION_USERDN'),
|
||||
Authentication_Password : this.constructor.settings_get('LDAP_AUTHENTIFICATION_PASSWORD'),
|
||||
Authentication_Fallback : this.constructor.settings_get('LDAP_LOGIN_FALLBACK'),
|
||||
BaseDN : this.constructor.settings_get('LDAP_BASEDN'),
|
||||
Internal_Log_Level : this.constructor.settings_get('INTERNAL_LOG_LEVEL'),
|
||||
User_Authentication : this.constructor.settings_get('LDAP_USER_AUTHENTICATION'),
|
||||
User_Attributes : this.constructor.settings_get('LDAP_USER_ATTRIBUTES'),
|
||||
User_Search_Filter : this.constructor.settings_get('LDAP_USER_SEARCH_FILTER'),
|
||||
User_Search_Scope : this.constructor.settings_get('LDAP_USER_SEARCH_SCOPE'),
|
||||
User_Search_Field : this.constructor.settings_get('LDAP_USER_SEARCH_FIELD'),
|
||||
Search_Page_Size : this.constructor.settings_get('LDAP_SEARCH_PAGE_SIZE'),
|
||||
Search_Size_Limit : this.constructor.settings_get('LDAP_SEARCH_SIZE_LIMIT'),
|
||||
group_filter_enabled : this.constructor.settings_get('LDAP_GROUP_FILTER_ENABLE'),
|
||||
group_filter_object_class : this.constructor.settings_get('LDAP_GROUP_FILTER_OBJECTCLASS'),
|
||||
group_filter_group_id_attribute : this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE'),
|
||||
group_filter_group_member_attribute: this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE'),
|
||||
group_filter_group_member_format: this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT'),
|
||||
group_filter_group_name: this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_NAME'),
|
||||
group_filter_group_member_format : this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT'),
|
||||
group_filter_group_name : this.constructor.settings_get('LDAP_GROUP_FILTER_GROUP_NAME'),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -52,14 +55,16 @@ export default class LDAP {
|
||||
log_warn(`Lookup for unset variable: ${name}`);
|
||||
}
|
||||
}
|
||||
|
||||
connectSync(...args) {
|
||||
if (!this._connectSync) {
|
||||
if (!this._connectSync) {
|
||||
this._connectSync = Meteor.wrapAsync(this.connectAsync, this);
|
||||
}
|
||||
return this._connectSync(...args);
|
||||
}
|
||||
|
||||
searchAllSync(...args) {
|
||||
|
||||
if (!this._searchAllSync) {
|
||||
this._searchAllSync = Meteor.wrapAsync(this.searchAllAsync, this);
|
||||
}
|
||||
@@ -72,19 +77,19 @@ export default class LDAP {
|
||||
let replied = false;
|
||||
|
||||
const connectionOptions = {
|
||||
url: `${ this.options.host }:${ this.options.port }`,
|
||||
timeout: this.options.timeout,
|
||||
url : `${this.options.host}:${this.options.port}`,
|
||||
timeout : this.options.timeout,
|
||||
connectTimeout: this.options.connect_timeout,
|
||||
idleTimeout: this.options.idle_timeout,
|
||||
reconnect: this.options.Reconnect,
|
||||
idleTimeout : this.options.idle_timeout,
|
||||
reconnect : this.options.Reconnect,
|
||||
};
|
||||
|
||||
if (this.options.Internal_Log_Level !== 'disabled') {
|
||||
connectionOptions.log = new Bunyan({
|
||||
name: 'ldapjs',
|
||||
name : 'ldapjs',
|
||||
component: 'client',
|
||||
stream: process.stderr,
|
||||
level: this.options.Internal_Log_Level,
|
||||
stream : process.stderr,
|
||||
level : this.options.Internal_Log_Level,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -95,8 +100,8 @@ export default class LDAP {
|
||||
if (this.options.ca_cert && this.options.ca_cert !== '') {
|
||||
// Split CA cert into array of strings
|
||||
const chainLines = this.constructor.settings_get('LDAP_CA_CERT').split('\n');
|
||||
let cert = [];
|
||||
const ca = [];
|
||||
let cert = [];
|
||||
const ca = [];
|
||||
chainLines.forEach((line) => {
|
||||
cert.push(line);
|
||||
if (line.match(/-END CERTIFICATE-/)) {
|
||||
@@ -108,14 +113,14 @@ export default class LDAP {
|
||||
}
|
||||
|
||||
if (this.options.encryption === 'ssl') {
|
||||
connectionOptions.url = `ldaps://${ connectionOptions.url }`;
|
||||
connectionOptions.url = `ldaps://${connectionOptions.url}`;
|
||||
connectionOptions.tlsOptions = tlsOptions;
|
||||
} else {
|
||||
connectionOptions.url = `ldap://${ connectionOptions.url }`;
|
||||
connectionOptions.url = `ldap://${connectionOptions.url}`;
|
||||
}
|
||||
|
||||
log_info('Connecting', connectionOptions.url);
|
||||
log_debug(`connectionOptions${ util.inspect(connectionOptions)}`);
|
||||
log_debug(`connectionOptions${util.inspect(connectionOptions)}`);
|
||||
|
||||
this.client = ldapjs.createClient(connectionOptions);
|
||||
|
||||
@@ -189,23 +194,42 @@ export default class LDAP {
|
||||
|
||||
if (this.options.User_Search_Filter !== '') {
|
||||
if (this.options.User_Search_Filter[0] === '(') {
|
||||
filter.push(`${ this.options.User_Search_Filter }`);
|
||||
filter.push(`${this.options.User_Search_Filter}`);
|
||||
} else {
|
||||
filter.push(`(${ this.options.User_Search_Filter })`);
|
||||
filter.push(`(${this.options.User_Search_Filter})`);
|
||||
}
|
||||
}
|
||||
|
||||
const usernameFilter = this.options.User_Search_Field.split(',').map((item) => `(${ item }=${ username })`);
|
||||
const usernameFilter = this.options.User_Search_Field.split(',').map((item) => `(${item}=${username})`);
|
||||
|
||||
if (usernameFilter.length === 0) {
|
||||
log_error('LDAP_LDAP_User_Search_Field not defined');
|
||||
} else if (usernameFilter.length === 1) {
|
||||
filter.push(`${ usernameFilter[0] }`);
|
||||
filter.push(`${usernameFilter[0]}`);
|
||||
} else {
|
||||
filter.push(`(|${ usernameFilter.join('') })`);
|
||||
filter.push(`(|${usernameFilter.join('')})`);
|
||||
}
|
||||
|
||||
return `(&${ filter.join('') })`;
|
||||
return `(&${filter.join('')})`;
|
||||
}
|
||||
|
||||
bindUserIfNecessary(username, password) {
|
||||
|
||||
if (this.domainBinded === true) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.options.User_Authentication) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!this.options.BaseDN) throw new Error('BaseDN is not provided');
|
||||
|
||||
const userDn = `uid=${username},${this.options.BaseDN}`;
|
||||
|
||||
this.bindSync(userDn, password);
|
||||
this.domainBinded = true;
|
||||
}
|
||||
|
||||
bindIfNecessary() {
|
||||
@@ -218,22 +242,24 @@ export default class LDAP {
|
||||
}
|
||||
|
||||
log_info('Binding UserDN', this.options.Authentication_UserDN);
|
||||
|
||||
this.bindSync(this.options.Authentication_UserDN, this.options.Authentication_Password);
|
||||
this.domainBinded = true;
|
||||
}
|
||||
|
||||
searchUsersSync(username, page) {
|
||||
this.bindIfNecessary();
|
||||
|
||||
const searchOptions = {
|
||||
filter: this.getUserFilter(username),
|
||||
scope: this.options.User_Search_Scope || 'sub',
|
||||
filter : this.getUserFilter(username),
|
||||
scope : this.options.User_Search_Scope || 'sub',
|
||||
sizeLimit: this.options.Search_Size_Limit,
|
||||
};
|
||||
|
||||
if (!!this.options.User_Attributes) searchOptions.attributes = this.options.User_Attributes.split(',');
|
||||
|
||||
if (this.options.Search_Page_Size > 0) {
|
||||
searchOptions.paged = {
|
||||
pageSize: this.options.Search_Page_Size,
|
||||
pageSize : this.options.Search_Page_Size,
|
||||
pagePause: !!page,
|
||||
};
|
||||
}
|
||||
@@ -266,11 +292,11 @@ export default class LDAP {
|
||||
Unique_Identifier_Field.forEach((item) => {
|
||||
filters.push(new this.ldapjs.filters.EqualityFilter({
|
||||
attribute: item,
|
||||
value: new Buffer(id, 'hex'),
|
||||
value : new Buffer(id, 'hex'),
|
||||
}));
|
||||
});
|
||||
|
||||
filter = new this.ldapjs.filters.OrFilter({filters});
|
||||
filter = new this.ldapjs.filters.OrFilter({ filters });
|
||||
}
|
||||
|
||||
const searchOptions = {
|
||||
@@ -300,7 +326,7 @@ export default class LDAP {
|
||||
|
||||
const searchOptions = {
|
||||
filter: this.getUserFilter(username),
|
||||
scope: this.options.User_Search_Scope || 'sub',
|
||||
scope : this.options.User_Search_Scope || 'sub',
|
||||
};
|
||||
|
||||
log_info('Searching user', username);
|
||||
@@ -320,7 +346,7 @@ export default class LDAP {
|
||||
return result[0];
|
||||
}
|
||||
|
||||
getUserGroups(username, ldapUser){
|
||||
getUserGroups(username, ldapUser) {
|
||||
if (!this.options.group_filter_enabled) {
|
||||
return true;
|
||||
}
|
||||
@@ -328,13 +354,13 @@ export default class LDAP {
|
||||
const filter = ['(&'];
|
||||
|
||||
if (this.options.group_filter_object_class !== '') {
|
||||
filter.push(`(objectclass=${ this.options.group_filter_object_class })`);
|
||||
filter.push(`(objectclass=${this.options.group_filter_object_class})`);
|
||||
}
|
||||
|
||||
if (this.options.group_filter_group_member_attribute !== '') {
|
||||
const format_value = ldapUser[this.options.group_filter_group_member_format];
|
||||
if( format_value ) {
|
||||
filter.push(`(${ this.options.group_filter_group_member_attribute }=${ format_value })`);
|
||||
if (format_value) {
|
||||
filter.push(`(${this.options.group_filter_group_member_attribute}=${format_value})`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,7 +368,7 @@ export default class LDAP {
|
||||
|
||||
const searchOptions = {
|
||||
filter: filter.join('').replace(/#{username}/g, username),
|
||||
scope: 'sub',
|
||||
scope : 'sub',
|
||||
};
|
||||
|
||||
log_debug('Group list filter LDAP:', searchOptions.filter);
|
||||
@@ -354,11 +380,11 @@ export default class LDAP {
|
||||
}
|
||||
|
||||
const grp_identifier = this.options.group_filter_group_id_attribute || 'cn';
|
||||
const groups = [];
|
||||
const groups = [];
|
||||
result.map((item) => {
|
||||
groups.push( item[ grp_identifier ] );
|
||||
groups.push(item[grp_identifier]);
|
||||
});
|
||||
log_debug(`Groups: ${ groups.join(', ')}`);
|
||||
log_debug(`Groups: ${groups.join(', ')}`);
|
||||
return groups;
|
||||
|
||||
}
|
||||
@@ -373,24 +399,24 @@ export default class LDAP {
|
||||
const filter = ['(&'];
|
||||
|
||||
if (this.options.group_filter_object_class !== '') {
|
||||
filter.push(`(objectclass=${ this.options.group_filter_object_class })`);
|
||||
filter.push(`(objectclass=${this.options.group_filter_object_class})`);
|
||||
}
|
||||
|
||||
if (this.options.group_filter_group_member_attribute !== '') {
|
||||
const format_value = ldapUser[this.options.group_filter_group_member_format];
|
||||
if( format_value ) {
|
||||
filter.push(`(${ this.options.group_filter_group_member_attribute }=${ format_value })`);
|
||||
if (format_value) {
|
||||
filter.push(`(${this.options.group_filter_group_member_attribute}=${format_value})`);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.options.group_filter_group_id_attribute !== '') {
|
||||
filter.push(`(${ this.options.group_filter_group_id_attribute }=${ this.options.group_filter_group_name })`);
|
||||
filter.push(`(${this.options.group_filter_group_id_attribute}=${this.options.group_filter_group_name})`);
|
||||
}
|
||||
filter.push(')');
|
||||
|
||||
const searchOptions = {
|
||||
filter: filter.join('').replace(/#{username}/g, username),
|
||||
scope: 'sub',
|
||||
scope : 'sub',
|
||||
};
|
||||
|
||||
log_debug('Group filter LDAP:', searchOptions.filter);
|
||||
@@ -426,15 +452,17 @@ export default class LDAP {
|
||||
searchAllPaged(BaseDN, options, page) {
|
||||
this.bindIfNecessary();
|
||||
|
||||
const processPage = ({entries, title, end, next}) => {
|
||||
const processPage = ({ entries, title, end, next }) => {
|
||||
log_info(title);
|
||||
// Force LDAP idle to wait the record processing
|
||||
this.client._updateIdle(true);
|
||||
page(null, entries, {end, next: () => {
|
||||
// Reset idle timer
|
||||
this.client._updateIdle();
|
||||
next && next();
|
||||
}});
|
||||
page(null, entries, {
|
||||
end, next: () => {
|
||||
// Reset idle timer
|
||||
this.client._updateIdle();
|
||||
next && next();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
this.client.search(BaseDN, options, (error, res) => {
|
||||
@@ -461,7 +489,7 @@ export default class LDAP {
|
||||
processPage({
|
||||
entries,
|
||||
title: 'Internal Page',
|
||||
end: false,
|
||||
end : false,
|
||||
});
|
||||
entries = [];
|
||||
}
|
||||
@@ -473,14 +501,14 @@ export default class LDAP {
|
||||
processPage({
|
||||
entries,
|
||||
title: 'Final Page',
|
||||
end: true,
|
||||
end : true,
|
||||
});
|
||||
} else if (entries.length) {
|
||||
log_info('Page');
|
||||
processPage({
|
||||
entries,
|
||||
title: 'Page',
|
||||
end: false,
|
||||
end : false,
|
||||
next,
|
||||
});
|
||||
entries = [];
|
||||
@@ -492,7 +520,7 @@ export default class LDAP {
|
||||
processPage({
|
||||
entries,
|
||||
title: 'Final Page',
|
||||
end: true,
|
||||
end : true,
|
||||
});
|
||||
entries = [];
|
||||
}
|
||||
@@ -547,7 +575,7 @@ export default class LDAP {
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
this.connected = false;
|
||||
this.connected = false;
|
||||
this.domainBinded = false;
|
||||
log_info('Disconecting');
|
||||
this.client.unbind();
|
||||
|
||||
@@ -41,28 +41,38 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
|
||||
let ldapUser;
|
||||
|
||||
try {
|
||||
ldap.connectSync();
|
||||
const users = ldap.searchUsersSync(loginRequest.username);
|
||||
|
||||
if (users.length !== 1) {
|
||||
log_info('Search returned', users.length, 'record(s) for', loginRequest.username);
|
||||
throw new Error('User not Found');
|
||||
}
|
||||
ldap.connectSync();
|
||||
|
||||
if (!!LDAP.settings_get('LDAP_USER_AUTHENTICATION')) {
|
||||
ldap.bindUserIfNecessary(loginRequest.username, loginRequest.ldapPass);
|
||||
ldapUser = ldap.searchUsersSync(loginRequest.username)[0];
|
||||
} else {
|
||||
|
||||
const users = ldap.searchUsersSync(loginRequest.username);
|
||||
|
||||
if (users.length !== 1) {
|
||||
log_info('Search returned', users.length, 'record(s) for', loginRequest.username);
|
||||
throw new Error('User not Found');
|
||||
}
|
||||
|
||||
if (ldap.authSync(users[0].dn, loginRequest.ldapPass) === true) {
|
||||
if (ldap.isUserInGroup(loginRequest.username, users[0])) {
|
||||
ldapUser = users[0];
|
||||
} else {
|
||||
throw new Error('User not in a valid group');
|
||||
}
|
||||
} else {
|
||||
log_info('Wrong password for', loginRequest.username);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (ldap.authSync(users[0].dn, loginRequest.ldapPass) === true) {
|
||||
if (ldap.isUserInGroup(loginRequest.username, users[0])) {
|
||||
ldapUser = users[0];
|
||||
} else {
|
||||
throw new Error('User not in a valid group');
|
||||
}
|
||||
} else {
|
||||
log_info('Wrong password for', loginRequest.username);
|
||||
}
|
||||
} catch (error) {
|
||||
log_error(error);
|
||||
log_error(error);
|
||||
}
|
||||
|
||||
if (ldapUser === undefined) {
|
||||
if (!ldapUser) {
|
||||
if (LDAP.settings_get('LDAP_LOGIN_FALLBACK') === true) {
|
||||
return fallbackDefaultAccountSystem(self, loginRequest.username, loginRequest.ldapPass);
|
||||
}
|
||||
@@ -76,8 +86,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
|
||||
|
||||
const Unique_Identifier_Field = getLdapUserUniqueID(ldapUser);
|
||||
let user;
|
||||
|
||||
// Attempt to find user by unique identifier
|
||||
// Attempt to find user by unique identifier
|
||||
|
||||
if (Unique_Identifier_Field) {
|
||||
userQuery = {
|
||||
@@ -88,14 +97,14 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
|
||||
log_debug('userQuery', userQuery);
|
||||
|
||||
user = Meteor.users.findOne(userQuery);
|
||||
}
|
||||
}
|
||||
|
||||
// Attempt to find user by username
|
||||
|
||||
let username;
|
||||
let email;
|
||||
|
||||
if (LDAP.settings_get('LDAP_USERNAME_FIELD') !== '') {
|
||||
if (LDAP.settings_get('LDAP_USERNAME_FIELD') !== '') {
|
||||
username = slug(getLdapUsername(ldapUser));
|
||||
} else {
|
||||
username = slug(loginRequest.username);
|
||||
@@ -105,6 +114,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
|
||||
email = getLdapEmail(ldapUser);
|
||||
}
|
||||
|
||||
|
||||
if (!user) {
|
||||
if(email && LDAP.settings_get('LDAP_EMAIL_MATCH_REQUIRE') === true) {
|
||||
if(LDAP.settings_get('LDAP_EMAIL_MATCH_VERIFIED') === true) {
|
||||
@@ -169,6 +179,15 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
|
||||
},
|
||||
};
|
||||
|
||||
if (LDAP.settings_get('LDAP_SYNC_ADMIN_STATUS') === true) {
|
||||
log_debug('Updating admin status');
|
||||
const targetGroups = LDAP.settings_get('LDAP_SYNC_ADMIN_GROUPS').split(',');
|
||||
const groups = ldap.getUserGroups(username, ldapUser).filter((value) => targetGroups.includes(value));
|
||||
|
||||
user.isAdmin = groups.length > 0;
|
||||
Meteor.users.update({_id: user._id}, {$set: {isAdmin: user.isAdmin}});
|
||||
}
|
||||
|
||||
if( LDAP.settings_get('LDAP_SYNC_GROUP_ROLES') === true ) {
|
||||
log_debug('Updating Groups/Roles');
|
||||
const groups = ldap.getUserGroups(username, ldapUser);
|
||||
@@ -207,6 +226,15 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
|
||||
|
||||
const result = addLdapUser(ldapUser, username, loginRequest.ldapPass);
|
||||
|
||||
if (LDAP.settings_get('LDAP_SYNC_ADMIN_STATUS') === true) {
|
||||
log_debug('Updating admin status');
|
||||
const targetGroups = LDAP.settings_get('LDAP_SYNC_ADMIN_GROUPS').split(',');
|
||||
const groups = ldap.getUserGroups(username, ldapUser).filter((value) => targetGroups.includes(value));
|
||||
|
||||
result.isAdmin = groups.length > 0;
|
||||
Meteor.users.update({_id: result.userId}, {$set: {isAdmin: result.isAdmin}});
|
||||
}
|
||||
|
||||
if( LDAP.settings_get('LDAP_SYNC_GROUP_ROLES') === true ) {
|
||||
const groups = ldap.getUserGroups(username, ldapUser);
|
||||
if( groups.length > 0 ) {
|
||||
|
||||
@@ -18,10 +18,9 @@ Oidc.requestCredential = function (options, credentialRequestCompleteCallback) {
|
||||
new ServiceConfiguration.ConfigError('Service oidc not configured.'));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var credentialToken = Random.secret();
|
||||
var loginStyle = OAuth._loginStyle('oidc', config, options);
|
||||
var scope = config.requestPermissions || ['openid', 'profile', 'email'];
|
||||
|
||||
// options
|
||||
options = options || {};
|
||||
@@ -29,7 +28,7 @@ Oidc.requestCredential = function (options, credentialRequestCompleteCallback) {
|
||||
options.response_type = options.response_type || 'code';
|
||||
options.redirect_uri = OAuth._redirectUri('oidc', config);
|
||||
options.state = OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl);
|
||||
options.scope = scope.join(' ');
|
||||
options.scope = config.requestPermissions || 'openid profile email';
|
||||
|
||||
if (config.loginStyle && config.loginStyle == 'popup') {
|
||||
options.display = 'popup';
|
||||
|
||||
@@ -13,12 +13,12 @@ OAuth.registerService('oidc', 2, null, function (query) {
|
||||
if (debug) console.log('XXX: userinfo:', userinfo);
|
||||
|
||||
var serviceData = {};
|
||||
serviceData.id = userinfo[process.env.OAUTH2_ID_MAP] || userinfo["id"];
|
||||
serviceData.username = userinfo[process.env.OAUTH2_USERNAME_MAP] || userinfo["uid"];
|
||||
serviceData.fullname = userinfo[process.env.OAUTH2_FULLNAME_MAP] || userinfo["displayName"];
|
||||
serviceData.id = userinfo[process.env.OAUTH2_ID_MAP]; // || userinfo["id"];
|
||||
serviceData.username = userinfo[process.env.OAUTH2_USERNAME_MAP]; // || userinfo["uid"];
|
||||
serviceData.fullname = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
|
||||
serviceData.accessToken = accessToken;
|
||||
serviceData.expiresAt = expiresAt;
|
||||
serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP] || userinfo["email"];
|
||||
serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
|
||||
|
||||
if (accessToken) {
|
||||
var tokenContent = getTokenContent(accessToken);
|
||||
@@ -31,8 +31,8 @@ OAuth.registerService('oidc', 2, null, function (query) {
|
||||
if (debug) console.log('XXX: serviceData:', serviceData);
|
||||
|
||||
var profile = {};
|
||||
profile.name = userinfo[process.env.OAUTH2_FULLNAME_MAP] || userinfo["displayName"];
|
||||
profile.email = userinfo[process.env.OAUTH2_EMAIL_MAP] || userinfo["email"];
|
||||
profile.name = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
|
||||
profile.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
|
||||
if (debug) console.log('XXX: profile:', profile);
|
||||
|
||||
return {
|
||||
@@ -49,7 +49,12 @@ if (Meteor.release) {
|
||||
var getToken = function (query) {
|
||||
var debug = process.env.DEBUG || false;
|
||||
var config = getConfiguration();
|
||||
var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
|
||||
if(config.tokenEndpoint.includes('https://')){
|
||||
var serverTokenEndpoint = config.tokenEndpoint;
|
||||
}else{
|
||||
var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
|
||||
}
|
||||
var requestPermissions = config.requestPermissions;
|
||||
var response;
|
||||
|
||||
try {
|
||||
@@ -66,6 +71,7 @@ var getToken = function (query) {
|
||||
client_secret: OAuth.openSecret(config.secret),
|
||||
redirect_uri: OAuth._redirectUri('oidc', config),
|
||||
grant_type: 'authorization_code',
|
||||
scope: requestPermissions,
|
||||
state: query.state
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@
|
||||
#---------------------------------------------
|
||||
# CORS: Set Access-Control-Allow-Origin header. Example: *
|
||||
#export CORS=*
|
||||
# To enable the Set Access-Control-Allow-Headers header. "Authorization,Content-Type" is required for cross-origin use of the API.
|
||||
#export CORS_ALLOW_HEADERS=Authorization,Content-Type
|
||||
# To enable the Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations. Example: *
|
||||
#export CORS_EXPOSE_HEADERS=*
|
||||
#---------------------------------------------
|
||||
## Optional: Integration with Matomo https://matomo.org that is installed to your server
|
||||
## The address of the server where Matomo is hosted:
|
||||
@@ -81,6 +85,10 @@
|
||||
#export OAUTH2_AUTH_ENDPOINT=/oauth2/v2.0/authorize
|
||||
#export OAUTH2_USERINFO_ENDPOINT=https://graph.microsoft.com/oidc/userinfo
|
||||
#export OAUTH2_TOKEN_ENDPOINT=/oauth2/v2.0/token
|
||||
# OAUTH2 ID Token Whitelist Fields.
|
||||
#export OAUTH2_ID_TOKEN_WHITELIST_FIELDS=[]
|
||||
# OAUTH2 Request Permissions.
|
||||
#export OAUTH2_REQUEST_PERMISSIONS='openid profile email'
|
||||
# The claim name you want to map to the unique ID field:
|
||||
#export OAUTH2_ID_MAP=email
|
||||
# The claim name you want to map to the username field:
|
||||
@@ -191,6 +199,8 @@
|
||||
# LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate
|
||||
# example : export LDAP_REJECT_UNAUTHORIZED=true
|
||||
#export LDAP_REJECT_UNAUTHORIZED=false
|
||||
# Option to login to the LDAP server with the user's own username and password, instead of an administrator key. Default: false (use administrator key).
|
||||
#export LDAP_USER_AUTHENTICATION=true
|
||||
# LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
|
||||
# example : export LDAP_USER_SEARCH_FILTER=
|
||||
#export LDAP_USER_SEARCH_FILTER=
|
||||
|
||||
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 268,
|
||||
appVersion = 289,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "2.66.0~2019-05-09"),
|
||||
appMarketingVersion = (defaultText = "2.87.0~2019-06-21"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
@@ -76,9 +76,11 @@ Meteor.startup(() => {
|
||||
authorizationEndpoint: process.env.OAUTH2_AUTH_ENDPOINT,
|
||||
userinfoEndpoint: process.env.OAUTH2_USERINFO_ENDPOINT,
|
||||
tokenEndpoint: process.env.OAUTH2_TOKEN_ENDPOINT,
|
||||
idTokenWhitelistFields: [],
|
||||
requestPermissions: ['openid'],
|
||||
idTokenWhitelistFields: process.env.OAUTH2_ID_TOKEN_WHITELIST_FIELDS || [],
|
||||
requestPermissions: process.env.OAUTH2_REQUEST_PERMISSIONS,
|
||||
},
|
||||
// OAUTH2_ID_TOKEN_WHITELIST_FIELDS || [],
|
||||
// OAUTH2_REQUEST_PERMISSIONS || 'openid profile email',
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -7,5 +7,17 @@ Meteor.startup(() => {
|
||||
return next();
|
||||
});
|
||||
}
|
||||
if ( process.env.CORS_ALLOW_HEADERS ) {
|
||||
WebApp.rawConnectHandlers.use(function(req, res, next) {
|
||||
res.setHeader('Access-Control-Allow-Headers', process.env.CORS_ALLOW_HEADERS);
|
||||
return next();
|
||||
});
|
||||
}
|
||||
if ( process.env.CORS_EXPOSE_HEADERS ) {
|
||||
WebApp.rawConnectHandlers.use(function(req, res, next) {
|
||||
res.setHeader('Access-Control-Expose-Headers', process.env.CORS_EXPOSE_HEADERS);
|
||||
return next();
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
@@ -18,7 +18,7 @@ Meteor.methods({
|
||||
|
||||
// label activity did not work yet, see wekan/models/activities.js
|
||||
const quoteParams = _.clone(params);
|
||||
['card', 'list', 'oldList', 'board', 'oldBoard', 'comment', 'checklist', 'swimlane', 'oldSwimlane', 'label'].forEach((key) => {
|
||||
['card', 'list', 'oldList', 'board', 'oldBoard', 'comment', 'checklist', 'swimlane', 'oldSwimlane', 'label', 'attachment'].forEach((key) => {
|
||||
if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`;
|
||||
});
|
||||
|
||||
|
||||
@@ -59,9 +59,12 @@ Meteor.publish('archivedBoards', function() {
|
||||
});
|
||||
});
|
||||
|
||||
Meteor.publishRelations('board', function(boardId) {
|
||||
// If isArchived = false, this will only return board elements which are not archived.
|
||||
// If isArchived = true, this will only return board elements which are archived.
|
||||
Meteor.publishRelations('board', function(boardId, isArchived) {
|
||||
this.unblock();
|
||||
check(boardId, String);
|
||||
check(isArchived, Boolean);
|
||||
const thisUserId = this.userId;
|
||||
|
||||
this.cursor(Boards.find({
|
||||
@@ -75,8 +78,8 @@ Meteor.publishRelations('board', function(boardId) {
|
||||
],
|
||||
// Sort required to ensure oplog usage
|
||||
}, { limit: 1, sort: { _id: 1 } }), function(boardId, board) {
|
||||
this.cursor(Lists.find({ boardId }));
|
||||
this.cursor(Swimlanes.find({ boardId }));
|
||||
this.cursor(Lists.find({ boardId, archived: isArchived }));
|
||||
this.cursor(Swimlanes.find({ boardId, archived: isArchived }));
|
||||
this.cursor(Integrations.find({ boardId }));
|
||||
this.cursor(CustomFields.find({ boardIds: {$in: [boardId]} }, { sort: { name: 1 } }));
|
||||
|
||||
@@ -115,8 +118,9 @@ Meteor.publishRelations('board', function(boardId) {
|
||||
parentCards.selector = (_ids) => ({ parentId: _ids });
|
||||
const boards = this.join(Boards);
|
||||
const subCards = this.join(Cards);
|
||||
subCards.selector = (_ids) => ({ archived: isArchived });
|
||||
|
||||
this.cursor(Cards.find({ boardId: {$in: [boardId, board.subtasksDefaultBoardId]}}), function(cardId, card) {
|
||||
this.cursor(Cards.find({ boardId: {$in: [boardId, board.subtasksDefaultBoardId]}, archived: isArchived }), function(cardId, card) {
|
||||
if (card.type === 'cardType-linkedCard') {
|
||||
const impCardId = card.linkedId;
|
||||
subCards.push(impCardId);
|
||||
|
||||
Loaded 100 of 107 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user