mirror of
https://github.com/wekan/wekan.git
synced 2025-04-22 04:57:07 -04:00
Merge branch 'devel'
This commit is contained in:
commit
6aca70f0d1
74 changed files with 2480 additions and 526 deletions
|
@ -3,13 +3,13 @@
|
|||
# 'meteor add' and 'meteor remove' will edit this file for you,
|
||||
# but you can also edit it by hand.
|
||||
|
||||
meteor-base@1.0.4
|
||||
meteor-base@1.2.0
|
||||
|
||||
# Build system
|
||||
ecmascript@0.7.2
|
||||
stylus@2.513.9
|
||||
standard-minifier-css@1.3.4
|
||||
standard-minifier-js@2.0.0
|
||||
ecmascript@0.9.0
|
||||
stylus@2.513.13
|
||||
standard-minifier-css@1.3.5
|
||||
standard-minifier-js@2.2.0
|
||||
mquandalle:jade
|
||||
|
||||
# Polyfills
|
||||
|
@ -17,18 +17,16 @@ es5-shim@4.6.15
|
|||
|
||||
# Collections
|
||||
aldeed:collection2
|
||||
cfs:gridfs
|
||||
cfs:standard-packages
|
||||
cottz:publish-relations
|
||||
dburles:collection-helpers
|
||||
idmontie:migrations
|
||||
matb33:collection-hooks
|
||||
matteodem:easy-search
|
||||
mongo@1.1.16
|
||||
mongo@1.3.1
|
||||
mquandalle:collection-mutations
|
||||
|
||||
# Account system
|
||||
accounts-password@1.3.5
|
||||
kenton:accounts-sandstorm
|
||||
service-configuration@1.0.11
|
||||
useraccounts:unstyled
|
||||
|
@ -38,9 +36,9 @@ useraccounts:flow-routing
|
|||
check@1.2.5
|
||||
jquery@1.11.10
|
||||
random@1.0.10
|
||||
reactive-dict@1.1.8
|
||||
reactive-dict@1.2.0
|
||||
session@1.1.7
|
||||
tracker@1.1.2
|
||||
tracker@1.1.3
|
||||
underscore@1.0.10
|
||||
3stack:presence
|
||||
alethes:pages
|
||||
|
@ -48,7 +46,6 @@ arillo:flow-router-helpers
|
|||
audit-argument-checks@1.0.7
|
||||
kadira:blaze-layout
|
||||
kadira:dochead
|
||||
meteorhacks:fast-render
|
||||
meteorhacks:picker
|
||||
meteorhacks:subs-manager
|
||||
mquandalle:autofocus
|
||||
|
@ -56,7 +53,7 @@ mquandalle:moment
|
|||
ongoworks:speakingurl
|
||||
raix:handlebar-helpers
|
||||
tap:i18n
|
||||
http
|
||||
http@1.3.0
|
||||
|
||||
# UI components
|
||||
blaze
|
||||
|
@ -74,10 +71,15 @@ templates:tabs
|
|||
verron:autosize
|
||||
simple:json-routes
|
||||
rajit:bootstrap3-datepicker
|
||||
kadira:flow-router
|
||||
shell-server@0.2.3
|
||||
shell-server@0.3.0
|
||||
simple:rest-accounts-password
|
||||
useraccounts:core
|
||||
email@1.2.3
|
||||
horka:swipebox
|
||||
dynamic-import@0.2.0
|
||||
staringatlights:fast-render
|
||||
staringatlights:flow-router
|
||||
|
||||
mixmax:smart-disconnect
|
||||
accounts-password@1.5.0
|
||||
cfs:gridfs
|
||||
|
|
|
@ -1 +1 @@
|
|||
METEOR@1.4.4.1
|
||||
METEOR@1.6.0.1
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
3stack:presence@1.0.5
|
||||
accounts-base@1.2.16
|
||||
accounts-password@1.3.5
|
||||
3stack:presence@1.1.2
|
||||
accounts-base@1.4.0
|
||||
accounts-password@1.5.0
|
||||
aldeed:collection2@2.10.0
|
||||
aldeed:collection2-core@1.2.0
|
||||
aldeed:schema-deny@1.1.0
|
||||
aldeed:schema-index@1.1.1
|
||||
aldeed:simple-schema@1.5.3
|
||||
alethes:pages@1.8.6
|
||||
allow-deny@1.0.9
|
||||
allow-deny@1.1.0
|
||||
arillo:flow-router-helpers@0.5.2
|
||||
audit-argument-checks@1.0.7
|
||||
autoupdate@1.3.12
|
||||
babel-compiler@6.18.2
|
||||
babel-runtime@1.0.1
|
||||
babel-compiler@6.24.7
|
||||
babel-runtime@1.1.1
|
||||
base64@1.0.10
|
||||
binary-heap@1.0.10
|
||||
blaze@2.3.2
|
||||
blaze-tools@1.0.10
|
||||
boilerplate-generator@1.0.11
|
||||
boilerplate-generator@1.3.1
|
||||
caching-compiler@1.1.9
|
||||
caching-html-compiler@1.1.2
|
||||
callback-hook@1.0.10
|
||||
|
@ -27,7 +27,7 @@ cfs:collection@0.5.5
|
|||
cfs:collection-filters@0.2.4
|
||||
cfs:data-man@0.0.6
|
||||
cfs:file@0.1.17
|
||||
cfs:gridfs@0.0.33
|
||||
cfs:gridfs@0.0.34
|
||||
cfs:http-methods@0.0.32
|
||||
cfs:http-publish@0.0.13
|
||||
cfs:power-queue@0.9.11
|
||||
|
@ -40,19 +40,23 @@ cfs:upload-http@0.0.20
|
|||
cfs:worker@0.1.4
|
||||
check@1.2.5
|
||||
chuangbo:cookie@1.1.0
|
||||
coffeescript@1.12.3_1
|
||||
cottz:publish-relations@2.0.7
|
||||
coffeescript@1.12.7_3
|
||||
coffeescript-compiler@1.12.7_3
|
||||
cottz:publish-relations@2.0.8
|
||||
dburles:collection-helpers@1.1.0
|
||||
ddp@1.2.5
|
||||
ddp-client@1.3.4
|
||||
ddp-common@1.2.8
|
||||
ddp@1.4.0
|
||||
ddp-client@2.2.0
|
||||
ddp-common@1.3.0
|
||||
ddp-rate-limiter@1.0.7
|
||||
ddp-server@1.3.14
|
||||
ddp-server@2.1.1
|
||||
deps@1.0.12
|
||||
diff-sequence@1.0.7
|
||||
ecmascript@0.7.3
|
||||
ecmascript-runtime@0.3.15
|
||||
ejson@1.0.13
|
||||
dynamic-import@0.2.1
|
||||
ecmascript@0.9.0
|
||||
ecmascript-runtime@0.5.0
|
||||
ecmascript-runtime-client@0.5.0
|
||||
ecmascript-runtime-server@0.5.0
|
||||
ejson@1.1.0
|
||||
email@1.2.3
|
||||
es5-shim@4.6.15
|
||||
fastclick@1.0.13
|
||||
|
@ -62,41 +66,40 @@ horka:swipebox@1.0.2
|
|||
hot-code-push@1.0.4
|
||||
html-tools@1.0.11
|
||||
htmljs@1.0.11
|
||||
http@1.2.12
|
||||
http@1.3.0
|
||||
id-map@1.0.9
|
||||
idmontie:migrations@1.0.3
|
||||
jquery@1.11.10
|
||||
kadira:blaze-layout@2.3.0
|
||||
kadira:dochead@1.5.0
|
||||
kadira:flow-router@2.12.1
|
||||
kenton:accounts-sandstorm@0.6.0
|
||||
kenton:accounts-sandstorm@0.7.0
|
||||
launch-screen@1.1.1
|
||||
livedata@1.0.18
|
||||
localstorage@1.0.12
|
||||
logging@1.1.17
|
||||
localstorage@1.2.0
|
||||
logging@1.1.19
|
||||
matb33:collection-hooks@0.8.4
|
||||
matteodem:easy-search@1.6.4
|
||||
mdg:validation-error@0.5.1
|
||||
meteor@1.6.1
|
||||
meteor-base@1.0.4
|
||||
meteor@1.8.2
|
||||
meteor-base@1.2.0
|
||||
meteor-platform@1.2.6
|
||||
meteorhacks:aggregate@1.3.0
|
||||
meteorhacks:collection-utils@1.2.0
|
||||
meteorhacks:fast-render@2.16.0
|
||||
meteorhacks:inject-data@2.0.0
|
||||
meteorhacks:meteorx@1.4.1
|
||||
meteorhacks:picker@1.0.3
|
||||
meteorhacks:subs-manager@1.6.4
|
||||
meteorspark:util@0.2.0
|
||||
minifier-css@1.2.16
|
||||
minifier-js@2.0.0
|
||||
minifier-js@2.2.2
|
||||
minifiers@1.1.8-faster-rebuild.0
|
||||
minimongo@1.0.21
|
||||
minimongo@1.4.3
|
||||
mixmax:smart-disconnect@0.0.4
|
||||
mobile-status-bar@1.0.14
|
||||
modules@0.8.2
|
||||
modules-runtime@0.7.10
|
||||
mongo@1.1.16
|
||||
modules@0.11.0
|
||||
modules-runtime@0.9.1
|
||||
mongo@1.3.1
|
||||
mongo-dev-server@1.1.0
|
||||
mongo-id@1.0.6
|
||||
mongo-livedata@1.0.12
|
||||
mousetrap:mousetrap@1.4.6_1
|
||||
|
@ -109,24 +112,24 @@ mquandalle:jquery-ui-drag-drop-sort@0.2.0
|
|||
mquandalle:moment@1.0.1
|
||||
mquandalle:mousetrap-bindglobal@0.0.1
|
||||
mquandalle:perfect-scrollbar@0.6.5_2
|
||||
npm-bcrypt@0.9.2
|
||||
npm-mongo@2.2.24
|
||||
npm-bcrypt@0.9.3
|
||||
npm-mongo@2.2.33
|
||||
observe-sequence@1.0.16
|
||||
ongoworks:speakingurl@1.1.0
|
||||
ordered-dict@1.0.9
|
||||
peerlibrary:assert@0.2.5
|
||||
peerlibrary:base-component@0.16.0
|
||||
peerlibrary:blaze-components@0.15.1
|
||||
peerlibrary:computed-field@0.6.1
|
||||
peerlibrary:computed-field@0.7.0
|
||||
peerlibrary:reactive-field@0.3.0
|
||||
perak:markdown@1.0.5
|
||||
promise@0.8.8
|
||||
promise@0.10.0
|
||||
raix:eventemitter@0.1.3
|
||||
raix:handlebar-helpers@0.2.5
|
||||
rajit:bootstrap3-datepicker@1.6.4
|
||||
rajit:bootstrap3-datepicker@1.7.1
|
||||
random@1.0.10
|
||||
rate-limit@1.0.8
|
||||
reactive-dict@1.1.8
|
||||
reactive-dict@1.2.0
|
||||
reactive-var@1.0.11
|
||||
reload@1.1.11
|
||||
retry@1.0.9
|
||||
|
@ -135,26 +138,29 @@ seriousm:emoji-continued@1.4.0
|
|||
service-configuration@1.0.11
|
||||
session@1.1.7
|
||||
sha@1.0.9
|
||||
shell-server@0.2.3
|
||||
shell-server@0.3.1
|
||||
simple:authenticate-user-by-token@1.0.1
|
||||
simple:json-routes@2.1.0
|
||||
simple:rest-accounts-password@1.1.2
|
||||
simple:rest-bearer-token-parser@1.0.1
|
||||
simple:rest-json-error-handler@1.0.1
|
||||
softwarerero:accounts-t9n@1.3.9
|
||||
softwarerero:accounts-t9n@1.3.11
|
||||
spacebars@1.0.15
|
||||
spacebars-compiler@1.1.2
|
||||
spacebars-compiler@1.1.3
|
||||
srp@1.0.10
|
||||
standard-minifier-css@1.3.4
|
||||
standard-minifier-js@2.0.0
|
||||
stylus@2.513.9
|
||||
standard-minifier-css@1.3.5
|
||||
standard-minifier-js@2.2.3
|
||||
staringatlights:fast-render@2.16.5
|
||||
staringatlights:flow-router@2.12.2
|
||||
staringatlights:inject-data@2.0.5
|
||||
stylus@2.513.13
|
||||
tap:i18n@1.8.2
|
||||
templates:tabs@2.3.0
|
||||
templating@1.3.2
|
||||
templating-compiler@1.3.2
|
||||
templating-compiler@1.3.3
|
||||
templating-runtime@1.3.2
|
||||
templating-tools@1.1.2
|
||||
tracker@1.1.2
|
||||
tracker@1.1.3
|
||||
ui@1.0.13
|
||||
underscore@1.0.10
|
||||
url@1.1.0
|
||||
|
@ -162,6 +168,6 @@ useraccounts:core@1.14.2
|
|||
useraccounts:flow-routing@1.14.2
|
||||
useraccounts:unstyled@1.14.2
|
||||
verron:autosize@3.0.8
|
||||
webapp@1.3.15
|
||||
webapp@1.4.0
|
||||
webapp-hashing@1.0.9
|
||||
zimme:active-route@2.3.2
|
||||
|
|
|
@ -2,9 +2,9 @@ dist: trusty
|
|||
sudo: required
|
||||
|
||||
env:
|
||||
TRAVIS_DOCKER_COMPOSE_VERSION: 1.12.0
|
||||
TRAVIS_NODE_VERSION: 4.8.4
|
||||
TRAVIS_NPM_VERSION: 4.6.1
|
||||
TRAVIS_DOCKER_COMPOSE_VERSION: 1.17.0
|
||||
TRAVIS_NODE_VERSION: 8.9.3
|
||||
TRAVIS_NPM_VERSION: 5.5.1
|
||||
|
||||
before_install:
|
||||
- sudo apt-get update -y
|
||||
|
|
|
@ -39,7 +39,7 @@ host = https://www.transifex.com
|
|||
# tap:i18n requires us to use `-` separator in the language identifiers whereas
|
||||
# Transifex uses a `_` separator, without an option to customize it on one side
|
||||
# or the other, so we need to do a Manual mapping.
|
||||
lang_map = en_GB:en-GB, es_AR:es-AR, el_GR:el, fa_IR:fa, fi_FI:fi, hu_HU:hu, id_ID:id, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, zh_CN:zh-CN, zh_TW:zh-TW
|
||||
lang_map = en_GB:en-GB, es_AR:es-AR, el_GR:el, fa_IR:fa, fi_FI:fi, ig:ibo, hu_HU:hu, id_ID:id, mn_MN:mn, no:nb, lv_LV:lv, pt_BR:pt-BR, ro_RO:ro, zh_CN:zh-CN, zh_TW:zh-TW
|
||||
|
||||
[wekan.application]
|
||||
file_filter = i18n/<lang>.i18n.json
|
||||
|
|
24
CHANGELOG.md
24
CHANGELOG.md
|
@ -1,3 +1,27 @@
|
|||
# v0.65 2018-01-28 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
* [Swimlanes, part 1](https://github.com/wekan/wekan/issues/955);
|
||||
* Added new language: Igbo.
|
||||
|
||||
Thanks to GitHub user andresmanelli for contributions.
|
||||
|
||||
# v0.64 2018-01-22 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
* [Different icons for start and due date](https://github.com/wekan/wekan/pull/1420).
|
||||
* Added new languages: Mongolian and Portuguese;
|
||||
* Upgraded to Meteor 1.6.0.1, Node 8.9.3, NPM 5.5.1 and fibers 2.0.0.
|
||||
|
||||
and fixes the following bugs:
|
||||
|
||||
* [Fix for dragging into scrolled-down list](https://github.com/wekan/wekan/pull/1424).
|
||||
* [Fix double slash bug on snap](https://github.com/wekan/wekan/issues/962#issuecomment-357785748).
|
||||
|
||||
Thanks to GitHub users dpoznyak, mmarschall and xet7 for their contributions.
|
||||
|
||||
# v0.63 2017-12-20 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
|
32
Dockerfile
32
Dockerfile
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
MAINTAINER wekan
|
||||
|
||||
# Declare Arguments
|
||||
|
@ -13,14 +13,13 @@ ARG SRC_PATH
|
|||
|
||||
# Set the environment variables (defaults where required)
|
||||
# paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
|
||||
ENV BUILD_DEPS="wget curl bzip2 build-essential python git ca-certificates gcc-4.9 paxctl"
|
||||
ENV GOSU_VERSION=1.10
|
||||
ENV NODE_VERSION ${NODE_VERSION:-v4.8.7}
|
||||
ENV METEOR_RELEASE ${METEOR_RELEASE:-1.4.4.1}
|
||||
ENV BUILD_DEPS="apt-utils gnupg gosu wget curl bzip2 build-essential python git ca-certificates gcc-7 paxctl"
|
||||
ENV NODE_VERSION ${NODE_VERSION:-v8.9.3}
|
||||
ENV METEOR_RELEASE ${METEOR_RELEASE:-1.6.0.1}
|
||||
ENV USE_EDGE ${USE_EDGE:-false}
|
||||
ENV METEOR_EDGE ${METEOR_EDGE:-1.5-beta.17}
|
||||
ENV NPM_VERSION ${NPM_VERSION:-4.6.1}
|
||||
ENV FIBERS_VERSION ${FIBERS_VERSION:-1.0.15}
|
||||
ENV NPM_VERSION ${NPM_VERSION:-5.5.1}
|
||||
ENV FIBERS_VERSION ${FIBERS_VERSION:-2.0.0}
|
||||
ENV ARCHITECTURE ${ARCHITECTURE:-linux-x64}
|
||||
ENV SRC_PATH ${SRC_PATH:-./}
|
||||
|
||||
|
@ -32,17 +31,7 @@ RUN \
|
|||
useradd --user-group --system --home-dir /home/wekan wekan && \
|
||||
\
|
||||
# OS dependencies
|
||||
apt-get update -y && apt-get dist-upgrade -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
|
||||
\
|
||||
# Gosu installation
|
||||
GOSU_ARCHITECTURE="$(dpkg --print-architecture | awk -F- '{ print $NF }')" && \
|
||||
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${GOSU_ARCHITECTURE}" && \
|
||||
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${GOSU_ARCHITECTURE}.asc" && \
|
||||
export GNUPGHOME="$(mktemp -d)" && \
|
||||
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 && \
|
||||
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu && \
|
||||
rm -R "$GNUPGHOME" /usr/local/bin/gosu.asc && \
|
||||
chmod +x /usr/local/bin/gosu && \
|
||||
apt-get update -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
|
||||
\
|
||||
# Download nodejs
|
||||
wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
|
||||
|
@ -90,14 +79,14 @@ RUN \
|
|||
# Change user to wekan and install meteor
|
||||
cd /home/wekan/ && \
|
||||
chown wekan:wekan --recursive /home/wekan && \
|
||||
curl https://install.meteor.com -o ./install_meteor.sh && \
|
||||
curl https://install.meteor.com -o /home/wekan/install_meteor.sh && \
|
||||
sed -i "s|RELEASE=.*|RELEASE=${METEOR_RELEASE}\"\"|g" ./install_meteor.sh && \
|
||||
echo "Starting meteor ${METEOR_RELEASE} installation... \n" && \
|
||||
chown wekan:wekan ./install_meteor.sh && \
|
||||
chown wekan:wekan /home/wekan/install_meteor.sh && \
|
||||
\
|
||||
# Check if opting for a release candidate instead of major release
|
||||
if [ "$USE_EDGE" = false ]; then \
|
||||
gosu wekan:wekan sh ./install_meteor.sh; \
|
||||
gosu wekan:wekan sh /home/wekan/install_meteor.sh; \
|
||||
else \
|
||||
gosu wekan:wekan git clone --recursive --depth 1 -b release/METEOR@${METEOR_EDGE} git://github.com/meteor/meteor.git /home/wekan/.meteor; \
|
||||
fi; \
|
||||
|
@ -119,7 +108,6 @@ RUN \
|
|||
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
|
||||
cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
|
||||
chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
|
||||
gosu wekan:wekan sed -i "s|build\/Release\/bson|browser_build\/bson|g" /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/cfs_gridfs/node_modules/mongodb/node_modules/bson/ext/index.js && \
|
||||
cd /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt && \
|
||||
gosu wekan:wekan rm -rf node_modules/bcrypt && \
|
||||
gosu wekan:wekan npm install bcrypt && \
|
||||
|
|
|
@ -20,33 +20,8 @@ template(name="boardBody")
|
|||
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
|
||||
if showOverlay.get
|
||||
.board-overlay
|
||||
.lists.js-lists
|
||||
if isMiniScreen
|
||||
if currentList
|
||||
+list(currentList)
|
||||
else
|
||||
each currentBoard.lists
|
||||
+miniList(this)
|
||||
if currentUser.isBoardMember
|
||||
+addListForm
|
||||
else
|
||||
each currentBoard.lists
|
||||
+list(this)
|
||||
if currentCardIsInThisList
|
||||
+cardDetails(currentCard)
|
||||
if currentUser.isBoardMember
|
||||
+addListForm
|
||||
|
||||
template(name="addListForm")
|
||||
.list.js-list.list-composer.js-list-composer
|
||||
.list-header
|
||||
+inlinedForm(autoclose=false)
|
||||
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
|
||||
autocomplete="off" autofocus)
|
||||
.edit-controls.clearfix
|
||||
button.primary.confirm(type="submit") {{_ 'save'}}
|
||||
a.fa.fa-times-thin.js-close-inlined-form
|
||||
else
|
||||
a.open-list-composer.js-open-inlined-form
|
||||
i.fa.fa-plus
|
||||
| {{_ 'add-list'}}
|
||||
if isViewSwimlanes
|
||||
each currentBoard.swimlanes
|
||||
+swimlane(this)
|
||||
if isViewLists
|
||||
+listsGroup
|
||||
|
|
|
@ -29,10 +29,6 @@ BlazeComponent.extendComponent({
|
|||
this.mouseHasEnterCardDetails = false;
|
||||
},
|
||||
|
||||
openNewListForm() {
|
||||
this.childComponents('addListForm')[0].open();
|
||||
},
|
||||
|
||||
// XXX Flow components allow us to avoid creating these two setter methods by
|
||||
// exposing a public API to modify the component state. We need to investigate
|
||||
// best practices here.
|
||||
|
@ -47,16 +43,22 @@ BlazeComponent.extendComponent({
|
|||
});
|
||||
},
|
||||
|
||||
currentCardIsInThisList() {
|
||||
const currentCard = Cards.findOne(Session.get('currentCard'));
|
||||
const listId = this.currentData()._id;
|
||||
return currentCard && currentCard.listId === listId;
|
||||
},
|
||||
|
||||
onlyShowCurrentCard() {
|
||||
return Utils.isMiniScreen() && Session.get('currentCard');
|
||||
},
|
||||
|
||||
isViewSwimlanes() {
|
||||
const currentBoardId = Session.get('currentBoard');
|
||||
const board = Boards.findOne(currentBoardId);
|
||||
return (board.view === 'board-view-swimlanes');
|
||||
},
|
||||
|
||||
isViewLists() {
|
||||
const currentBoardId = Session.get('currentBoard');
|
||||
const board = Boards.findOne(currentBoardId);
|
||||
return (board.view === 'board-view-lists');
|
||||
},
|
||||
|
||||
events() {
|
||||
return [{
|
||||
// XXX The board-overlay div should probably be moved to the parent
|
||||
|
@ -66,147 +68,11 @@ BlazeComponent.extendComponent({
|
|||
this.showOverlay.set(false);
|
||||
}
|
||||
},
|
||||
|
||||
// Click-and-drag action
|
||||
'mousedown .board-canvas'(evt) {
|
||||
// Translating the board canvas using the click-and-drag action can
|
||||
// conflict with the build-in browser mechanism to select text. We
|
||||
// define a list of elements in which we disable the dragging because
|
||||
// the user will legitimately expect to be able to select some text with
|
||||
// his mouse.
|
||||
const noDragInside = ['a', 'input', 'textarea', 'p', '.js-list-header'];
|
||||
if ($(evt.target).closest(noDragInside.join(',')).length === 0 && $('.lists').prop('clientHeight') > evt.offsetY) {
|
||||
this._isDragging = true;
|
||||
this._lastDragPositionX = evt.clientX;
|
||||
}
|
||||
},
|
||||
'mouseup'() {
|
||||
if (this._isDragging) {
|
||||
this._isDragging = false;
|
||||
}
|
||||
},
|
||||
'mousemove'(evt) {
|
||||
if (this._isDragging) {
|
||||
// Update the canvas position
|
||||
this.listsDom.scrollLeft -= evt.clientX - this._lastDragPositionX;
|
||||
this._lastDragPositionX = evt.clientX;
|
||||
// Disable browser text selection while dragging
|
||||
evt.stopPropagation();
|
||||
evt.preventDefault();
|
||||
// Don't close opened card or inlined form at the end of the
|
||||
// click-and-drag.
|
||||
EscapeActions.executeUpTo('popup-close');
|
||||
EscapeActions.preventNextClick();
|
||||
}
|
||||
},
|
||||
}];
|
||||
},
|
||||
}).register('board');
|
||||
|
||||
Template.boardBody.onRendered(function() {
|
||||
const self = BlazeComponent.getComponentForElement(this.firstNode);
|
||||
|
||||
self.listsDom = this.find('.js-lists');
|
||||
|
||||
if (!Session.get('currentCard')) {
|
||||
self.scrollLeft();
|
||||
}
|
||||
|
||||
// We want to animate the card details window closing. We rely on CSS
|
||||
// transition for the actual animation.
|
||||
self.listsDom._uihooks = {
|
||||
removeElement(node) {
|
||||
const removeNode = _.once(() => {
|
||||
node.parentNode.removeChild(node);
|
||||
});
|
||||
if ($(node).hasClass('js-card-details')) {
|
||||
$(node).css({
|
||||
flexBasis: 0,
|
||||
padding: 0,
|
||||
});
|
||||
$(self.listsDom).one(CSSEvents.transitionend, removeNode);
|
||||
} else {
|
||||
removeNode();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
$(self.listsDom).sortable({
|
||||
tolerance: 'pointer',
|
||||
helper: 'clone',
|
||||
handle: '.js-list-header',
|
||||
items: '.js-list:not(.js-list-composer)',
|
||||
placeholder: 'list placeholder',
|
||||
distance: 7,
|
||||
start(evt, ui) {
|
||||
ui.placeholder.height(ui.helper.height());
|
||||
Popup.close();
|
||||
},
|
||||
stop() {
|
||||
$(self.listsDom).find('.js-list:not(.js-list-composer)').each(
|
||||
(i, list) => {
|
||||
const data = Blaze.getData(list);
|
||||
Lists.update(data._id, {
|
||||
$set: {
|
||||
sort: i,
|
||||
},
|
||||
});
|
||||
}
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
function userIsMember() {
|
||||
return Meteor.user() && Meteor.user().isBoardMember();
|
||||
}
|
||||
|
||||
// Disable drag-dropping while in multi-selection mode, or if the current user
|
||||
// is not a board member
|
||||
self.autorun(() => {
|
||||
const $listDom = $(self.listsDom);
|
||||
if ($listDom.data('sortable')) {
|
||||
$(self.listsDom).sortable('option', 'disabled',
|
||||
MultiSelection.isActive() || !userIsMember());
|
||||
}
|
||||
});
|
||||
|
||||
// If there is no data in the board (ie, no lists) we autofocus the list
|
||||
// creation form by clicking on the corresponding element.
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
if (userIsMember() && currentBoard.lists().count() === 0) {
|
||||
self.openNewListForm();
|
||||
}
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
// Proxy
|
||||
open() {
|
||||
this.childComponents('inlinedForm')[0].open();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [{
|
||||
submit(evt) {
|
||||
evt.preventDefault();
|
||||
const titleInput = this.find('.list-name-input');
|
||||
const title = titleInput.value.trim();
|
||||
if (title) {
|
||||
Lists.insert({
|
||||
title,
|
||||
boardId: Session.get('currentBoard'),
|
||||
sort: $('.list').length,
|
||||
});
|
||||
|
||||
titleInput.value = '';
|
||||
titleInput.focus();
|
||||
}
|
||||
},
|
||||
}];
|
||||
},
|
||||
}).register('addListForm');
|
||||
|
||||
Template.boardBody.helpers({
|
||||
canSeeAddList() {
|
||||
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
|
||||
},
|
||||
});
|
||||
|
|
|
@ -20,15 +20,14 @@ position()
|
|||
&.is-sibling-sidebar-open
|
||||
margin-right: 248px
|
||||
|
||||
.lists
|
||||
align-items: flex-start
|
||||
.swimlane
|
||||
border-bottom: 1px solid #CCC
|
||||
display: flex
|
||||
flex-direction: row
|
||||
margin: 0 0 10px
|
||||
padding: 0 40px 5px 0
|
||||
overflow-x: auto
|
||||
overflow-y: hidden
|
||||
position: cover
|
||||
|
||||
.board-overlay
|
||||
position: cover
|
||||
|
@ -49,12 +48,11 @@ position()
|
|||
|
||||
.board-canvas
|
||||
|
||||
.lists
|
||||
align-items: flex-start
|
||||
.swimlane
|
||||
border-bottom: 1px solid #CCC
|
||||
display: flex
|
||||
flex-direction: column
|
||||
margin: 0
|
||||
padding: 0 40px 0px 0
|
||||
overflow-x: hidden
|
||||
overflow-y: auto
|
||||
position: cover
|
||||
|
|
|
@ -87,6 +87,11 @@ template(name="boardHeaderBar")
|
|||
a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}")
|
||||
i.fa.fa-times-thin
|
||||
|
||||
a.board-header-btn.js-toggle-board-view(
|
||||
title="{{_ 'board-view'}}")
|
||||
i.fa.fa-th-large
|
||||
span {{_ currentBoard.view}}
|
||||
|
||||
if canModifyBoard
|
||||
a.board-header-btn.js-multiselection-activate(
|
||||
title="{{#if MultiSelection.isActive}}{{_ 'multi-selection-on'}}{{else}}{{_ 'multi-selection'}}{{/if}}"
|
||||
|
|
|
@ -76,6 +76,22 @@ BlazeComponent.extendComponent({
|
|||
'click .js-open-archived-board'() {
|
||||
Modal.open('archivedBoards');
|
||||
},
|
||||
'click .js-toggle-board-view'() {
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
if (currentBoard.view === 'board-view-swimlanes') {
|
||||
Boards.update(currentBoard._id, {
|
||||
$set: {
|
||||
view: 'board-view-lists',
|
||||
},
|
||||
});
|
||||
} else if (currentBoard.view === 'board-view-lists') {
|
||||
Boards.update(currentBoard._id, {
|
||||
$set: {
|
||||
view: 'board-view-swimlanes',
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
'click .js-open-filter-view'() {
|
||||
Sidebar.setView('filter');
|
||||
},
|
||||
|
@ -164,6 +180,11 @@ const CreateBoard = BlazeComponent.extendComponent({
|
|||
permission: visibility,
|
||||
}));
|
||||
|
||||
Swimlanes.insert({
|
||||
title: 'Default',
|
||||
boardId: this.boardId.get(),
|
||||
});
|
||||
|
||||
Utils.goBoardId(this.boardId.get());
|
||||
},
|
||||
|
||||
|
|
|
@ -171,11 +171,12 @@ class CardStartDate extends CardDate {
|
|||
}
|
||||
|
||||
classes() {
|
||||
let classes = 'start-date' + ' ';
|
||||
if (this.date.get().isBefore(this.now.get(), 'minute') &&
|
||||
this.now.get().isBefore(this.data().dueAt)) {
|
||||
return 'current';
|
||||
classes += 'current';
|
||||
}
|
||||
return '';
|
||||
return classes;
|
||||
}
|
||||
|
||||
showTitle() {
|
||||
|
@ -200,13 +201,14 @@ class CardDueDate extends CardDate {
|
|||
}
|
||||
|
||||
classes() {
|
||||
let classes = 'due-date' + ' ';
|
||||
if (this.now.get().diff(this.date.get(), 'days') >= 2)
|
||||
return 'long-overdue';
|
||||
classes += 'long-overdue';
|
||||
else if (this.now.get().diff(this.date.get(), 'minute') >= 0)
|
||||
return 'due';
|
||||
classes += 'due';
|
||||
else if (this.now.get().diff(this.date.get(), 'days') >= -1)
|
||||
return 'almost-due';
|
||||
return '';
|
||||
classes += 'almost-due';
|
||||
return classes;
|
||||
}
|
||||
|
||||
showTitle() {
|
||||
|
|
|
@ -49,10 +49,20 @@
|
|||
&:hover, &.is-active
|
||||
background-color: darken(#fd5d47, 7)
|
||||
|
||||
&.due-date
|
||||
time
|
||||
&::before
|
||||
content: "\f090" // symbol: fa-sign-in
|
||||
|
||||
&.start-date
|
||||
time
|
||||
&::before
|
||||
content: "\f08b" // symbol: fa-sign-out
|
||||
|
||||
time
|
||||
&::before
|
||||
font: normal normal normal 14px/1 FontAwesome
|
||||
font-size: inherit
|
||||
-webkit-font-smoothing: antialiased
|
||||
content: "\f017" // clock symbol
|
||||
margin-right: 0.3em
|
||||
margin-right: 0.3em
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@ BlazeComponent.extendComponent({
|
|||
|
||||
onCreated() {
|
||||
this.isLoaded = new ReactiveVar(false);
|
||||
this.parentComponent().showOverlay.set(true);
|
||||
this.parentComponent().mouseHasEnterCardDetails = false;
|
||||
this.parentComponent().parentComponent().showOverlay.set(true);
|
||||
this.parentComponent().parentComponent().mouseHasEnterCardDetails = false;
|
||||
this.calculateNextPeak();
|
||||
|
||||
Meteor.subscribe('unsaved-edits');
|
||||
|
@ -42,7 +42,7 @@ BlazeComponent.extendComponent({
|
|||
|
||||
scrollParentContainer() {
|
||||
const cardPanelWidth = 510;
|
||||
const bodyBoardComponent = this.parentComponent();
|
||||
const bodyBoardComponent = this.parentComponent().parentComponent();
|
||||
|
||||
const $cardContainer = bodyBoardComponent.$('.js-lists');
|
||||
const $cardView = this.$(this.firstNode());
|
||||
|
@ -69,7 +69,7 @@ BlazeComponent.extendComponent({
|
|||
},
|
||||
|
||||
onDestroyed() {
|
||||
this.parentComponent().showOverlay.set(false);
|
||||
this.parentComponent().parentComponent().showOverlay.set(false);
|
||||
},
|
||||
|
||||
events() {
|
||||
|
@ -104,8 +104,8 @@ BlazeComponent.extendComponent({
|
|||
'click .js-add-members': Popup.open('cardMembers'),
|
||||
'click .js-add-labels': Popup.open('cardLabels'),
|
||||
'mouseenter .js-card-details' () {
|
||||
this.parentComponent().showOverlay.set(true);
|
||||
this.parentComponent().mouseHasEnterCardDetails = true;
|
||||
this.parentComponent().parentComponent().showOverlay.set(true);
|
||||
this.parentComponent().parentComponent().mouseHasEnterCardDetails = true;
|
||||
},
|
||||
'click #toggleButton'() {
|
||||
Meteor.call('toggleSystemMessages');
|
||||
|
|
|
@ -18,7 +18,7 @@ BlazeComponent.extendComponent({
|
|||
// callback, we basically solve all issues related to reactive updates. A
|
||||
// comment below provides further details.
|
||||
onRendered() {
|
||||
const boardComponent = this.parentComponent();
|
||||
const boardComponent = this.parentComponent().parentComponent();
|
||||
const itemsSelector = '.js-minicard:not(.placeholder, .js-card-composer)';
|
||||
const $cards = this.$('.js-minicards');
|
||||
$cards.sortable({
|
||||
|
@ -55,6 +55,7 @@ BlazeComponent.extendComponent({
|
|||
const nCards = MultiSelection.isActive() ? MultiSelection.count() : 1;
|
||||
const sortIndex = calculateIndex(prevCardDom, nextCardDom, nCards);
|
||||
const listId = Blaze.getData(ui.item.parents('.list').get(0))._id;
|
||||
const swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
|
||||
|
||||
// Normally the jquery-ui sortable library moves the dragged DOM element
|
||||
// to its new position, which disrupts Blaze reactive updates mechanism
|
||||
|
@ -67,12 +68,12 @@ BlazeComponent.extendComponent({
|
|||
|
||||
if (MultiSelection.isActive()) {
|
||||
Cards.find(MultiSelection.getMongoSelector()).forEach((card, i) => {
|
||||
card.move(listId, sortIndex.base + i * sortIndex.increment);
|
||||
card.move(swimlaneId, listId, sortIndex.base + i * sortIndex.increment);
|
||||
});
|
||||
} else {
|
||||
const cardDomElement = ui.item.get(0);
|
||||
const card = Blaze.getData(cardDomElement);
|
||||
card.move(listId, sortIndex.base);
|
||||
card.move(swimlaneId, listId, sortIndex.base);
|
||||
}
|
||||
boardComponent.setIsDragging(false);
|
||||
},
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
// Even if this background color is the same as the body we can't leave it
|
||||
// transparent, because that won't work during a list drag.
|
||||
background: darken(white, 13%)
|
||||
height: 100%
|
||||
border-left: 1px solid darken(white, 20%)
|
||||
padding: 0
|
||||
float: left
|
||||
|
@ -88,12 +87,14 @@
|
|||
|
||||
.list-body
|
||||
flex: 1
|
||||
flex-direction: column
|
||||
display: flex
|
||||
overflow-y: auto
|
||||
padding: 5px 11px
|
||||
|
||||
.minicards
|
||||
flex: 1
|
||||
flex-grow: 1
|
||||
flex-shrink: 0
|
||||
|
||||
form
|
||||
margin-bottom: 9px
|
||||
|
|
|
@ -4,7 +4,7 @@ template(name="listBody")
|
|||
if cards.count
|
||||
+inlinedForm(autoclose=false position="top")
|
||||
+addCardForm(listId=_id position="top")
|
||||
each cards
|
||||
each (cards (idOrNull ../../_id))
|
||||
a.minicard-wrapper.js-minicard(href=absoluteUrl
|
||||
class="{{#if cardIsSelected}}is-selected{{/if}}"
|
||||
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
|
||||
|
|
|
@ -36,6 +36,14 @@ BlazeComponent.extendComponent({
|
|||
const members = formComponent.members.get();
|
||||
const labelIds = formComponent.labels.get();
|
||||
|
||||
const boardId = this.data().board()._id;
|
||||
const board = Boards.findOne(boardId);
|
||||
let swimlaneId = '';
|
||||
if (board.view === 'board-view-swimlanes')
|
||||
swimlaneId = this.parentComponent().parentComponent().data()._id;
|
||||
else
|
||||
swimlaneId = Swimlanes.findOne({boardId})._id;
|
||||
|
||||
if (title) {
|
||||
const _id = Cards.insert({
|
||||
title,
|
||||
|
@ -44,6 +52,7 @@ BlazeComponent.extendComponent({
|
|||
listId: this.data()._id,
|
||||
boardId: this.data().board()._id,
|
||||
sort: sortIndex,
|
||||
swimlaneId,
|
||||
});
|
||||
// In case the filter is active we need to add the newly inserted card in
|
||||
// the list of exceptions -- cards that are not filtered. Otherwise the
|
||||
|
@ -96,6 +105,13 @@ BlazeComponent.extendComponent({
|
|||
MultiSelection.toggle(this.currentData()._id);
|
||||
},
|
||||
|
||||
idOrNull(swimlaneId) {
|
||||
const board = Boards.findOne(Session.get('currentBoard'));
|
||||
if (board.view === 'board-view-swimlanes')
|
||||
return swimlaneId;
|
||||
return undefined;
|
||||
},
|
||||
|
||||
canSeeAddCard() {
|
||||
return !this.reachedWipLimit() && Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
|
||||
},
|
||||
|
|
78
client/components/swimlanes/swimlanes.jade
Normal file
78
client/components/swimlanes/swimlanes.jade
Normal file
|
@ -0,0 +1,78 @@
|
|||
template(name="swimlane")
|
||||
.swimlane.js-lists
|
||||
.swimlane-header-wrap
|
||||
.swimlane-header
|
||||
= title
|
||||
if isMiniScreen
|
||||
if currentList
|
||||
+list(currentList)
|
||||
else
|
||||
each currentBoard.lists
|
||||
+miniList(this)
|
||||
if currentUser.isBoardMember
|
||||
+addListForm
|
||||
else
|
||||
each currentBoard.lists
|
||||
+list(this)
|
||||
if currentCardIsInThisList
|
||||
+cardDetails(currentCard)
|
||||
if currentUser.isBoardMember
|
||||
+addListForm
|
||||
+addListAndSwimlaneForm
|
||||
|
||||
template(name="listsGroup")
|
||||
.swimlane.js-lists
|
||||
if isMiniScreen
|
||||
if currentList
|
||||
+list(currentList)
|
||||
else
|
||||
each currentBoard.lists
|
||||
+miniList(this)
|
||||
if currentUser.isBoardMember
|
||||
+addListForm
|
||||
else
|
||||
each currentBoard.lists
|
||||
+list(this)
|
||||
if currentCardIsInThisList
|
||||
+cardDetails(currentCard)
|
||||
if currentUser.isBoardMember
|
||||
+addListForm
|
||||
|
||||
template(name="addListAndSwimlaneForm")
|
||||
.list.js-list.list-composer.js-list-composer
|
||||
.list-header
|
||||
+inlinedForm(autoclose=false)
|
||||
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
|
||||
autocomplete="off" autofocus)
|
||||
.edit-controls.clearfix
|
||||
button.primary.confirm(type="submit") {{_ 'save'}}
|
||||
a.fa.fa-times-thin.js-close-inlined-form
|
||||
else
|
||||
a.open-list-composer.js-open-inlined-form
|
||||
i.fa.fa-plus
|
||||
| {{_ 'add-list'}}
|
||||
.list-header
|
||||
+inlinedForm(autoclose=false)
|
||||
input.swimlane-name-input.full-line(type="text" placeholder="{{_ 'add-swimlane'}}"
|
||||
autocomplete="off" autofocus)
|
||||
.edit-controls.clearfix
|
||||
button.primary.confirm(type="submit") {{_ 'save'}}
|
||||
a.fa.fa-times-thin.js-close-inlined-form
|
||||
else
|
||||
a.open-list-composer.js-open-inlined-form
|
||||
i.fa.fa-plus
|
||||
| {{_ 'add-swimlane'}}
|
||||
|
||||
template(name="addListForm")
|
||||
.list.js-list.list-composer.js-list-composer
|
||||
.list-header
|
||||
+inlinedForm(autoclose=false)
|
||||
input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}"
|
||||
autocomplete="off" autofocus)
|
||||
.edit-controls.clearfix
|
||||
button.primary.confirm(type="submit") {{_ 'save'}}
|
||||
a.fa.fa-times-thin.js-close-inlined-form
|
||||
else
|
||||
a.open-list-composer.js-open-inlined-form
|
||||
i.fa.fa-plus
|
||||
| {{_ 'add-list'}}
|
223
client/components/swimlanes/swimlanes.js
Normal file
223
client/components/swimlanes/swimlanes.js
Normal file
|
@ -0,0 +1,223 @@
|
|||
BlazeComponent.extendComponent({
|
||||
onCreated() {
|
||||
this.draggingActive = new ReactiveVar(false);
|
||||
|
||||
this._isDragging = false;
|
||||
this._lastDragPositionX = 0;
|
||||
},
|
||||
|
||||
openNewListForm() {
|
||||
this.childComponents('addListForm')[0].open();
|
||||
},
|
||||
|
||||
id() {
|
||||
return this._id;
|
||||
},
|
||||
|
||||
// XXX Flow components allow us to avoid creating these two setter methods by
|
||||
// exposing a public API to modify the component state. We need to investigate
|
||||
// best practices here.
|
||||
setIsDragging(bool) {
|
||||
this.draggingActive.set(bool);
|
||||
},
|
||||
|
||||
scrollLeft(position = 0) {
|
||||
const lists = this.$('.js-lists');
|
||||
lists && lists.animate({
|
||||
scrollLeft: position,
|
||||
});
|
||||
},
|
||||
|
||||
currentCardIsInThisList() {
|
||||
const currentCard = Cards.findOne(Session.get('currentCard'));
|
||||
const listId = this.currentData()._id;
|
||||
return currentCard && currentCard.listId === listId; //TODO: AND IN THIS SWIMLANE
|
||||
},
|
||||
|
||||
events() {
|
||||
return [{
|
||||
// Click-and-drag action
|
||||
'mousedown .board-canvas'(evt) {
|
||||
// Translating the board canvas using the click-and-drag action can
|
||||
// conflict with the build-in browser mechanism to select text. We
|
||||
// define a list of elements in which we disable the dragging because
|
||||
// the user will legitimately expect to be able to select some text with
|
||||
// his mouse.
|
||||
const noDragInside = ['a', 'input', 'textarea', 'p', '.js-list-header'];
|
||||
if ($(evt.target).closest(noDragInside.join(',')).length === 0 && this.$('.swimlane').prop('clientHeight') > evt.offsetY) {
|
||||
this._isDragging = true;
|
||||
this._lastDragPositionX = evt.clientX;
|
||||
}
|
||||
},
|
||||
'mouseup'() {
|
||||
if (this._isDragging) {
|
||||
this._isDragging = false;
|
||||
}
|
||||
},
|
||||
'mousemove'(evt) {
|
||||
if (this._isDragging) {
|
||||
// Update the canvas position
|
||||
this.listsDom.scrollLeft -= evt.clientX - this._lastDragPositionX;
|
||||
this._lastDragPositionX = evt.clientX;
|
||||
// Disable browser text selection while dragging
|
||||
evt.stopPropagation();
|
||||
evt.preventDefault();
|
||||
// Don't close opened card or inlined form at the end of the
|
||||
// click-and-drag.
|
||||
EscapeActions.executeUpTo('popup-close');
|
||||
EscapeActions.preventNextClick();
|
||||
}
|
||||
},
|
||||
}];
|
||||
},
|
||||
}).register('swimlane');
|
||||
|
||||
Template.swimlane.onRendered(function() {
|
||||
const self = BlazeComponent.getComponentForElement(this.firstNode);
|
||||
|
||||
self.listsDom = this.find('.js-lists');
|
||||
|
||||
if (!Session.get('currentCard')) {
|
||||
self.scrollLeft();
|
||||
}
|
||||
|
||||
// We want to animate the card details window closing. We rely on CSS
|
||||
// transition for the actual animation.
|
||||
self.listsDom._uihooks = {
|
||||
removeElement(node) {
|
||||
const removeNode = _.once(() => {
|
||||
node.parentNode.removeChild(node);
|
||||
});
|
||||
if ($(node).hasClass('js-card-details')) {
|
||||
$(node).css({
|
||||
flexBasis: 0,
|
||||
padding: 0,
|
||||
});
|
||||
$(self.listsDom).one(CSSEvents.transitionend, removeNode);
|
||||
} else {
|
||||
removeNode();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
$(self.listsDom).sortable({
|
||||
tolerance: 'pointer',
|
||||
helper: 'clone',
|
||||
handle: '.js-list-header',
|
||||
items: '.js-list:not(.js-list-composer)',
|
||||
placeholder: 'list placeholder',
|
||||
distance: 7,
|
||||
start(evt, ui) {
|
||||
ui.placeholder.height(ui.helper.height());
|
||||
Popup.close();
|
||||
},
|
||||
stop() {
|
||||
$(self.listsDom).find('.js-list:not(.js-list-composer)').each(
|
||||
(i, list) => {
|
||||
const data = Blaze.getData(list);
|
||||
Lists.update(data._id, {
|
||||
$set: {
|
||||
sort: i,
|
||||
},
|
||||
});
|
||||
}
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
function userIsMember() {
|
||||
return Meteor.user() && Meteor.user().isBoardMember();
|
||||
}
|
||||
|
||||
// Disable drag-dropping while in multi-selection mode, or if the current user
|
||||
// is not a board member
|
||||
self.autorun(() => {
|
||||
const $listDom = $(self.listsDom);
|
||||
if ($listDom.data('sortable')) {
|
||||
$(self.listsDom).sortable('option', 'disabled',
|
||||
MultiSelection.isActive() || !userIsMember());
|
||||
}
|
||||
});
|
||||
|
||||
// If there is no data in the board (ie, no lists) we autofocus the list
|
||||
// creation form by clicking on the corresponding element.
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
if (userIsMember() && currentBoard.lists().count() === 0) {
|
||||
self.openNewListForm();
|
||||
}
|
||||
});
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
// Proxy
|
||||
open() {
|
||||
this.childComponents('inlinedForm')[0].open();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [{
|
||||
submit(evt) {
|
||||
evt.preventDefault();
|
||||
const titleInput = this.find('.list-name-input');
|
||||
const title = titleInput.value.trim();
|
||||
if (title) {
|
||||
Lists.insert({
|
||||
title,
|
||||
boardId: Session.get('currentBoard'),
|
||||
sort: $('.list').length,
|
||||
});
|
||||
|
||||
titleInput.value = '';
|
||||
titleInput.focus();
|
||||
}
|
||||
},
|
||||
}];
|
||||
},
|
||||
}).register('addListForm');
|
||||
|
||||
BlazeComponent.extendComponent({
|
||||
// Proxy
|
||||
open() {
|
||||
this.childComponents('inlinedForm')[0].open();
|
||||
},
|
||||
|
||||
events() {
|
||||
return [{
|
||||
submit(evt) {
|
||||
evt.preventDefault();
|
||||
let titleInput = this.find('.list-name-input');
|
||||
if (titleInput) {
|
||||
const title = titleInput.value.trim();
|
||||
if (title) {
|
||||
Lists.insert({
|
||||
title,
|
||||
boardId: Session.get('currentBoard'),
|
||||
sort: $('.list').length,
|
||||
});
|
||||
|
||||
titleInput.value = '';
|
||||
titleInput.focus();
|
||||
}
|
||||
} else {
|
||||
titleInput = this.find('.swimlane-name-input');
|
||||
const title = titleInput.value.trim();
|
||||
if (title) {
|
||||
Swimlanes.insert({
|
||||
title,
|
||||
boardId: Session.get('currentBoard'),
|
||||
sort: $('.swimlane').length,
|
||||
});
|
||||
|
||||
titleInput.value = '';
|
||||
titleInput.focus();
|
||||
}
|
||||
}
|
||||
},
|
||||
}];
|
||||
},
|
||||
}).register('addListAndSwimlaneForm');
|
||||
|
||||
Template.swimlane.helpers({
|
||||
canSeeAddList() {
|
||||
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
|
||||
},
|
||||
});
|
20
client/components/swimlanes/swimlanes.styl
Normal file
20
client/components/swimlanes/swimlanes.styl
Normal file
|
@ -0,0 +1,20 @@
|
|||
@import 'nib'
|
||||
|
||||
.swimlane-header-wrap
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 0 0 50px;
|
||||
|
||||
.swimlane-header
|
||||
writing-mode: sideways-lr;
|
||||
font-size: 14px;
|
||||
line-height: 50px;
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
min-height: 9px;
|
||||
min-width: 30px;
|
||||
overflow: hidden;
|
||||
-o-text-overflow: ellipsis;
|
||||
text-overflow: ellipsis;
|
||||
word-wrap: break-word;
|
||||
text-align: center;
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "إضافة مرفق",
|
||||
"add-board": "إضافة لوحة",
|
||||
"add-card": "إضافة بطاقة",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "إضافة قائمة تدقيق",
|
||||
"add-checklist-item": "إضافة عنصر إلى قائمة التحقق",
|
||||
"add-cover": "إضافة غلاف",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "تغيير المتابعة",
|
||||
"boardMenuPopup-title": "قائمة اللوحة",
|
||||
"boards": "لوحات",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "القائمات",
|
||||
"bucket-example": "مثل « todo list » على سبيل المثال",
|
||||
"cancel": "إلغاء",
|
||||
"card-archived": "هذه البطاقة أُرشفت.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "الوقت",
|
||||
"title": "عنوان",
|
||||
"tracking": "تتبع",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Ouzphenn ur golo",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Afegeix adjunt",
|
||||
"add-board": "Afegeix Tauler",
|
||||
"add-card": "Afegeix fitxa",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Afegeix checklist",
|
||||
"add-checklist-item": "Afegeix un ítem",
|
||||
"add-cover": "Afegeix coberta",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Canvia seguiment",
|
||||
"boardMenuPopup-title": "Menú del tauler",
|
||||
"boards": "Taulers",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Llistes",
|
||||
"bucket-example": "Igual que “Bucket List”, per exemple",
|
||||
"cancel": "Cancel·la",
|
||||
"card-archived": "Aquesta fitxa està arxivada.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Hora",
|
||||
"title": "Títol",
|
||||
"tracking": "En seguiment",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Přidat přílohu",
|
||||
"add-board": "Přidat tablo",
|
||||
"add-card": "Přidat kartu",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Přidat zaškrtávací seznam",
|
||||
"add-checklist-item": "Přidat položku do zaškrtávacího seznamu",
|
||||
"add-cover": "Přidat obal",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Menu tabla",
|
||||
"boards": "Tabla",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Seznamy",
|
||||
"bucket-example": "Například \"Než mě odvedou\"",
|
||||
"cancel": "Zrušit",
|
||||
"card-archived": "Tato karta je archivována.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Název",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Datei anhängen",
|
||||
"add-board": "neues Board",
|
||||
"add-card": "Karte hinzufügen",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Checkliste hinzufügen",
|
||||
"add-checklist-item": "Punkt zu einer Checkliste hinzufügen",
|
||||
"add-cover": "Cover hinzufügen",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Beobachtung ändern",
|
||||
"boardMenuPopup-title": "Boardmenü",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listen",
|
||||
"bucket-example": "z.B. \"Löffelliste\"",
|
||||
"cancel": "Abbrechen",
|
||||
"card-archived": "Diese Karte wurde archiviert.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Überzeit (Stunden)",
|
||||
"overtime": "Überzeit",
|
||||
"has-overtime-cards": "Hat Karten mit Überzeit",
|
||||
"has-spenttime-cards": "Hat Karten mit aufgewendeter Zeit",
|
||||
"has-spenttime-cards": "Hat Karten mit aufgewendeten Zeiten",
|
||||
"time": "Zeit",
|
||||
"title": "Titel",
|
||||
"tracking": "Folgen",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Προσθήκη Κάρτας",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Λίστες",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Ακύρωση",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Ώρα",
|
||||
"title": "Τίτλος",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Lisää Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Taulu näkymä",
|
||||
"board-view-swimlanes": "Swimlanet",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Sisältää käytetty aika kortteja",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listoj",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "Karto arkivita",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Tempo",
|
||||
"title": "Titolo",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Agregar Adjunto",
|
||||
"add-board": "Agregar Tablero",
|
||||
"add-card": "Agregar Tarjeta",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Agregar Lista de Tareas",
|
||||
"add-checklist-item": "Agregar ítem a lista de tareas",
|
||||
"add-cover": "Agregar Portadas",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Alternar Seguimiento",
|
||||
"boardMenuPopup-title": "Menú del Tablero",
|
||||
"boards": "Tableros",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listas",
|
||||
"bucket-example": "Como \"Lista de Contenedores\" por ejemplo",
|
||||
"cancel": "Cancelar",
|
||||
"card-archived": "Esta tarjeta está archivada",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Sobretiempo (horas)",
|
||||
"overtime": "Sobretiempo",
|
||||
"has-overtime-cards": "Tiene tarjetas con sobretiempo",
|
||||
"has-spenttime-cards": "Tiene tarjetas con tiempo empleado",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Hora",
|
||||
"title": "Título",
|
||||
"tracking": "Seguimiento",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Añadir adjunto",
|
||||
"add-board": "Añadir tablero",
|
||||
"add-card": "Añadir una tarjeta",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Añadir una lista de tareas",
|
||||
"add-checklist-item": "Añadir un elemento a la lista de tareas",
|
||||
"add-cover": "Añadir portada",
|
||||
|
@ -72,7 +73,7 @@
|
|||
"archived-items": "Elementos archivados",
|
||||
"archived-boards": "Tableros archivados",
|
||||
"restore-board": "Restaurar el tablero",
|
||||
"no-archived-boards": "No hay tableros archivados",
|
||||
"no-archived-boards": "No hay tableros archivados.",
|
||||
"archives": "Archivos",
|
||||
"assign-member": "Asignar miembros",
|
||||
"attached": "adjuntado",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Cambiar vigilancia",
|
||||
"boardMenuPopup-title": "Menú del tablero",
|
||||
"boards": "Tableros",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listas",
|
||||
"bucket-example": "Como “Cosas por hacer” por ejemplo",
|
||||
"cancel": "Cancelar",
|
||||
"card-archived": "Esta tarjeta está ahora archivada.",
|
||||
|
@ -172,8 +176,8 @@
|
|||
"edit": "Editar",
|
||||
"edit-avatar": "Cambiar el avatar",
|
||||
"edit-profile": "Editar el perfil",
|
||||
"edit-wip-limit": "Cambiar el límite del WIP",
|
||||
"soft-wip-limit": "Límite flexible del WIP",
|
||||
"edit-wip-limit": "Cambiar el límite del TEP",
|
||||
"soft-wip-limit": "Límite del TEP flexible",
|
||||
"editCardStartDatePopup-title": "Cambiar la fecha de inicio",
|
||||
"editCardDueDatePopup-title": "Cambiar la fecha de vencimiento",
|
||||
"editCardSpentTimePopup-title": "Cambiar el tiempo consumido",
|
||||
|
@ -194,7 +198,7 @@
|
|||
"email-sent": "Correo enviado",
|
||||
"email-verifyEmail-subject": "Verifica tu dirección de correo en __siteName__",
|
||||
"email-verifyEmail-text": "Hola __user__,\n\nPara verificar tu cuenta de correo electrónico, haz clic en el siguiente enlace.\n\n__url__\n\nGracias.",
|
||||
"enable-wip-limit": "Activar el límite del WIP",
|
||||
"enable-wip-limit": "Activar el límite del TEP",
|
||||
"error-board-doesNotExist": "El tablero no existe",
|
||||
"error-board-notAdmin": "Es necesario ser administrador de este tablero para hacer eso",
|
||||
"error-board-notAMember": "Es necesario ser miembro de este tablero para hacer eso",
|
||||
|
@ -225,7 +229,7 @@
|
|||
"import-board-c": "Importar un tablero",
|
||||
"import-board-title-trello": "Importar un tablero desde Trello",
|
||||
"import-board-title-wekan": "Importar un tablero desde Wekan",
|
||||
"import-sandstorm-warning": "El tablero importado eliminará todos los datos existentes en este tablero y a reemplazarlos con los datos del tablero importado.",
|
||||
"import-sandstorm-warning": "El tablero importado eliminará todos los datos existentes en este tablero y los reemplazará con los datos del tablero importado.",
|
||||
"from-trello": "Desde Trello",
|
||||
"from-wekan": "Desde Wekan",
|
||||
"import-board-instruction-trello": "En tu tablero de Trello, ve a 'Menú', luego 'Más' > 'Imprimir y exportar' > 'Exportar JSON', y copia el texto resultante.",
|
||||
|
@ -320,8 +324,8 @@
|
|||
"save": "Guardar",
|
||||
"search": "Buscar",
|
||||
"select-color": "Selecciona un color",
|
||||
"set-wip-limit-value": "Fija un límite para el número máximo de tareas en esta lista",
|
||||
"setWipLimitPopup-title": "Fijar el límite del WIP",
|
||||
"set-wip-limit-value": "Fija un límite para el número máximo de tareas en esta lista.",
|
||||
"setWipLimitPopup-title": "Fijar el límite del TEP",
|
||||
"shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual",
|
||||
"shortcut-autocomplete-emoji": "Autocompletar emoji",
|
||||
"shortcut-autocomplete-members": "Autocompletar miembros",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Tiempo excesivo (horas)",
|
||||
"overtime": "Tiempo excesivo",
|
||||
"has-overtime-cards": "Hay tarjetas con el tiempo excedido",
|
||||
"has-spenttime-cards": "Hay tarjetas con el tiempo consumido",
|
||||
"has-spenttime-cards": "Se ha excedido el tiempo de las tarjetas",
|
||||
"time": "Hora",
|
||||
"title": "Título",
|
||||
"tracking": "Seguimiento",
|
||||
|
@ -367,9 +371,9 @@
|
|||
"welcome-list1": "Básicos",
|
||||
"welcome-list2": "Avanzados",
|
||||
"what-to-do": "¿Qué deseas hacer?",
|
||||
"wipLimitErrorPopup-title": "Límite del WIP no válido",
|
||||
"wipLimitErrorPopup-dialog-pt1": "El número de tareas en esta lista es mayor que el límite del WIP que has definido.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Por favor, mueve algunas tareas fuera de esta lista, o fija un límite del WIP más alto.",
|
||||
"wipLimitErrorPopup-title": "Límite del TEP no válido",
|
||||
"wipLimitErrorPopup-dialog-pt1": "El número de tareas en esta lista es mayor que el límite del TEP que has definido.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Por favor, mueve algunas tareas fuera de esta lista, o fija un límite del TEP más alto.",
|
||||
"admin-panel": "Panel del administrador",
|
||||
"settings": "Ajustes",
|
||||
"people": "Personas",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Gehitu eranskina",
|
||||
"add-board": "Gehitu arbela",
|
||||
"add-card": "Gehitu txartela",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Gehitu egiaztaketa zerrenda",
|
||||
"add-checklist-item": "Gehitu elementu bat egiaztaketa zerrendara",
|
||||
"add-cover": "Gehitu azala",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Aldatu ikuskatzea",
|
||||
"boardMenuPopup-title": "Arbelaren menua",
|
||||
"boards": "Arbelak",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Zerrendak",
|
||||
"bucket-example": "Esaterako \"Pertz zerrenda\"",
|
||||
"cancel": "Utzi",
|
||||
"card-archived": "Txartel hau artxibatuta dago.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Luzapena (orduak)",
|
||||
"overtime": "Luzapena",
|
||||
"has-overtime-cards": "Luzapen txartelak ditu",
|
||||
"has-spenttime-cards": "Erabilitako dendoran txartelak ditu",
|
||||
"has-spenttime-cards": "Erabilitako denbora txartelak ditu",
|
||||
"time": "Ordua",
|
||||
"title": "Izenburua",
|
||||
"tracking": "Jarraitzen",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "افزودن ضمیمه",
|
||||
"add-board": "افزودن برد",
|
||||
"add-card": "افزودن کارت",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "افزودن چک لیست",
|
||||
"add-checklist-item": "افزودن مورد به سیاهه",
|
||||
"add-cover": "جلد کردن",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "تغییر دیده بانی",
|
||||
"boardMenuPopup-title": "منوی تخته",
|
||||
"boards": "تخته ها",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "لیست ها",
|
||||
"bucket-example": "برای مثال چیزی شبیه \"لیست سبدها\" ",
|
||||
"cancel": "انصراف",
|
||||
"card-archived": "این کارت بایگانی شده است.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "زمان",
|
||||
"title": "عنوان",
|
||||
"tracking": "پیگردی",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Lisää liite",
|
||||
"add-board": "Lisää taulu",
|
||||
"add-card": "Lisää kortti",
|
||||
"add-swimlane": "Lisää Swimlane",
|
||||
"add-checklist": "Lisää tarkistuslista",
|
||||
"add-checklist-item": "Lisää kohta tarkistuslistaan",
|
||||
"add-cover": "Lisää kansi",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Muokkaa seuraamista",
|
||||
"boardMenuPopup-title": "Taulu valikko",
|
||||
"boards": "Taulut",
|
||||
"board-view": "Taulu näkymä",
|
||||
"board-view-swimlanes": "Swimlanet",
|
||||
"board-view-lists": "Listat",
|
||||
"bucket-example": "Kuten “Laatikko lista” esimerkiksi",
|
||||
"cancel": "Peruuta",
|
||||
"card-archived": "Tämä kortti on arkistoitu.",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Ajouter une pièce jointe",
|
||||
"add-board": "Ajouter un tableau",
|
||||
"add-card": "Ajouter une carte",
|
||||
"add-swimlane": "Ajouter un couloir",
|
||||
"add-checklist": "Ajouter une checklist",
|
||||
"add-checklist-item": "Ajouter un élément à la checklist",
|
||||
"add-cover": "Ajouter la couverture",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Modifier le suivi",
|
||||
"boardMenuPopup-title": "Menu du tableau",
|
||||
"boards": "Tableaux",
|
||||
"board-view": "Vue du tableau",
|
||||
"board-view-swimlanes": "Couloirs",
|
||||
"board-view-lists": "Listes",
|
||||
"bucket-example": "Comme « todo list » par exemple",
|
||||
"cancel": "Annuler",
|
||||
"card-archived": "Cette carte est archivée.",
|
||||
|
@ -173,7 +177,7 @@
|
|||
"edit-avatar": "Modifier l'avatar",
|
||||
"edit-profile": "Modifier le profil",
|
||||
"edit-wip-limit": "Éditer la limite WIP",
|
||||
"soft-wip-limit": "Limite Soft WIP",
|
||||
"soft-wip-limit": "Limite WIP douce",
|
||||
"editCardStartDatePopup-title": "Modifier la date de début",
|
||||
"editCardDueDatePopup-title": "Modifier la date d'échéance",
|
||||
"editCardSpentTimePopup-title": "Changer le temps passé",
|
||||
|
@ -320,7 +324,7 @@
|
|||
"save": "Enregistrer",
|
||||
"search": "Chercher",
|
||||
"select-color": "Sélectionner une couleur",
|
||||
"set-wip-limit-value": "Définit une limite maximale au nombre de tâches dans cette liste",
|
||||
"set-wip-limit-value": "Définit une limite maximale au nombre de cartes de cette liste",
|
||||
"setWipLimitPopup-title": "Définir la limite WIP",
|
||||
"shortcut-assign-self": "Affecter cette carte à vous-même",
|
||||
"shortcut-autocomplete-emoji": "Auto-complétion des emoji",
|
||||
|
@ -368,8 +372,8 @@
|
|||
"welcome-list2": "Avancés",
|
||||
"what-to-do": "Que voulez-vous faire ?",
|
||||
"wipLimitErrorPopup-title": "Limite WIP invalide",
|
||||
"wipLimitErrorPopup-dialog-pt1": "Le nombre de tâches dans cette liste est supérieur à la limite WIP que vous avez définie.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Veuillez enlever des tâches de cette liste, ou définir une limite WIP plus importante.",
|
||||
"wipLimitErrorPopup-dialog-pt1": "Le nombre de cartes de cette liste est supérieur à la limite WIP que vous avez définie.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Veuillez enlever des cartes de cette liste, ou définir une limite WIP plus importante.",
|
||||
"admin-panel": "Panneau d'administration",
|
||||
"settings": "Paramètres",
|
||||
"people": "Personne",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Engadir anexo",
|
||||
"add-board": "Engadir taboleiro",
|
||||
"add-card": "Engadir tarxeta",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Taboleiros",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listas",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancelar",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Hora",
|
||||
"title": "Título",
|
||||
"tracking": "Seguimento",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "הוספת קובץ מצורף",
|
||||
"add-board": "הוספת לוח",
|
||||
"add-card": "הוספת כרטיס",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "הוספת רשימת מטלות",
|
||||
"add-checklist-item": "הוספת פריט לרשימת משימות",
|
||||
"add-cover": "הוספת כיסוי",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "שינוי הגדרת המעקב",
|
||||
"boardMenuPopup-title": "תפריט לוח",
|
||||
"boards": "לוחות",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "רשימות",
|
||||
"bucket-example": "כמו למשל „רשימת המשימות“",
|
||||
"cancel": "ביטול",
|
||||
"card-archived": "כרטיס זה שמור בארכיון.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "שעות נוספות",
|
||||
"overtime": "שעות נוספות",
|
||||
"has-overtime-cards": "יש כרטיסי שעות נוספות",
|
||||
"has-spenttime-cards": "יש כרטיסי זמן שהושקע",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "זמן",
|
||||
"title": "כותרת",
|
||||
"tracking": "מעקב",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Melléklet hozzáadása",
|
||||
"add-board": "Tábla hozzáadása",
|
||||
"add-card": "Kártya hozzáadása",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Ellenőrzőlista hozzáadása",
|
||||
"add-checklist-item": "Elem hozzáadása az ellenőrzőlistához",
|
||||
"add-cover": "Borító hozzáadása",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Megfigyelés megváltoztatása",
|
||||
"boardMenuPopup-title": "Tábla menü",
|
||||
"boards": "Táblák",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listák",
|
||||
"bucket-example": "Mint például „Bakancslista”",
|
||||
"cancel": "Mégse",
|
||||
"card-archived": "Ez a kártya archiválva van.",
|
||||
|
@ -103,7 +107,7 @@
|
|||
"card-delete-suggest-archive": "Archiválhat egy kártyát, hogy eltávolítsa a tábláról, és megőrizze a tevékenységet.",
|
||||
"card-due": "Esedékes",
|
||||
"card-due-on": "Esedékes ekkor",
|
||||
"card-spent": "Spent Time",
|
||||
"card-spent": "Eltöltött idő",
|
||||
"card-edit-attachments": "Mellékletek szerkesztése",
|
||||
"card-edit-labels": "Címkék szerkesztése",
|
||||
"card-edit-members": "Tagok szerkesztése",
|
||||
|
@ -176,7 +180,7 @@
|
|||
"soft-wip-limit": "Gyenge WIP korlát",
|
||||
"editCardStartDatePopup-title": "Kezdődátum megváltoztatása",
|
||||
"editCardDueDatePopup-title": "Esedékesség dátumának megváltoztatása",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editCardSpentTimePopup-title": "Eltöltött idő megváltoztatása",
|
||||
"editLabelPopup-title": "Címke megváltoztatása",
|
||||
"editNotificationPopup-title": "Értesítés szerkesztése",
|
||||
"editProfilePopup-title": "Profil szerkesztése",
|
||||
|
@ -184,7 +188,7 @@
|
|||
"email-enrollAccount-subject": "Létrejött a profilja a következő oldalon: __siteName__",
|
||||
"email-enrollAccount-text": "Kedves __user__!\n\nA szolgáltatás használatának megkezdéséhez egyszerűen kattintson a lenti hivatkozásra.\n\n__url__\n\nKöszönjük.",
|
||||
"email-fail": "Az e-mail küldése nem sikerült",
|
||||
"email-fail-text": "Error trying to send email",
|
||||
"email-fail-text": "Hiba az e-mail küldésének kísérlete közben",
|
||||
"email-invalid": "Érvénytelen e-mail",
|
||||
"email-invite": "Meghívás e-mailben",
|
||||
"email-invite-subject": "__inviter__ egy meghívást küldött Önnek",
|
||||
|
@ -239,8 +243,8 @@
|
|||
"info": "Verzió",
|
||||
"initials": "Kezdőbetűk",
|
||||
"invalid-date": "Érvénytelen dátum",
|
||||
"invalid-time": "Invalid time",
|
||||
"invalid-user": "Invalid user",
|
||||
"invalid-time": "Érvénytelen idő",
|
||||
"invalid-user": "Érvénytelen felhasználó",
|
||||
"joined": "csatlakozott",
|
||||
"just-invited": "Éppen most hívták meg erre a táblára",
|
||||
"keyboard-shortcuts": "Gyorsbillentyűk",
|
||||
|
@ -342,11 +346,11 @@
|
|||
"team": "Csapat",
|
||||
"this-board": "ez a tábla",
|
||||
"this-card": "ez a kártya",
|
||||
"spent-time-hours": "Spent time (hours)",
|
||||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"spent-time-hours": "Eltöltött idő (óra)",
|
||||
"overtime-hours": "Túlóra (óra)",
|
||||
"overtime": "Túlóra",
|
||||
"has-overtime-cards": "Van túlórás kártyája",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Idő",
|
||||
"title": "Cím",
|
||||
"tracking": "Követés",
|
||||
|
@ -388,12 +392,12 @@
|
|||
"smtp-password": "Jelszó",
|
||||
"smtp-tls": "TLS támogatás",
|
||||
"send-from": "Feladó",
|
||||
"send-smtp-test": "Send a test email to yourself",
|
||||
"send-smtp-test": "Teszt e-mail küldése magamnak",
|
||||
"invitation-code": "Meghívási kód",
|
||||
"email-invite-register-subject": "__inviter__ egy meghívás küldött Önnek",
|
||||
"email-invite-register-text": "Kedves __user__!\n\n__inviter__ meghívta Önt közreműködésre a Wekan oldalra.\n\nKövesse a lenti hivatkozást:\n__url__\n\nÉs a meghívási kódja: __icode__\n\nKöszönjük.",
|
||||
"email-smtp-test-subject": "SMTP Test Email From Wekan",
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"email-smtp-test-subject": "SMTP teszt e-mail a Wekantól",
|
||||
"email-smtp-test-text": "Sikeresen elküldött egy e-mailt",
|
||||
"error-invitation-code-not-exist": "A meghívási kód nem létezik",
|
||||
"error-notAuthorized": "Nincs jogosultsága az oldal megtekintéséhez.",
|
||||
"outgoing-webhooks": "Kimenő webhurkok",
|
||||
|
|
428
i18n/ibo.json
Normal file
428
i18n/ibo.json
Normal file
|
@ -0,0 +1,428 @@
|
|||
{
|
||||
"accept": "Kwere",
|
||||
"act-activity-notify": "[Wekan] Activity Notification",
|
||||
"act-addAttachment": "attached __attachment__ to __card__",
|
||||
"act-addChecklist": "added checklist __checklist__ to __card__",
|
||||
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
|
||||
"act-addComment": "commented on __card__: __comment__",
|
||||
"act-createBoard": "created __board__",
|
||||
"act-createCard": "added __card__ to __list__",
|
||||
"act-createList": "added __list__ to __board__",
|
||||
"act-addBoardMember": "added __member__ to __board__",
|
||||
"act-archivedBoard": "archived __board__",
|
||||
"act-archivedCard": "archived __card__",
|
||||
"act-archivedList": "archived __list__",
|
||||
"act-importBoard": "imported __board__",
|
||||
"act-importCard": "imported __card__",
|
||||
"act-importList": "imported __list__",
|
||||
"act-joinMember": "added __member__ to __card__",
|
||||
"act-moveCard": "moved __card__ from __oldList__ to __list__",
|
||||
"act-removeBoardMember": "removed __member__ from __board__",
|
||||
"act-restoredCard": "restored __card__ to __board__",
|
||||
"act-unjoinMember": "removed __member__ from __card__",
|
||||
"act-withBoardTitle": "[Wekan] __board__",
|
||||
"act-withCardTitle": "[__board__] __card__",
|
||||
"actions": "Actions",
|
||||
"activities": "Activities",
|
||||
"activity": "Activity",
|
||||
"activity-added": "added %s to %s",
|
||||
"activity-archived": "archived %s",
|
||||
"activity-attached": "attached %s to %s",
|
||||
"activity-created": "created %s",
|
||||
"activity-excluded": "excluded %s from %s",
|
||||
"activity-imported": "imported %s into %s from %s",
|
||||
"activity-imported-board": "imported %s from %s",
|
||||
"activity-joined": "joined %s",
|
||||
"activity-moved": "moved %s from %s to %s",
|
||||
"activity-on": "na %s",
|
||||
"activity-removed": "removed %s from %s",
|
||||
"activity-sent": "sent %s to %s",
|
||||
"activity-unjoined": "unjoined %s",
|
||||
"activity-checklist-added": "added checklist to %s",
|
||||
"activity-checklist-item-added": "added checklist item to '%s' in %s",
|
||||
"add": "Tinye",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
"add-members": "Tinye ndị otu ọhụrụ",
|
||||
"added": "Etinyere ",
|
||||
"addMemberPopup-title": "Ndị otu",
|
||||
"admin": "Admin",
|
||||
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
|
||||
"admin-announcement": "Announcement",
|
||||
"admin-announcement-active": "Active System-Wide Announcement",
|
||||
"admin-announcement-title": "Announcement from Administrator",
|
||||
"all-boards": "All boards",
|
||||
"and-n-other-card": "And __count__ other card",
|
||||
"and-n-other-card_plural": "And __count__ other cards",
|
||||
"apply": "Apply",
|
||||
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
|
||||
"archive": "Archive",
|
||||
"archive-all": "Archive All",
|
||||
"archive-board": "Archive Board",
|
||||
"archive-card": "Archive Card",
|
||||
"archive-list": "Archive List",
|
||||
"archive-selection": "Archive selection",
|
||||
"archiveBoardPopup-title": "Archive Board?",
|
||||
"archived-items": "Archived Items",
|
||||
"archived-boards": "Archived Boards",
|
||||
"restore-board": "Restore Board",
|
||||
"no-archived-boards": "No Archived Boards.",
|
||||
"archives": "Archives",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
"attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
|
||||
"attachmentDeletePopup-title": "Delete Attachment?",
|
||||
"attachments": "Attachments",
|
||||
"auto-watch": "Automatically watch boards when they are created",
|
||||
"avatar-too-big": "The avatar is too large (70KB max)",
|
||||
"back": "Back",
|
||||
"board-change-color": "Change color",
|
||||
"board-nb-stars": "%s stars",
|
||||
"board-not-found": "Board not found",
|
||||
"board-private-info": "This board will be <strong>private</strong>.",
|
||||
"board-public-info": "This board will be <strong>public</strong>.",
|
||||
"boardChangeColorPopup-title": "Change Board Background",
|
||||
"boardChangeTitlePopup-title": "Rename Board",
|
||||
"boardChangeVisibilityPopup-title": "Change Visibility",
|
||||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
"card-comments-title": "This card has %s comment.",
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
"card-edit-attachments": "Edit attachments",
|
||||
"card-edit-labels": "Edit labels",
|
||||
"card-edit-members": "Edit members",
|
||||
"card-labels-title": "Change the labels for the card.",
|
||||
"card-members-title": "Add or remove members of the board from the card.",
|
||||
"card-start": "Bido",
|
||||
"card-start-on": "Starts on",
|
||||
"cardAttachmentsPopup-title": "Attach From",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Aha",
|
||||
"cardMembersPopup-title": "Ndị otu",
|
||||
"cardMorePopup-title": "More",
|
||||
"cards": "Cards",
|
||||
"change": "Gbanwe",
|
||||
"change-avatar": "Change Avatar",
|
||||
"change-password": "Change Password",
|
||||
"change-permissions": "Change permissions",
|
||||
"change-settings": "Change Settings",
|
||||
"changeAvatarPopup-title": "Change Avatar",
|
||||
"changeLanguagePopup-title": "Họrọ asụsụ ọzọ",
|
||||
"changePasswordPopup-title": "Change Password",
|
||||
"changePermissionsPopup-title": "Change Permissions",
|
||||
"changeSettingsPopup-title": "Change Settings",
|
||||
"checklists": "Checklists",
|
||||
"click-to-star": "Click to star this board.",
|
||||
"click-to-unstar": "Click to unstar this board.",
|
||||
"clipboard": "Clipboard or drag & drop",
|
||||
"close": "Close",
|
||||
"close-board": "Close Board",
|
||||
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
|
||||
"color-black": "black",
|
||||
"color-blue": "blue",
|
||||
"color-green": "green",
|
||||
"color-lime": "lime",
|
||||
"color-orange": "orange",
|
||||
"color-pink": "pink",
|
||||
"color-purple": "purple",
|
||||
"color-red": "red",
|
||||
"color-sky": "sky",
|
||||
"color-yellow": "yellow",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"computer": "Computer",
|
||||
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
|
||||
"copy-card-link-to-clipboard": "Copy card link to clipboard",
|
||||
"copyCardPopup-title": "Copy Card",
|
||||
"create": "Create",
|
||||
"createBoardPopup-title": "Create Board",
|
||||
"chooseBoardSourcePopup-title": "Import board",
|
||||
"createLabelPopup-title": "Create Label",
|
||||
"current": "current",
|
||||
"date": "Date",
|
||||
"decline": "Decline",
|
||||
"default-avatar": "Default avatar",
|
||||
"delete": "Delete",
|
||||
"deleteLabelPopup-title": "Delete Label?",
|
||||
"description": "Description",
|
||||
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
|
||||
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
|
||||
"discard": "Discard",
|
||||
"done": "Done",
|
||||
"download": "Download",
|
||||
"edit": "Edit",
|
||||
"edit-avatar": "Change Avatar",
|
||||
"edit-profile": "Edit Profile",
|
||||
"edit-wip-limit": "Edit WIP Limit",
|
||||
"soft-wip-limit": "Soft WIP Limit",
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
"editProfilePopup-title": "Edit Profile",
|
||||
"email": "Email",
|
||||
"email-enrollAccount-subject": "An account created for you on __siteName__",
|
||||
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"email-fail": "Sending email failed",
|
||||
"email-fail-text": "Error trying to send email",
|
||||
"email-invalid": "Invalid email",
|
||||
"email-invite": "Invite via Email",
|
||||
"email-invite-subject": "__inviter__ sent you an invitation",
|
||||
"email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
|
||||
"email-resetPassword-subject": "Reset your password on __siteName__",
|
||||
"email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"email-sent": "Email sent",
|
||||
"email-verifyEmail-subject": "Verify your email address on __siteName__",
|
||||
"email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"enable-wip-limit": "Enable WIP Limit",
|
||||
"error-board-doesNotExist": "This board does not exist",
|
||||
"error-board-notAdmin": "You need to be admin of this board to do that",
|
||||
"error-board-notAMember": "You need to be a member of this board to do that",
|
||||
"error-json-malformed": "Your text is not valid JSON",
|
||||
"error-json-schema": "Your JSON data does not include the proper information in the correct format",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
"error-user-notCreated": "This user is not created",
|
||||
"error-username-taken": "This username is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"filter": "Filter",
|
||||
"filter-cards": "Filter Cards",
|
||||
"filter-clear": "Clear filter",
|
||||
"filter-no-label": "No label",
|
||||
"filter-no-member": "No member",
|
||||
"filter-on": "Filter is on",
|
||||
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
|
||||
"filter-to-selection": "Filter to selection",
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"hide-system-messages": "Hide system messages",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
"import-board": "import board",
|
||||
"import-board-c": "Import board",
|
||||
"import-board-title-trello": "Import board from Trello",
|
||||
"import-board-title-wekan": "Import board from Wekan",
|
||||
"import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
|
||||
"from-trello": "From Trello",
|
||||
"from-wekan": "From Wekan",
|
||||
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
|
||||
"import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
|
||||
"import-json-placeholder": "Paste your valid JSON data here",
|
||||
"import-map-members": "Map members",
|
||||
"import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
|
||||
"import-show-user-mapping": "Review members mapping",
|
||||
"import-user-select": "Pick the Wekan user you want to use as this member",
|
||||
"importMapMembersAddPopup-title": "Select Wekan member",
|
||||
"info": "Version",
|
||||
"initials": "Initials",
|
||||
"invalid-date": "Invalid date",
|
||||
"invalid-time": "Invalid time",
|
||||
"invalid-user": "Invalid user",
|
||||
"joined": "joined",
|
||||
"just-invited": "You are just invited to this board",
|
||||
"keyboard-shortcuts": "Keyboard shortcuts",
|
||||
"label-create": "Create Label",
|
||||
"label-default": "%s label (default)",
|
||||
"label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
|
||||
"labels": "Aha",
|
||||
"language": "Language",
|
||||
"last-admin-desc": "You can’t change roles because there must be at least one admin.",
|
||||
"leave-board": "Leave Board",
|
||||
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
|
||||
"leaveBoardPopup-title": "Leave Board ?",
|
||||
"link-card": "Link to this card",
|
||||
"list-archive-cards": "Archive all cards in this list",
|
||||
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
|
||||
"list-move-cards": "Move all cards in this list",
|
||||
"list-select-cards": "Select all cards in this list",
|
||||
"listActionPopup-title": "List Actions",
|
||||
"listImportCardPopup-title": "Import a Trello card",
|
||||
"listMorePopup-title": "More",
|
||||
"link-list": "Link to this list",
|
||||
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
|
||||
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
|
||||
"lists": "Lists",
|
||||
"log-out": "Log Out",
|
||||
"log-in": "Log In",
|
||||
"loginPopup-title": "Log In",
|
||||
"memberMenuPopup-title": "Member Settings",
|
||||
"members": "Ndị otu",
|
||||
"menu": "Menu",
|
||||
"move-selection": "Move selection",
|
||||
"moveCardPopup-title": "Move Card",
|
||||
"moveCardToBottom-title": "Move to Bottom",
|
||||
"moveCardToTop-title": "Move to Top",
|
||||
"moveSelectionPopup-title": "Move selection",
|
||||
"multi-selection": "Multi-Selection",
|
||||
"multi-selection-on": "Multi-Selection is on",
|
||||
"muted": "Muted",
|
||||
"muted-info": "You will never be notified of any changes in this board",
|
||||
"my-boards": "My Boards",
|
||||
"name": "Name",
|
||||
"no-archived-cards": "No archived cards.",
|
||||
"no-archived-lists": "No archived lists.",
|
||||
"no-results": "No results",
|
||||
"normal": "Normal",
|
||||
"normal-desc": "Can view and edit cards. Can't change settings.",
|
||||
"not-accepted-yet": "Invitation not accepted yet",
|
||||
"notify-participate": "Receive updates to any cards you participate as creater or member",
|
||||
"notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
|
||||
"optional": "optional",
|
||||
"or": "or",
|
||||
"page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
|
||||
"page-not-found": "Page not found.",
|
||||
"password": "Password",
|
||||
"paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
|
||||
"participating": "Participating",
|
||||
"preview": "Preview",
|
||||
"previewAttachedImagePopup-title": "Preview",
|
||||
"previewClipboardImagePopup-title": "Preview",
|
||||
"private": "Private",
|
||||
"private-desc": "This board is private. Only people added to the board can view and edit it.",
|
||||
"profile": "Profile",
|
||||
"public": "Public",
|
||||
"public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
|
||||
"quick-access-description": "Star a board to add a shortcut in this bar.",
|
||||
"remove-cover": "Remove Cover",
|
||||
"remove-from-board": "Remove from Board",
|
||||
"remove-label": "Remove Label",
|
||||
"listDeletePopup-title": "Delete List ?",
|
||||
"remove-member": "Remove Member",
|
||||
"remove-member-from-card": "Remove from Card",
|
||||
"remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
|
||||
"removeMemberPopup-title": "Remove Member?",
|
||||
"rename": "Banye aha ọzọ",
|
||||
"rename-board": "Rename Board",
|
||||
"restore": "Restore",
|
||||
"save": "Save",
|
||||
"search": "Search",
|
||||
"select-color": "Select Color",
|
||||
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
|
||||
"setWipLimitPopup-title": "Set WIP Limit",
|
||||
"shortcut-assign-self": "Assign yourself to current card",
|
||||
"shortcut-autocomplete-emoji": "Autocomplete emoji",
|
||||
"shortcut-autocomplete-members": "Autocomplete members",
|
||||
"shortcut-clear-filters": "Clear all filters",
|
||||
"shortcut-close-dialog": "Close Dialog",
|
||||
"shortcut-filter-my-cards": "Filter my cards",
|
||||
"shortcut-show-shortcuts": "Bring up this shortcuts list",
|
||||
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
|
||||
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
|
||||
"show-cards-minimum-count": "Show cards count if list contains more than",
|
||||
"sidebar-open": "Open Sidebar",
|
||||
"sidebar-close": "Close Sidebar",
|
||||
"signupPopup-title": "Create an Account",
|
||||
"star-board-title": "Click to star this board. It will show up at top of your boards list.",
|
||||
"starred-boards": "Starred Boards",
|
||||
"starred-boards-description": "Starred boards show up at the top of your boards list.",
|
||||
"subscribe": "Subscribe",
|
||||
"team": "Team",
|
||||
"this-board": "this board",
|
||||
"this-card": "this card",
|
||||
"spent-time-hours": "Spent time (hours)",
|
||||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
|
||||
"unassign-member": "Unassign member",
|
||||
"unsaved-description": "You have an unsaved description.",
|
||||
"unwatch": "Unwatch",
|
||||
"upload": "Upload",
|
||||
"upload-avatar": "Upload an avatar",
|
||||
"uploaded-avatar": "Uploaded an avatar",
|
||||
"username": "Username",
|
||||
"view-it": "Hụ ya",
|
||||
"warn-list-archived": "warning: this card is in an archived list",
|
||||
"watch": "Hụ",
|
||||
"watching": "Watching",
|
||||
"watching-info": "You will be notified of any change in this board",
|
||||
"welcome-board": "Welcome Board",
|
||||
"welcome-list1": "Basics",
|
||||
"welcome-list2": "Advanced",
|
||||
"what-to-do": "What do you want to do?",
|
||||
"wipLimitErrorPopup-title": "Invalid WIP Limit",
|
||||
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
|
||||
"admin-panel": "Admin Panel",
|
||||
"settings": "Settings",
|
||||
"people": "Ndị mmadụ",
|
||||
"registration": "Registration",
|
||||
"disable-self-registration": "Disable Self-Registration",
|
||||
"invite": "Invite",
|
||||
"invite-people": "Invite People",
|
||||
"to-boards": "To board(s)",
|
||||
"email-addresses": "Email Addresses",
|
||||
"smtp-host-description": "The address of the SMTP server that handles your emails.",
|
||||
"smtp-port-description": "The port your SMTP server uses for outgoing emails.",
|
||||
"smtp-tls-description": "Enable TLS support for SMTP server",
|
||||
"smtp-host": "SMTP Host",
|
||||
"smtp-port": "SMTP Port",
|
||||
"smtp-username": "Username",
|
||||
"smtp-password": "Password",
|
||||
"smtp-tls": "TLS support",
|
||||
"send-from": "From",
|
||||
"send-smtp-test": "Send a test email to yourself",
|
||||
"invitation-code": "Invitation Code",
|
||||
"email-invite-register-subject": "__inviter__ sent you an invitation",
|
||||
"email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
|
||||
"email-smtp-test-subject": "SMTP Test Email From Wekan",
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"error-invitation-code-not-exist": "Invitation code doesn't exist",
|
||||
"error-notAuthorized": "You are not authorized to view this page.",
|
||||
"outgoing-webhooks": "Outgoing Webhooks",
|
||||
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
|
||||
"new-outgoing-webhook": "New Outgoing Webhook",
|
||||
"no-name": "(Unknown)",
|
||||
"Wekan_version": "Wekan version",
|
||||
"Node_version": "Node version",
|
||||
"OS_Arch": "OS Arch",
|
||||
"OS_Cpus": "OS CPU Count",
|
||||
"OS_Freemem": "OS Free Memory",
|
||||
"OS_Loadavg": "OS Load Average",
|
||||
"OS_Platform": "OS Platform",
|
||||
"OS_Release": "OS Release",
|
||||
"OS_Totalmem": "OS Total Memory",
|
||||
"OS_Type": "OS Type",
|
||||
"OS_Uptime": "OS Uptime",
|
||||
"hours": "elekere",
|
||||
"minutes": "nkeji",
|
||||
"seconds": "seconds",
|
||||
"yes": "Ee",
|
||||
"no": "Mba",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"createdAt": "Ekere na",
|
||||
"verified": "Verified",
|
||||
"active": "Active"
|
||||
}
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Tambahkan hal ke daftar periksa",
|
||||
"add-cover": "Tambahkan Sampul",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Ubah Pengamatan",
|
||||
"boardMenuPopup-title": "Menu Panel",
|
||||
"boards": "Panel",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Daftar",
|
||||
"bucket-example": "Contohnya seperti “Bucket List” ",
|
||||
"cancel": "Batal",
|
||||
"card-archived": "Kartu ini diarsipkan",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Waktu",
|
||||
"title": "Judul",
|
||||
"tracking": "Pelacakan",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Aggiungi Allegato",
|
||||
"add-board": "Aggiungi Bacheca",
|
||||
"add-card": "Aggiungi Scheda",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Aggiungi Checklist",
|
||||
"add-checklist-item": "Aggiungi un elemento alla checklist",
|
||||
"add-cover": "Aggiungi copertina",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Cambia faccia",
|
||||
"boardMenuPopup-title": "Menu bacheca",
|
||||
"boards": "Bacheche",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Liste",
|
||||
"bucket-example": "Per esempio come \"una lista di cose da fare\"",
|
||||
"cancel": "Cancella",
|
||||
"card-archived": "Questa scheda è archiviata.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (ore)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Ora",
|
||||
"title": "Titolo",
|
||||
"tracking": "Monitoraggio",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "添付ファイルを追加",
|
||||
"add-board": "ボードを追加",
|
||||
"add-card": "カードを追加",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "チェックリストを追加",
|
||||
"add-checklist-item": "チェックリストに項目を追加",
|
||||
"add-cover": "カバーの追加",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "ウォッチの変更",
|
||||
"boardMenuPopup-title": "ボードメニュー",
|
||||
"boards": "ボード",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "リスト",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "キャンセル",
|
||||
"card-archived": "カードはアーカイブされました。",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "時間",
|
||||
"title": "タイトル",
|
||||
"tracking": "トラッキング",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "첨부파일 추가",
|
||||
"add-board": "보드 추가",
|
||||
"add-card": "카드 추가",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "체크리스트 추가",
|
||||
"add-checklist-item": "체크리스트에 항목 추가",
|
||||
"add-cover": "커버 추가",
|
||||
|
@ -55,13 +56,13 @@
|
|||
"admin": "관리자",
|
||||
"admin-desc": "카드를 보거나 수정하고, 멤버를 삭제하고, 보드에 대한 설정을 수정할 수 있습니다.",
|
||||
"admin-announcement": "Announcement",
|
||||
"admin-announcement-active": "Active System-Wide Announcement",
|
||||
"admin-announcement-title": "Announcement from Administrator",
|
||||
"admin-announcement-active": "시스템에 공지사항을 표시합니다",
|
||||
"admin-announcement-title": "관리자 공지사항 메시지",
|
||||
"all-boards": "전체 보드",
|
||||
"and-n-other-card": "__count__ 개의 다른 카드",
|
||||
"and-n-other-card_plural": "__count__ 개의 다른 카드들",
|
||||
"apply": "적용",
|
||||
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
|
||||
"app-is-offline": "Wekan 로딩 중 입니다. 잠시 기다려주세요. 페이지를 새로고침 하시면 데이터가 손실될 수 있습니다. Wekan 을 불러오는데 실패한다면 서버가 중지되지 않았는지 확인 바랍니다.",
|
||||
"archive": "보관",
|
||||
"archive-all": "모두 보관",
|
||||
"archive-board": "보드 저장소 보관",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "감시상태 변경",
|
||||
"boardMenuPopup-title": "보드 메뉴",
|
||||
"boards": "보드",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "목록들",
|
||||
"bucket-example": "예: “프로젝트 이름“ 입력",
|
||||
"cancel": "취소",
|
||||
"card-archived": "이 카드를 보관합니다.",
|
||||
|
@ -150,12 +154,12 @@
|
|||
"comment-only": "댓글만 입력 가능",
|
||||
"comment-only-desc": "카드에 댓글만 달수 있습니다.",
|
||||
"computer": "내 컴퓨터",
|
||||
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
|
||||
"copy-card-link-to-clipboard": "Copy card link to clipboard",
|
||||
"copyCardPopup-title": "Copy Card",
|
||||
"confirm-checklist-delete-dialog": "정말 이 체크리스트를 삭제할까요?",
|
||||
"copy-card-link-to-clipboard": "클립보드에 카드의 링크가 복사되었습니다.",
|
||||
"copyCardPopup-title": "카드 복사",
|
||||
"create": "생성",
|
||||
"createBoardPopup-title": "보드 생성",
|
||||
"chooseBoardSourcePopup-title": "Import board",
|
||||
"chooseBoardSourcePopup-title": "보드 가져오기",
|
||||
"createLabelPopup-title": "라벨 생성",
|
||||
"current": "경향",
|
||||
"date": "날짜",
|
||||
|
@ -172,8 +176,8 @@
|
|||
"edit": "수정",
|
||||
"edit-avatar": "아바타 변경",
|
||||
"edit-profile": "프로필 변경",
|
||||
"edit-wip-limit": "Edit WIP Limit",
|
||||
"soft-wip-limit": "Soft WIP Limit",
|
||||
"edit-wip-limit": "WIP 제한 변경",
|
||||
"soft-wip-limit": "원만한 WIP 제한",
|
||||
"editCardStartDatePopup-title": "시작일 변경",
|
||||
"editCardDueDatePopup-title": "종료일 변경",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
|
@ -188,13 +192,13 @@
|
|||
"email-invalid": "잘못된 이메일 주소",
|
||||
"email-invite": "이메일로 초대",
|
||||
"email-invite-subject": "__inviter__님이 당신을 초대하였습니다.",
|
||||
"email-invite-text": "__user__님,\n\n__inviter__님은 협업을 위해 \"__board__\"보드에 가입하도록 초대합니다.\n\n아래 링크를 따라주십시오.\n\n__url__\n\n감사합니다.",
|
||||
"email-invite-text": "__user__님,\n\n__inviter__님이 협업을 위해 \"__board__\"보드에 가입하도록 초대하셨습니다.\n\n아래 링크를 클릭해주십시오.\n\n__url__\n\n감사합니다.",
|
||||
"email-resetPassword-subject": "패스워드 초기화: __siteName__",
|
||||
"email-resetPassword-text": "안녕하세요 __user__님,\n\n비밀번호를 재설정하려면 아래 링크를 클릭하십시오.\n\n__url__\n\n감사합니다.",
|
||||
"email-sent": "이메일 전송",
|
||||
"email-verifyEmail-subject": "이메일 인증: __siteName__",
|
||||
"email-verifyEmail-text": "안녕하세요. __user__님,\n\n당신의 계정과 이메일을 활성하려면 아래 링크를 클릭하십시오.\n\n__url__\n\n감사합니다.",
|
||||
"enable-wip-limit": "Enable WIP Limit",
|
||||
"enable-wip-limit": "WIP 제한 활성화",
|
||||
"error-board-doesNotExist": "보드가 없습니다.",
|
||||
"error-board-notAdmin": "이 작업은 보드의 관리자만 실행할 수 있습니다.",
|
||||
"error-board-notAMember": "이 작업은 보드의 멤버만 실행할 수 있습니다.",
|
||||
|
@ -221,10 +225,10 @@
|
|||
"headerBarCreateBoardPopup-title": "보드 생성",
|
||||
"home": "홈",
|
||||
"import": "가져오기",
|
||||
"import-board": "import board",
|
||||
"import-board-c": "Import board",
|
||||
"import-board": "보드 가져오기",
|
||||
"import-board-c": "보드 가져오기",
|
||||
"import-board-title-trello": "Trello에서 보드 가져오기",
|
||||
"import-board-title-wekan": "Import board from Wekan",
|
||||
"import-board-title-wekan": "Wekan에서 보드 가져오기",
|
||||
"import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
|
||||
"from-trello": "From Trello",
|
||||
"from-wekan": "From Wekan",
|
||||
|
@ -238,9 +242,9 @@
|
|||
"importMapMembersAddPopup-title": "Wekan 멤버 선택",
|
||||
"info": "Version",
|
||||
"initials": "이니셜",
|
||||
"invalid-date": "잘못된 날짜",
|
||||
"invalid-time": "Invalid time",
|
||||
"invalid-user": "Invalid user",
|
||||
"invalid-date": "적절하지 않은 날짜",
|
||||
"invalid-time": "적절하지 않은 시각",
|
||||
"invalid-user": "적절하지 않은 사용자",
|
||||
"joined": "참가함",
|
||||
"just-invited": "보드에 방금 초대되었습니다.",
|
||||
"keyboard-shortcuts": "키보드 단축키",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "시간",
|
||||
"title": "제목",
|
||||
"tracking": "추적",
|
||||
|
@ -391,9 +395,9 @@
|
|||
"send-smtp-test": "Send a test email to yourself",
|
||||
"invitation-code": "초대 코드",
|
||||
"email-invite-register-subject": "\"__inviter__ 님이 당신에게 초대장을 보냈습니다.",
|
||||
"email-invite-register-text": "\"__user__ 님, \n\n__inviter__ 님이 Wekan 보드에 협업을 위하여 초대합니다.\n\n아래 링크를 클릭해주세요 : \n__url__\n\n그리고 초대 코드는 __icode__ 입니다.\n\n감사합니다.",
|
||||
"email-smtp-test-subject": "SMTP Test Email From Wekan",
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"email-invite-register-text": "\"__user__ 님, \n\n__inviter__ 님이 Wekan 보드에 협업을 위하여 당신을 초대합니다.\n\n아래 링크를 클릭해주세요 : \n__url__\n\n그리고 초대 코드는 __icode__ 입니다.\n\n감사합니다.",
|
||||
"email-smtp-test-subject": "SMTP 테스트 이메일이 발송되었습니다.",
|
||||
"email-smtp-test-text": "테스트 메일을 성공적으로 발송하였습니다.",
|
||||
"error-invitation-code-not-exist": "초대 코드가 존재하지 않습니다.",
|
||||
"error-notAuthorized": "이 페이지를 볼 수있는 권한이 없습니다.",
|
||||
"outgoing-webhooks": "Outgoing Webhooks",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
|
|
428
i18n/mn.i18n.json
Normal file
428
i18n/mn.i18n.json
Normal file
|
@ -0,0 +1,428 @@
|
|||
{
|
||||
"accept": "Зөвшөөрөх",
|
||||
"act-activity-notify": "[Wekan] Activity Notification",
|
||||
"act-addAttachment": "_attachment__ хавсралтыг __card__-д хавсаргав",
|
||||
"act-addChecklist": "added checklist __checklist__ to __card__",
|
||||
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
|
||||
"act-addComment": "commented on __card__: __comment__",
|
||||
"act-createBoard": "created __board__",
|
||||
"act-createCard": "added __card__ to __list__",
|
||||
"act-createList": "added __list__ to __board__",
|
||||
"act-addBoardMember": "added __member__ to __board__",
|
||||
"act-archivedBoard": "archived __board__",
|
||||
"act-archivedCard": "archived __card__",
|
||||
"act-archivedList": "archived __list__",
|
||||
"act-importBoard": "imported __board__",
|
||||
"act-importCard": "imported __card__",
|
||||
"act-importList": "imported __list__",
|
||||
"act-joinMember": "added __member__ to __card__",
|
||||
"act-moveCard": "moved __card__ from __oldList__ to __list__",
|
||||
"act-removeBoardMember": "removed __member__ from __board__",
|
||||
"act-restoredCard": "restored __card__ to __board__",
|
||||
"act-unjoinMember": "removed __member__ from __card__",
|
||||
"act-withBoardTitle": "[Wekan] __board__",
|
||||
"act-withCardTitle": "[__board__] __card__",
|
||||
"actions": "Actions",
|
||||
"activities": "Activities",
|
||||
"activity": "Activity",
|
||||
"activity-added": "added %s to %s",
|
||||
"activity-archived": "archived %s",
|
||||
"activity-attached": "attached %s to %s",
|
||||
"activity-created": "created %s",
|
||||
"activity-excluded": "excluded %s from %s",
|
||||
"activity-imported": "imported %s into %s from %s",
|
||||
"activity-imported-board": "imported %s from %s",
|
||||
"activity-joined": "joined %s",
|
||||
"activity-moved": "moved %s from %s to %s",
|
||||
"activity-on": "on %s",
|
||||
"activity-removed": "removed %s from %s",
|
||||
"activity-sent": "sent %s to %s",
|
||||
"activity-unjoined": "unjoined %s",
|
||||
"activity-checklist-added": "added checklist to %s",
|
||||
"activity-checklist-item-added": "added checklist item to '%s' in %s",
|
||||
"add": "Нэмэх",
|
||||
"add-attachment": "Хавсралт нэмэх",
|
||||
"add-board": "Самбар нэмэх",
|
||||
"add-card": "Карт нэмэх",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Чеклист нэмэх",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Шошго нэмэх",
|
||||
"add-list": "Жагсаалт нэмэх",
|
||||
"add-members": "Гишүүд нэмэх",
|
||||
"added": "Нэмсэн",
|
||||
"addMemberPopup-title": "Гишүүд",
|
||||
"admin": "Админ",
|
||||
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
|
||||
"admin-announcement": "Announcement",
|
||||
"admin-announcement-active": "Active System-Wide Announcement",
|
||||
"admin-announcement-title": "Announcement from Administrator",
|
||||
"all-boards": "Бүх самбарууд",
|
||||
"and-n-other-card": "And __count__ other card",
|
||||
"and-n-other-card_plural": "And __count__ other cards",
|
||||
"apply": "Apply",
|
||||
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
|
||||
"archive": "Archive",
|
||||
"archive-all": "Archive All",
|
||||
"archive-board": "Archive Board",
|
||||
"archive-card": "Archive Card",
|
||||
"archive-list": "Archive List",
|
||||
"archive-selection": "Archive selection",
|
||||
"archiveBoardPopup-title": "Archive Board?",
|
||||
"archived-items": "Archived Items",
|
||||
"archived-boards": "Archived Boards",
|
||||
"restore-board": "Restore Board",
|
||||
"no-archived-boards": "No Archived Boards.",
|
||||
"archives": "Archives",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
"attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
|
||||
"attachmentDeletePopup-title": "Delete Attachment?",
|
||||
"attachments": "Attachments",
|
||||
"auto-watch": "Automatically watch boards when they are created",
|
||||
"avatar-too-big": "The avatar is too large (70KB max)",
|
||||
"back": "Back",
|
||||
"board-change-color": "Change color",
|
||||
"board-nb-stars": "%s stars",
|
||||
"board-not-found": "Board not found",
|
||||
"board-private-info": "This board will be <strong>private</strong>.",
|
||||
"board-public-info": "This board will be <strong>public</strong>.",
|
||||
"boardChangeColorPopup-title": "Change Board Background",
|
||||
"boardChangeTitlePopup-title": "Rename Board",
|
||||
"boardChangeVisibilityPopup-title": "Change Visibility",
|
||||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
"card-comments-title": "This card has %s comment.",
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
"card-edit-attachments": "Edit attachments",
|
||||
"card-edit-labels": "Edit labels",
|
||||
"card-edit-members": "Edit members",
|
||||
"card-labels-title": "Change the labels for the card.",
|
||||
"card-members-title": "Add or remove members of the board from the card.",
|
||||
"card-start": "Start",
|
||||
"card-start-on": "Starts on",
|
||||
"cardAttachmentsPopup-title": "Attach From",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Labels",
|
||||
"cardMembersPopup-title": "Гишүүд",
|
||||
"cardMorePopup-title": "More",
|
||||
"cards": "Cards",
|
||||
"change": "Change",
|
||||
"change-avatar": "Change Avatar",
|
||||
"change-password": "Change Password",
|
||||
"change-permissions": "Change permissions",
|
||||
"change-settings": "Change Settings",
|
||||
"changeAvatarPopup-title": "Change Avatar",
|
||||
"changeLanguagePopup-title": "Change Language",
|
||||
"changePasswordPopup-title": "Change Password",
|
||||
"changePermissionsPopup-title": "Change Permissions",
|
||||
"changeSettingsPopup-title": "Change Settings",
|
||||
"checklists": "Checklists",
|
||||
"click-to-star": "Click to star this board.",
|
||||
"click-to-unstar": "Click to unstar this board.",
|
||||
"clipboard": "Clipboard or drag & drop",
|
||||
"close": "Close",
|
||||
"close-board": "Close Board",
|
||||
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
|
||||
"color-black": "black",
|
||||
"color-blue": "blue",
|
||||
"color-green": "green",
|
||||
"color-lime": "lime",
|
||||
"color-orange": "orange",
|
||||
"color-pink": "pink",
|
||||
"color-purple": "purple",
|
||||
"color-red": "red",
|
||||
"color-sky": "sky",
|
||||
"color-yellow": "yellow",
|
||||
"comment": "Comment",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"computer": "Computer",
|
||||
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
|
||||
"copy-card-link-to-clipboard": "Copy card link to clipboard",
|
||||
"copyCardPopup-title": "Copy Card",
|
||||
"create": "Create",
|
||||
"createBoardPopup-title": "Create Board",
|
||||
"chooseBoardSourcePopup-title": "Import board",
|
||||
"createLabelPopup-title": "Create Label",
|
||||
"current": "current",
|
||||
"date": "Date",
|
||||
"decline": "Decline",
|
||||
"default-avatar": "Default avatar",
|
||||
"delete": "Delete",
|
||||
"deleteLabelPopup-title": "Delete Label?",
|
||||
"description": "Description",
|
||||
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
|
||||
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
|
||||
"discard": "Discard",
|
||||
"done": "Done",
|
||||
"download": "Download",
|
||||
"edit": "Edit",
|
||||
"edit-avatar": "Change Avatar",
|
||||
"edit-profile": "Edit Profile",
|
||||
"edit-wip-limit": "Edit WIP Limit",
|
||||
"soft-wip-limit": "Soft WIP Limit",
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
"editProfilePopup-title": "Edit Profile",
|
||||
"email": "Email",
|
||||
"email-enrollAccount-subject": "An account created for you on __siteName__",
|
||||
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"email-fail": "Sending email failed",
|
||||
"email-fail-text": "Error trying to send email",
|
||||
"email-invalid": "Invalid email",
|
||||
"email-invite": "Invite via Email",
|
||||
"email-invite-subject": "__inviter__ sent you an invitation",
|
||||
"email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
|
||||
"email-resetPassword-subject": "Reset your password on __siteName__",
|
||||
"email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"email-sent": "Email sent",
|
||||
"email-verifyEmail-subject": "Verify your email address on __siteName__",
|
||||
"email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"enable-wip-limit": "Enable WIP Limit",
|
||||
"error-board-doesNotExist": "This board does not exist",
|
||||
"error-board-notAdmin": "You need to be admin of this board to do that",
|
||||
"error-board-notAMember": "You need to be a member of this board to do that",
|
||||
"error-json-malformed": "Your text is not valid JSON",
|
||||
"error-json-schema": "Your JSON data does not include the proper information in the correct format",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
"error-user-notCreated": "This user is not created",
|
||||
"error-username-taken": "This username is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"filter": "Filter",
|
||||
"filter-cards": "Filter Cards",
|
||||
"filter-clear": "Clear filter",
|
||||
"filter-no-label": "No label",
|
||||
"filter-no-member": "No member",
|
||||
"filter-on": "Filter is on",
|
||||
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
|
||||
"filter-to-selection": "Filter to selection",
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"hide-system-messages": "Hide system messages",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
"import-board": "import board",
|
||||
"import-board-c": "Import board",
|
||||
"import-board-title-trello": "Import board from Trello",
|
||||
"import-board-title-wekan": "Import board from Wekan",
|
||||
"import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
|
||||
"from-trello": "From Trello",
|
||||
"from-wekan": "From Wekan",
|
||||
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
|
||||
"import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
|
||||
"import-json-placeholder": "Paste your valid JSON data here",
|
||||
"import-map-members": "Map members",
|
||||
"import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
|
||||
"import-show-user-mapping": "Review members mapping",
|
||||
"import-user-select": "Pick the Wekan user you want to use as this member",
|
||||
"importMapMembersAddPopup-title": "Select Wekan member",
|
||||
"info": "Version",
|
||||
"initials": "Initials",
|
||||
"invalid-date": "Invalid date",
|
||||
"invalid-time": "Invalid time",
|
||||
"invalid-user": "Invalid user",
|
||||
"joined": "joined",
|
||||
"just-invited": "You are just invited to this board",
|
||||
"keyboard-shortcuts": "Keyboard shortcuts",
|
||||
"label-create": "Create Label",
|
||||
"label-default": "%s label (default)",
|
||||
"label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
|
||||
"labels": "Labels",
|
||||
"language": "Language",
|
||||
"last-admin-desc": "You can’t change roles because there must be at least one admin.",
|
||||
"leave-board": "Leave Board",
|
||||
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
|
||||
"leaveBoardPopup-title": "Leave Board ?",
|
||||
"link-card": "Link to this card",
|
||||
"list-archive-cards": "Archive all cards in this list",
|
||||
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
|
||||
"list-move-cards": "Move all cards in this list",
|
||||
"list-select-cards": "Select all cards in this list",
|
||||
"listActionPopup-title": "List Actions",
|
||||
"listImportCardPopup-title": "Import a Trello card",
|
||||
"listMorePopup-title": "More",
|
||||
"link-list": "Link to this list",
|
||||
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
|
||||
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
|
||||
"lists": "Lists",
|
||||
"log-out": "Log Out",
|
||||
"log-in": "Log In",
|
||||
"loginPopup-title": "Log In",
|
||||
"memberMenuPopup-title": "Member Settings",
|
||||
"members": "Гишүүд",
|
||||
"menu": "Menu",
|
||||
"move-selection": "Move selection",
|
||||
"moveCardPopup-title": "Move Card",
|
||||
"moveCardToBottom-title": "Move to Bottom",
|
||||
"moveCardToTop-title": "Move to Top",
|
||||
"moveSelectionPopup-title": "Move selection",
|
||||
"multi-selection": "Multi-Selection",
|
||||
"multi-selection-on": "Multi-Selection is on",
|
||||
"muted": "Muted",
|
||||
"muted-info": "You will never be notified of any changes in this board",
|
||||
"my-boards": "My Boards",
|
||||
"name": "Name",
|
||||
"no-archived-cards": "No archived cards.",
|
||||
"no-archived-lists": "No archived lists.",
|
||||
"no-results": "No results",
|
||||
"normal": "Normal",
|
||||
"normal-desc": "Can view and edit cards. Can't change settings.",
|
||||
"not-accepted-yet": "Invitation not accepted yet",
|
||||
"notify-participate": "Receive updates to any cards you participate as creater or member",
|
||||
"notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
|
||||
"optional": "optional",
|
||||
"or": "or",
|
||||
"page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
|
||||
"page-not-found": "Page not found.",
|
||||
"password": "Password",
|
||||
"paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
|
||||
"participating": "Participating",
|
||||
"preview": "Preview",
|
||||
"previewAttachedImagePopup-title": "Preview",
|
||||
"previewClipboardImagePopup-title": "Preview",
|
||||
"private": "Private",
|
||||
"private-desc": "This board is private. Only people added to the board can view and edit it.",
|
||||
"profile": "Profile",
|
||||
"public": "Public",
|
||||
"public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
|
||||
"quick-access-description": "Star a board to add a shortcut in this bar.",
|
||||
"remove-cover": "Remove Cover",
|
||||
"remove-from-board": "Remove from Board",
|
||||
"remove-label": "Remove Label",
|
||||
"listDeletePopup-title": "Delete List ?",
|
||||
"remove-member": "Remove Member",
|
||||
"remove-member-from-card": "Remove from Card",
|
||||
"remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
|
||||
"removeMemberPopup-title": "Remove Member?",
|
||||
"rename": "Rename",
|
||||
"rename-board": "Rename Board",
|
||||
"restore": "Restore",
|
||||
"save": "Save",
|
||||
"search": "Search",
|
||||
"select-color": "Select Color",
|
||||
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
|
||||
"setWipLimitPopup-title": "Set WIP Limit",
|
||||
"shortcut-assign-self": "Assign yourself to current card",
|
||||
"shortcut-autocomplete-emoji": "Autocomplete emoji",
|
||||
"shortcut-autocomplete-members": "Autocomplete members",
|
||||
"shortcut-clear-filters": "Clear all filters",
|
||||
"shortcut-close-dialog": "Close Dialog",
|
||||
"shortcut-filter-my-cards": "Filter my cards",
|
||||
"shortcut-show-shortcuts": "Bring up this shortcuts list",
|
||||
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
|
||||
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
|
||||
"show-cards-minimum-count": "Show cards count if list contains more than",
|
||||
"sidebar-open": "Open Sidebar",
|
||||
"sidebar-close": "Close Sidebar",
|
||||
"signupPopup-title": "Create an Account",
|
||||
"star-board-title": "Click to star this board. It will show up at top of your boards list.",
|
||||
"starred-boards": "Starred Boards",
|
||||
"starred-boards-description": "Starred boards show up at the top of your boards list.",
|
||||
"subscribe": "Subscribe",
|
||||
"team": "Team",
|
||||
"this-board": "this board",
|
||||
"this-card": "this card",
|
||||
"spent-time-hours": "Spent time (hours)",
|
||||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
|
||||
"unassign-member": "Unassign member",
|
||||
"unsaved-description": "You have an unsaved description.",
|
||||
"unwatch": "Unwatch",
|
||||
"upload": "Upload",
|
||||
"upload-avatar": "Upload an avatar",
|
||||
"uploaded-avatar": "Uploaded an avatar",
|
||||
"username": "Username",
|
||||
"view-it": "View it",
|
||||
"warn-list-archived": "warning: this card is in an archived list",
|
||||
"watch": "Watch",
|
||||
"watching": "Watching",
|
||||
"watching-info": "You will be notified of any change in this board",
|
||||
"welcome-board": "Welcome Board",
|
||||
"welcome-list1": "Basics",
|
||||
"welcome-list2": "Advanced",
|
||||
"what-to-do": "What do you want to do?",
|
||||
"wipLimitErrorPopup-title": "Invalid WIP Limit",
|
||||
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
|
||||
"admin-panel": "Admin Panel",
|
||||
"settings": "Settings",
|
||||
"people": "People",
|
||||
"registration": "Registration",
|
||||
"disable-self-registration": "Disable Self-Registration",
|
||||
"invite": "Invite",
|
||||
"invite-people": "Invite People",
|
||||
"to-boards": "To board(s)",
|
||||
"email-addresses": "Email Addresses",
|
||||
"smtp-host-description": "The address of the SMTP server that handles your emails.",
|
||||
"smtp-port-description": "The port your SMTP server uses for outgoing emails.",
|
||||
"smtp-tls-description": "Enable TLS support for SMTP server",
|
||||
"smtp-host": "SMTP Host",
|
||||
"smtp-port": "SMTP Port",
|
||||
"smtp-username": "Username",
|
||||
"smtp-password": "Password",
|
||||
"smtp-tls": "TLS support",
|
||||
"send-from": "From",
|
||||
"send-smtp-test": "Send a test email to yourself",
|
||||
"invitation-code": "Invitation Code",
|
||||
"email-invite-register-subject": "__inviter__ sent you an invitation",
|
||||
"email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
|
||||
"email-smtp-test-subject": "SMTP Test Email From Wekan",
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"error-invitation-code-not-exist": "Invitation code doesn't exist",
|
||||
"error-notAuthorized": "You are not authorized to view this page.",
|
||||
"outgoing-webhooks": "Outgoing Webhooks",
|
||||
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
|
||||
"new-outgoing-webhook": "New Outgoing Webhook",
|
||||
"no-name": "(Unknown)",
|
||||
"Wekan_version": "Wekan version",
|
||||
"Node_version": "Node version",
|
||||
"OS_Arch": "OS Arch",
|
||||
"OS_Cpus": "OS CPU Count",
|
||||
"OS_Freemem": "OS Free Memory",
|
||||
"OS_Loadavg": "OS Load Average",
|
||||
"OS_Platform": "OS Platform",
|
||||
"OS_Release": "OS Release",
|
||||
"OS_Totalmem": "OS Total Memory",
|
||||
"OS_Type": "OS Type",
|
||||
"OS_Uptime": "OS Uptime",
|
||||
"hours": "hours",
|
||||
"minutes": "minutes",
|
||||
"seconds": "seconds",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"createdAt": "Created at",
|
||||
"verified": "Verified",
|
||||
"active": "Active"
|
||||
}
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Nytt punkt på sjekklisten",
|
||||
"add-cover": "Nytt omslag",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Endre overvåkning",
|
||||
"boardMenuPopup-title": "Tavlemeny",
|
||||
"boards": "Tavler",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Som \"Bucket List\" for eksempel",
|
||||
"cancel": "Avbryt",
|
||||
"card-archived": "Dette kortet er arkivert.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
"accept": "Accepteren",
|
||||
"act-activity-notify": "[Wekan] Activiteit Notificatie",
|
||||
"act-addAttachment": "__attachment__ als bijlage toegevoegd aan __card__",
|
||||
"act-addChecklist": "added checklist __checklist__ to __card__",
|
||||
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
|
||||
"act-addChecklist": "__checklist__ toegevoegd aan __card__",
|
||||
"act-addChecklistItem": "__checklistItem__ aan checklist toegevoegd aan __checklist__ op __card__",
|
||||
"act-addComment": "gereageerd op __card__:__comment__",
|
||||
"act-createBoard": "aangemaakte__bord__",
|
||||
"act-createCard": "toegevoegd__kaart__aan__lijst__",
|
||||
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Voeg Bijlage Toe",
|
||||
"add-board": "Voeg Bord Toe",
|
||||
"add-card": "Voeg Kaart Toe",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Voeg Checklist Toe",
|
||||
"add-checklist-item": "Voeg item toe aan checklist",
|
||||
"add-cover": "Voeg Cover Toe",
|
||||
|
@ -54,9 +55,9 @@
|
|||
"addMemberPopup-title": "Leden",
|
||||
"admin": "Administrator",
|
||||
"admin-desc": "Kan kaarten bekijken en wijzigen, leden verwijderen, en instellingen voor het bord aanpassen.",
|
||||
"admin-announcement": "Announcement",
|
||||
"admin-announcement-active": "Active System-Wide Announcement",
|
||||
"admin-announcement-title": "Announcement from Administrator",
|
||||
"admin-announcement": "Melding",
|
||||
"admin-announcement-active": "Systeem melding",
|
||||
"admin-announcement-title": "Melding van de administrator",
|
||||
"all-boards": "Alle borden",
|
||||
"and-n-other-card": "En nog __count__ ander",
|
||||
"and-n-other-card_plural": "En __count__ andere kaarten",
|
||||
|
@ -64,7 +65,7 @@
|
|||
"app-is-offline": "Wekan is aan het laden, wacht alstublieft. Het verversen van de pagina zorgt voor verlies van gegevens. Als Wekan niet laadt, check of de Wekan server is gestopt.",
|
||||
"archive": "Archiveren",
|
||||
"archive-all": "Alles Archiveren",
|
||||
"archive-board": "Archiveer Bor",
|
||||
"archive-board": "Archiveer Bord",
|
||||
"archive-card": "Archiveer Kaart",
|
||||
"archive-list": "Archiveer Lijst",
|
||||
"archive-selection": "Archiveer Selectie",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Verander naar 'Watch'",
|
||||
"boardMenuPopup-title": "Bord menu",
|
||||
"boards": "Borden",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lijsten",
|
||||
"bucket-example": "Zoals \"Bucket List\" bijvoorbeeld",
|
||||
"cancel": "Annuleren",
|
||||
"card-archived": "Deze kaart is gearchiveerd.",
|
||||
|
@ -103,7 +107,7 @@
|
|||
"card-delete-suggest-archive": "Om de kaart van het bord af te halen, zonder daarbij activiteiten te missen in de activiteiten feed, kan je klikken op \"archiveren\".",
|
||||
"card-due": "Deadline: ",
|
||||
"card-due-on": "Deadline: ",
|
||||
"card-spent": "Spent Time",
|
||||
"card-spent": "gespendeerde tijd",
|
||||
"card-edit-attachments": "Wijzig bijlagen",
|
||||
"card-edit-labels": "Wijzig labels",
|
||||
"card-edit-members": "Wijzig leden",
|
||||
|
@ -150,9 +154,9 @@
|
|||
"comment-only": "Alleen reageren",
|
||||
"comment-only-desc": "Kan alleen op kaarten reageren.",
|
||||
"computer": "Computer",
|
||||
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
|
||||
"confirm-checklist-delete-dialog": "Weet u zeker dat u de checklist wilt verwijderen",
|
||||
"copy-card-link-to-clipboard": "Kopieer kaart link naar klembord",
|
||||
"copyCardPopup-title": "Copy Card",
|
||||
"copyCardPopup-title": "Kopieer kaart",
|
||||
"create": "Aanmaken",
|
||||
"createBoardPopup-title": "Bord aanmaken",
|
||||
"chooseBoardSourcePopup-title": "Importeer bord",
|
||||
|
@ -172,11 +176,11 @@
|
|||
"edit": "Wijzig",
|
||||
"edit-avatar": "Wijzig avatar",
|
||||
"edit-profile": "Wijzig profiel",
|
||||
"edit-wip-limit": "Edit WIP Limit",
|
||||
"soft-wip-limit": "Soft WIP Limit",
|
||||
"edit-wip-limit": "Verander WIP limiet",
|
||||
"soft-wip-limit": "Zachte WIP limiet",
|
||||
"editCardStartDatePopup-title": "Wijzig start datum",
|
||||
"editCardDueDatePopup-title": "Wijzig deadline",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editCardSpentTimePopup-title": "Verander gespendeerde tijd",
|
||||
"editLabelPopup-title": "Wijzig label",
|
||||
"editNotificationPopup-title": "Wijzig notificatie",
|
||||
"editProfilePopup-title": "Wijzig profiel",
|
||||
|
@ -184,7 +188,7 @@
|
|||
"email-enrollAccount-subject": "Er is een account voor je aangemaakt op __siteName__",
|
||||
"email-enrollAccount-text": "Hallo __user__,\n\nOm gebruik te maken van de online dienst, kan je op de volgende link klikken.\n\n__url__\n\nBedankt.",
|
||||
"email-fail": "E-mail verzenden is mislukt",
|
||||
"email-fail-text": "Error trying to send email",
|
||||
"email-fail-text": "Fout tijdens het verzenden van de email",
|
||||
"email-invalid": "Ongeldige e-mail",
|
||||
"email-invite": "Nodig uit via e-mail",
|
||||
"email-invite-subject": "__inviter__ heeft je een uitnodiging gestuurd",
|
||||
|
@ -194,7 +198,7 @@
|
|||
"email-sent": "E-mail is verzonden",
|
||||
"email-verifyEmail-subject": "Verifieer je e-mailadres op __siteName__",
|
||||
"email-verifyEmail-text": "Hallo __user__,\n\nOm je e-mail te verifiëren vragen we je om op de link hieronder te drukken.\n\n__url__\n\nBedankt.",
|
||||
"enable-wip-limit": "Enable WIP Limit",
|
||||
"enable-wip-limit": "Activeer WIP limiet",
|
||||
"error-board-doesNotExist": "Dit bord bestaat niet.",
|
||||
"error-board-notAdmin": "Je moet een administrator zijn van dit bord om dat te doen.",
|
||||
"error-board-notAMember": "Je moet een lid zijn van dit bord om dat te doen.",
|
||||
|
@ -239,8 +243,8 @@
|
|||
"info": "Versie",
|
||||
"initials": "Initialen",
|
||||
"invalid-date": "Ongeldige datum",
|
||||
"invalid-time": "Invalid time",
|
||||
"invalid-user": "Invalid user",
|
||||
"invalid-time": "Ongeldige tijd",
|
||||
"invalid-user": "Ongeldige gebruiker",
|
||||
"joined": "doet nu mee met",
|
||||
"just-invited": "Je bent zojuist uitgenodigd om mee toen doen met dit bord",
|
||||
"keyboard-shortcuts": "Toetsenbord snelkoppelingen",
|
||||
|
@ -251,8 +255,8 @@
|
|||
"language": "Taal",
|
||||
"last-admin-desc": "Je kan de permissies niet veranderen omdat er maar een administrator is.",
|
||||
"leave-board": "Verlaat bord",
|
||||
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
|
||||
"leaveBoardPopup-title": "Leave Board ?",
|
||||
"leave-board-pop": "Weet u zeker dat u __boardTitle__ wilt verlaten? U wordt verwijderd van alle kaarten binnen dit bord",
|
||||
"leaveBoardPopup-title": "Bord verlaten?",
|
||||
"link-card": "Link naar deze kaart",
|
||||
"list-archive-cards": "Achiveer alle kaarten in deze lijst",
|
||||
"list-archive-cards-pop": "Deze actie zal alle kaarten in deze lijst archiveren. Om de gearchiveerde kaarten te bekijken, klik \"Menu\" > \"Gearchiveerde Items\"",
|
||||
|
@ -320,8 +324,8 @@
|
|||
"save": "Opslaan",
|
||||
"search": "Zoek",
|
||||
"select-color": "Selecteer kleur",
|
||||
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
|
||||
"setWipLimitPopup-title": "Set WIP Limit",
|
||||
"set-wip-limit-value": "Zet een limiet voor het maximaal aantal taken in deze lijst",
|
||||
"setWipLimitPopup-title": "Zet een WIP limiet",
|
||||
"shortcut-assign-self": "Wijs jezelf toe aan huidige kaart",
|
||||
"shortcut-autocomplete-emoji": "Emojis automatisch aanvullen",
|
||||
"shortcut-autocomplete-members": "Leden automatisch aanvullen",
|
||||
|
@ -342,11 +346,11 @@
|
|||
"team": "Team",
|
||||
"this-board": "dit bord",
|
||||
"this-card": "deze kaart",
|
||||
"spent-time-hours": "Spent time (hours)",
|
||||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"spent-time-hours": "Gespendeerde tijd (in uren)",
|
||||
"overtime-hours": "Overwerk (in uren)",
|
||||
"overtime": "Overwerk",
|
||||
"has-overtime-cards": "Heeft kaarten met overwerk",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Tijd",
|
||||
"title": "Titel",
|
||||
"tracking": "Volgen",
|
||||
|
@ -367,9 +371,9 @@
|
|||
"welcome-list1": "Basis",
|
||||
"welcome-list2": "Geadvanceerd",
|
||||
"what-to-do": "Wat wil je doen?",
|
||||
"wipLimitErrorPopup-title": "Invalid WIP Limit",
|
||||
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
|
||||
"wipLimitErrorPopup-title": "Ongeldige WIP limiet",
|
||||
"wipLimitErrorPopup-dialog-pt1": "Het aantal taken in deze lijst is groter dan de gedefinieerde WIP limiet ",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Verwijder een aantal taken uit deze lijst, of zet de WIP limiet hoger",
|
||||
"admin-panel": "Administrator paneel",
|
||||
"settings": "Instellingen",
|
||||
"people": "Mensen",
|
||||
|
@ -388,17 +392,17 @@
|
|||
"smtp-password": "Wachtwoord",
|
||||
"smtp-tls": "TLS ondersteuning",
|
||||
"send-from": "Van",
|
||||
"send-smtp-test": "Send a test email to yourself",
|
||||
"send-smtp-test": "Verzend een email naar uzelf",
|
||||
"invitation-code": "Uitnodigings code",
|
||||
"email-invite-register-subject": "__inviter__ heeft je een uitnodiging gestuurd",
|
||||
"email-invite-register-text": "Beste __user__,\n\n__inviter__ heeft je uitgenodigd voor Wekan om samen te werken.\n\nKlik op de volgende link:\n__url__\n\nEn je uitnodigingscode is __icode__\n\nBedankt.",
|
||||
"email-smtp-test-subject": "SMTP Test Email From Wekan",
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"email-smtp-test-subject": "SMTP Test email van Wekan",
|
||||
"email-smtp-test-text": "U heeft met succes een email verzonden",
|
||||
"error-invitation-code-not-exist": "Uitnodigings code bestaat niet",
|
||||
"error-notAuthorized": "Je bent niet toegestaan om deze pagina te bekijken.",
|
||||
"outgoing-webhooks": "Uitgaande Webhooks",
|
||||
"outgoingWebhooksPopup-title": "Uitgaande Webhooks",
|
||||
"new-outgoing-webhook": "New Outgoing Webhook",
|
||||
"new-outgoing-webhook": "Nieuwe webhook",
|
||||
"no-name": "(Onbekend)",
|
||||
"Wekan_version": "Wekan versie",
|
||||
"Node_version": "Node versie",
|
||||
|
@ -418,7 +422,7 @@
|
|||
"no": "Nee",
|
||||
"accounts": "Accounts",
|
||||
"accounts-allowEmailChange": "Sta E-mailadres wijzigingen toe",
|
||||
"createdAt": "Created at",
|
||||
"verified": "Verified",
|
||||
"active": "Active"
|
||||
"createdAt": "Gemaakt op",
|
||||
"verified": "Geverifieerd",
|
||||
"active": "Actief"
|
||||
}
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Dodaj załącznik",
|
||||
"add-board": "Dodaj tablicę",
|
||||
"add-card": "Dodaj kartę",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Dodaj listę kontrolną",
|
||||
"add-checklist-item": "Dodaj element do listy kontrolnej",
|
||||
"add-cover": "Dodaj okładkę",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Menu tablicy",
|
||||
"boards": "Tablice",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listy",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Anuluj",
|
||||
"card-archived": "Ta karta jest zarchiwizowana.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Tytuł",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"accept": "Aceitar",
|
||||
"act-activity-notify": "[Wekan] Notificação de Atividade",
|
||||
"act-addAttachment": "anexo __attachment__ de __card__",
|
||||
"act-addChecklist": "added checklist __checklist__ to __card__",
|
||||
"act-addChecklist": "added checklist __checklist__ no __card__",
|
||||
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
|
||||
"act-addComment": "comentou em __card__: __comment__",
|
||||
"act-createBoard": "criou __board__",
|
||||
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Adicionar Anexos",
|
||||
"add-board": "Adicionar Quadro",
|
||||
"add-card": "Adicionar Cartão",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Adicionar Checklist",
|
||||
"add-checklist-item": "Adicionar um item à lista de verificação",
|
||||
"add-cover": "Adicionar Capa",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Alterar observação",
|
||||
"boardMenuPopup-title": "Menu do Quadro",
|
||||
"boards": "Quadros",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listas",
|
||||
"bucket-example": "\"Bucket List\", por exemplo",
|
||||
"cancel": "Cancelar",
|
||||
"card-archived": "Este cartão está arquivado.",
|
||||
|
@ -239,7 +243,7 @@
|
|||
"info": "Versão",
|
||||
"initials": "Iniciais",
|
||||
"invalid-date": "Data inválida",
|
||||
"invalid-time": "Invalid time",
|
||||
"invalid-time": "Hora inválida",
|
||||
"invalid-user": "Usuário inválido",
|
||||
"joined": "juntou-se",
|
||||
"just-invited": "Você já foi convidado para este quadro",
|
||||
|
@ -345,8 +349,8 @@
|
|||
"spent-time-hours": "Tempo gasto (Horas)",
|
||||
"overtime-hours": "Tempo extras (Horas)",
|
||||
"overtime": "Tempo extras",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-overtime-cards": "Tem cartões de horas extras",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Tempo",
|
||||
"title": "Título",
|
||||
"tracking": "Tracking",
|
||||
|
|
428
i18n/pt.i18n.json
Normal file
428
i18n/pt.i18n.json
Normal file
|
@ -0,0 +1,428 @@
|
|||
{
|
||||
"accept": "Aceitar",
|
||||
"act-activity-notify": "[Wekan] Activity Notification",
|
||||
"act-addAttachment": "attached __attachment__ to __card__",
|
||||
"act-addChecklist": "added checklist __checklist__ to __card__",
|
||||
"act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
|
||||
"act-addComment": "commented on __card__: __comment__",
|
||||
"act-createBoard": "created __board__",
|
||||
"act-createCard": "added __card__ to __list__",
|
||||
"act-createList": "added __list__ to __board__",
|
||||
"act-addBoardMember": "added __member__ to __board__",
|
||||
"act-archivedBoard": "archived __board__",
|
||||
"act-archivedCard": "archived __card__",
|
||||
"act-archivedList": "archived __list__",
|
||||
"act-importBoard": "imported __board__",
|
||||
"act-importCard": "imported __card__",
|
||||
"act-importList": "imported __list__",
|
||||
"act-joinMember": "added __member__ to __card__",
|
||||
"act-moveCard": "moved __card__ from __oldList__ to __list__",
|
||||
"act-removeBoardMember": "removed __member__ from __board__",
|
||||
"act-restoredCard": "restored __card__ to __board__",
|
||||
"act-unjoinMember": "removed __member__ from __card__",
|
||||
"act-withBoardTitle": "[Wekan] __board__",
|
||||
"act-withCardTitle": "[__board__] __card__",
|
||||
"actions": "Actions",
|
||||
"activities": "Activities",
|
||||
"activity": "Activity",
|
||||
"activity-added": "added %s to %s",
|
||||
"activity-archived": "Arquivo %s",
|
||||
"activity-attached": "attached %s to %s",
|
||||
"activity-created": "Criado %s",
|
||||
"activity-excluded": "excluded %s from %s",
|
||||
"activity-imported": "imported %s into %s from %s",
|
||||
"activity-imported-board": "imported %s from %s",
|
||||
"activity-joined": "joined %s",
|
||||
"activity-moved": "moved %s from %s to %s",
|
||||
"activity-on": "on %s",
|
||||
"activity-removed": "removed %s from %s",
|
||||
"activity-sent": "sent %s to %s",
|
||||
"activity-unjoined": "unjoined %s",
|
||||
"activity-checklist-added": "added checklist to %s",
|
||||
"activity-checklist-item-added": "added checklist item to '%s' in %s",
|
||||
"add": "Adicionar",
|
||||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
"add-label": "Add Label",
|
||||
"add-list": "Add List",
|
||||
"add-members": "Add Members",
|
||||
"added": "Added",
|
||||
"addMemberPopup-title": "Membros",
|
||||
"admin": "Admin",
|
||||
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
|
||||
"admin-announcement": "Announcement",
|
||||
"admin-announcement-active": "Active System-Wide Announcement",
|
||||
"admin-announcement-title": "Announcement from Administrator",
|
||||
"all-boards": "All boards",
|
||||
"and-n-other-card": "And __count__ other card",
|
||||
"and-n-other-card_plural": "And __count__ other cards",
|
||||
"apply": "Apply",
|
||||
"app-is-offline": "Wekan is loading, please wait. Refreshing the page will cause data loss. If Wekan does not load, please check that Wekan server has not stopped.",
|
||||
"archive": "Archive",
|
||||
"archive-all": "Archive All",
|
||||
"archive-board": "Archive Board",
|
||||
"archive-card": "Archive Card",
|
||||
"archive-list": "Archive List",
|
||||
"archive-selection": "Archive selection",
|
||||
"archiveBoardPopup-title": "Archive Board?",
|
||||
"archived-items": "Archived Items",
|
||||
"archived-boards": "Archived Boards",
|
||||
"restore-board": "Restore Board",
|
||||
"no-archived-boards": "No Archived Boards.",
|
||||
"archives": "Archives",
|
||||
"assign-member": "Assign member",
|
||||
"attached": "attached",
|
||||
"attachment": "Attachment",
|
||||
"attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
|
||||
"attachmentDeletePopup-title": "Delete Attachment?",
|
||||
"attachments": "Attachments",
|
||||
"auto-watch": "Automatically watch boards when they are created",
|
||||
"avatar-too-big": "The avatar is too large (70KB max)",
|
||||
"back": "Back",
|
||||
"board-change-color": "Change color",
|
||||
"board-nb-stars": "%s stars",
|
||||
"board-not-found": "Board not found",
|
||||
"board-private-info": "This board will be <strong>private</strong>.",
|
||||
"board-public-info": "This board will be <strong>public</strong>.",
|
||||
"boardChangeColorPopup-title": "Change Board Background",
|
||||
"boardChangeTitlePopup-title": "Renomear Quadro",
|
||||
"boardChangeVisibilityPopup-title": "Change Visibility",
|
||||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
"card-comments-title": "This card has %s comment.",
|
||||
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
|
||||
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
|
||||
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
|
||||
"card-due": "Due",
|
||||
"card-due-on": "Due on",
|
||||
"card-spent": "Spent Time",
|
||||
"card-edit-attachments": "Edit attachments",
|
||||
"card-edit-labels": "Edit labels",
|
||||
"card-edit-members": "Edit members",
|
||||
"card-labels-title": "Change the labels for the card.",
|
||||
"card-members-title": "Add or remove members of the board from the card.",
|
||||
"card-start": "Start",
|
||||
"card-start-on": "Starts on",
|
||||
"cardAttachmentsPopup-title": "Attach From",
|
||||
"cardDeletePopup-title": "Delete Card?",
|
||||
"cardDetailsActionsPopup-title": "Card Actions",
|
||||
"cardLabelsPopup-title": "Etiquetas",
|
||||
"cardMembersPopup-title": "Membros",
|
||||
"cardMorePopup-title": "Mais",
|
||||
"cards": "Cartões",
|
||||
"change": "Alterar",
|
||||
"change-avatar": "Change Avatar",
|
||||
"change-password": "Change Password",
|
||||
"change-permissions": "Change permissions",
|
||||
"change-settings": "Change Settings",
|
||||
"changeAvatarPopup-title": "Change Avatar",
|
||||
"changeLanguagePopup-title": "Change Language",
|
||||
"changePasswordPopup-title": "Change Password",
|
||||
"changePermissionsPopup-title": "Change Permissions",
|
||||
"changeSettingsPopup-title": "Change Settings",
|
||||
"checklists": "Checklists",
|
||||
"click-to-star": "Click to star this board.",
|
||||
"click-to-unstar": "Click to unstar this board.",
|
||||
"clipboard": "Clipboard or drag & drop",
|
||||
"close": "Close",
|
||||
"close-board": "Close Board",
|
||||
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
|
||||
"color-black": "black",
|
||||
"color-blue": "blue",
|
||||
"color-green": "green",
|
||||
"color-lime": "lime",
|
||||
"color-orange": "orange",
|
||||
"color-pink": "pink",
|
||||
"color-purple": "purple",
|
||||
"color-red": "red",
|
||||
"color-sky": "sky",
|
||||
"color-yellow": "yellow",
|
||||
"comment": "Comentário",
|
||||
"comment-placeholder": "Write Comment",
|
||||
"comment-only": "Comment only",
|
||||
"comment-only-desc": "Can comment on cards only.",
|
||||
"computer": "Computador",
|
||||
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist",
|
||||
"copy-card-link-to-clipboard": "Copy card link to clipboard",
|
||||
"copyCardPopup-title": "Copy Card",
|
||||
"create": "Create",
|
||||
"createBoardPopup-title": "Create Board",
|
||||
"chooseBoardSourcePopup-title": "Import board",
|
||||
"createLabelPopup-title": "Create Label",
|
||||
"current": "current",
|
||||
"date": "Date",
|
||||
"decline": "Decline",
|
||||
"default-avatar": "Default avatar",
|
||||
"delete": "Delete",
|
||||
"deleteLabelPopup-title": "Delete Label?",
|
||||
"description": "Description",
|
||||
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
|
||||
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
|
||||
"discard": "Discard",
|
||||
"done": "Done",
|
||||
"download": "Download",
|
||||
"edit": "Edit",
|
||||
"edit-avatar": "Change Avatar",
|
||||
"edit-profile": "Edit Profile",
|
||||
"edit-wip-limit": "Edit WIP Limit",
|
||||
"soft-wip-limit": "Soft WIP Limit",
|
||||
"editCardStartDatePopup-title": "Change start date",
|
||||
"editCardDueDatePopup-title": "Change due date",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editLabelPopup-title": "Change Label",
|
||||
"editNotificationPopup-title": "Edit Notification",
|
||||
"editProfilePopup-title": "Edit Profile",
|
||||
"email": "Email",
|
||||
"email-enrollAccount-subject": "An account created for you on __siteName__",
|
||||
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"email-fail": "Sending email failed",
|
||||
"email-fail-text": "Error trying to send email",
|
||||
"email-invalid": "Invalid email",
|
||||
"email-invite": "Invite via Email",
|
||||
"email-invite-subject": "__inviter__ sent you an invitation",
|
||||
"email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
|
||||
"email-resetPassword-subject": "Reset your password on __siteName__",
|
||||
"email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"email-sent": "Email sent",
|
||||
"email-verifyEmail-subject": "Verify your email address on __siteName__",
|
||||
"email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
|
||||
"enable-wip-limit": "Enable WIP Limit",
|
||||
"error-board-doesNotExist": "This board does not exist",
|
||||
"error-board-notAdmin": "You need to be admin of this board to do that",
|
||||
"error-board-notAMember": "You need to be a member of this board to do that",
|
||||
"error-json-malformed": "Your text is not valid JSON",
|
||||
"error-json-schema": "Your JSON data does not include the proper information in the correct format",
|
||||
"error-list-doesNotExist": "This list does not exist",
|
||||
"error-user-doesNotExist": "This user does not exist",
|
||||
"error-user-notAllowSelf": "You can not invite yourself",
|
||||
"error-user-notCreated": "This user is not created",
|
||||
"error-username-taken": "This username is already taken",
|
||||
"error-email-taken": "Email has already been taken",
|
||||
"export-board": "Export board",
|
||||
"filter": "Filter",
|
||||
"filter-cards": "Filter Cards",
|
||||
"filter-clear": "Clear filter",
|
||||
"filter-no-label": "No label",
|
||||
"filter-no-member": "No member",
|
||||
"filter-on": "Filter is on",
|
||||
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
|
||||
"filter-to-selection": "Filter to selection",
|
||||
"fullname": "Full Name",
|
||||
"header-logo-title": "Go back to your boards page.",
|
||||
"hide-system-messages": "Hide system messages",
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
"import-board": "import board",
|
||||
"import-board-c": "Import board",
|
||||
"import-board-title-trello": "Import board from Trello",
|
||||
"import-board-title-wekan": "Import board from Wekan",
|
||||
"import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
|
||||
"from-trello": "From Trello",
|
||||
"from-wekan": "From Wekan",
|
||||
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
|
||||
"import-board-instruction-wekan": "In your Wekan board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
|
||||
"import-json-placeholder": "Paste your valid JSON data here",
|
||||
"import-map-members": "Map members",
|
||||
"import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
|
||||
"import-show-user-mapping": "Review members mapping",
|
||||
"import-user-select": "Pick the Wekan user you want to use as this member",
|
||||
"importMapMembersAddPopup-title": "Select Wekan member",
|
||||
"info": "Version",
|
||||
"initials": "Initials",
|
||||
"invalid-date": "Invalid date",
|
||||
"invalid-time": "Invalid time",
|
||||
"invalid-user": "Invalid user",
|
||||
"joined": "joined",
|
||||
"just-invited": "You are just invited to this board",
|
||||
"keyboard-shortcuts": "Keyboard shortcuts",
|
||||
"label-create": "Create Label",
|
||||
"label-default": "%s label (default)",
|
||||
"label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
|
||||
"labels": "Etiquetas",
|
||||
"language": "Language",
|
||||
"last-admin-desc": "You can’t change roles because there must be at least one admin.",
|
||||
"leave-board": "Leave Board",
|
||||
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
|
||||
"leaveBoardPopup-title": "Leave Board ?",
|
||||
"link-card": "Link to this card",
|
||||
"list-archive-cards": "Archive all cards in this list",
|
||||
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
|
||||
"list-move-cards": "Move all cards in this list",
|
||||
"list-select-cards": "Select all cards in this list",
|
||||
"listActionPopup-title": "List Actions",
|
||||
"listImportCardPopup-title": "Import a Trello card",
|
||||
"listMorePopup-title": "Mais",
|
||||
"link-list": "Link to this list",
|
||||
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
|
||||
"list-delete-suggest-archive": "You can archive a list to remove it from the board and preserve the activity.",
|
||||
"lists": "Lists",
|
||||
"log-out": "Log Out",
|
||||
"log-in": "Log In",
|
||||
"loginPopup-title": "Log In",
|
||||
"memberMenuPopup-title": "Member Settings",
|
||||
"members": "Membros",
|
||||
"menu": "Menu",
|
||||
"move-selection": "Move selection",
|
||||
"moveCardPopup-title": "Move Card",
|
||||
"moveCardToBottom-title": "Move to Bottom",
|
||||
"moveCardToTop-title": "Move to Top",
|
||||
"moveSelectionPopup-title": "Move selection",
|
||||
"multi-selection": "Multi-Selection",
|
||||
"multi-selection-on": "Multi-Selection is on",
|
||||
"muted": "Muted",
|
||||
"muted-info": "You will never be notified of any changes in this board",
|
||||
"my-boards": "My Boards",
|
||||
"name": "Nome",
|
||||
"no-archived-cards": "Nenhum cartão arquivado.",
|
||||
"no-archived-lists": "Nenhuma lista arquivada.",
|
||||
"no-results": "Nenhum resultado",
|
||||
"normal": "Normal",
|
||||
"normal-desc": "Can view and edit cards. Can't change settings.",
|
||||
"not-accepted-yet": "Invitation not accepted yet",
|
||||
"notify-participate": "Receive updates to any cards you participate as creater or member",
|
||||
"notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
|
||||
"optional": "optional",
|
||||
"or": "or",
|
||||
"page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
|
||||
"page-not-found": "Page not found.",
|
||||
"password": "Password",
|
||||
"paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
|
||||
"participating": "Participating",
|
||||
"preview": "Preview",
|
||||
"previewAttachedImagePopup-title": "Preview",
|
||||
"previewClipboardImagePopup-title": "Preview",
|
||||
"private": "Private",
|
||||
"private-desc": "This board is private. Only people added to the board can view and edit it.",
|
||||
"profile": "Profile",
|
||||
"public": "Public",
|
||||
"public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
|
||||
"quick-access-description": "Star a board to add a shortcut in this bar.",
|
||||
"remove-cover": "Remove Cover",
|
||||
"remove-from-board": "Remove from Board",
|
||||
"remove-label": "Remove Label",
|
||||
"listDeletePopup-title": "Delete List ?",
|
||||
"remove-member": "Remove Member",
|
||||
"remove-member-from-card": "Remove from Card",
|
||||
"remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
|
||||
"removeMemberPopup-title": "Remover Membro?",
|
||||
"rename": "Renomear",
|
||||
"rename-board": "Renomear Quadro",
|
||||
"restore": "Restore",
|
||||
"save": "Save",
|
||||
"search": "Search",
|
||||
"select-color": "Select Color",
|
||||
"set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
|
||||
"setWipLimitPopup-title": "Set WIP Limit",
|
||||
"shortcut-assign-self": "Assign yourself to current card",
|
||||
"shortcut-autocomplete-emoji": "Autocomplete emoji",
|
||||
"shortcut-autocomplete-members": "Autocomplete members",
|
||||
"shortcut-clear-filters": "Clear all filters",
|
||||
"shortcut-close-dialog": "Close Dialog",
|
||||
"shortcut-filter-my-cards": "Filter my cards",
|
||||
"shortcut-show-shortcuts": "Bring up this shortcuts list",
|
||||
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
|
||||
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
|
||||
"show-cards-minimum-count": "Show cards count if list contains more than",
|
||||
"sidebar-open": "Open Sidebar",
|
||||
"sidebar-close": "Close Sidebar",
|
||||
"signupPopup-title": "Create an Account",
|
||||
"star-board-title": "Click to star this board. It will show up at top of your boards list.",
|
||||
"starred-boards": "Starred Boards",
|
||||
"starred-boards-description": "Starred boards show up at the top of your boards list.",
|
||||
"subscribe": "Subscribe",
|
||||
"team": "Team",
|
||||
"this-board": "this board",
|
||||
"this-card": "this card",
|
||||
"spent-time-hours": "Spent time (hours)",
|
||||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
|
||||
"unassign-member": "Unassign member",
|
||||
"unsaved-description": "You have an unsaved description.",
|
||||
"unwatch": "Unwatch",
|
||||
"upload": "Upload",
|
||||
"upload-avatar": "Upload an avatar",
|
||||
"uploaded-avatar": "Uploaded an avatar",
|
||||
"username": "Username",
|
||||
"view-it": "View it",
|
||||
"warn-list-archived": "warning: this card is in an archived list",
|
||||
"watch": "Watch",
|
||||
"watching": "Watching",
|
||||
"watching-info": "You will be notified of any change in this board",
|
||||
"welcome-board": "Welcome Board",
|
||||
"welcome-list1": "Basics",
|
||||
"welcome-list2": "Advanced",
|
||||
"what-to-do": "What do you want to do?",
|
||||
"wipLimitErrorPopup-title": "Invalid WIP Limit",
|
||||
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
|
||||
"wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
|
||||
"admin-panel": "Admin Panel",
|
||||
"settings": "Settings",
|
||||
"people": "People",
|
||||
"registration": "Registration",
|
||||
"disable-self-registration": "Disable Self-Registration",
|
||||
"invite": "Invite",
|
||||
"invite-people": "Invite People",
|
||||
"to-boards": "To board(s)",
|
||||
"email-addresses": "Email Addresses",
|
||||
"smtp-host-description": "The address of the SMTP server that handles your emails.",
|
||||
"smtp-port-description": "The port your SMTP server uses for outgoing emails.",
|
||||
"smtp-tls-description": "Enable TLS support for SMTP server",
|
||||
"smtp-host": "SMTP Host",
|
||||
"smtp-port": "SMTP Port",
|
||||
"smtp-username": "Username",
|
||||
"smtp-password": "Password",
|
||||
"smtp-tls": "TLS support",
|
||||
"send-from": "From",
|
||||
"send-smtp-test": "Send a test email to yourself",
|
||||
"invitation-code": "Invitation Code",
|
||||
"email-invite-register-subject": "__inviter__ sent you an invitation",
|
||||
"email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
|
||||
"email-smtp-test-subject": "SMTP Test Email From Wekan",
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"error-invitation-code-not-exist": "Invitation code doesn't exist",
|
||||
"error-notAuthorized": "You are not authorized to view this page.",
|
||||
"outgoing-webhooks": "Outgoing Webhooks",
|
||||
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
|
||||
"new-outgoing-webhook": "New Outgoing Webhook",
|
||||
"no-name": "(Unknown)",
|
||||
"Wekan_version": "Wekan version",
|
||||
"Node_version": "Node version",
|
||||
"OS_Arch": "OS Arch",
|
||||
"OS_Cpus": "OS CPU Count",
|
||||
"OS_Freemem": "OS Free Memory",
|
||||
"OS_Loadavg": "OS Load Average",
|
||||
"OS_Platform": "OS Platform",
|
||||
"OS_Release": "OS Release",
|
||||
"OS_Totalmem": "OS Total Memory",
|
||||
"OS_Type": "OS Type",
|
||||
"OS_Uptime": "OS Uptime",
|
||||
"hours": "hours",
|
||||
"minutes": "minutes",
|
||||
"seconds": "seconds",
|
||||
"yes": "Yes",
|
||||
"no": "Não",
|
||||
"accounts": "Contas",
|
||||
"accounts-allowEmailChange": "Allow Email Change",
|
||||
"createdAt": "Created at",
|
||||
"verified": "Verificado",
|
||||
"active": "Ativo"
|
||||
}
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Liste",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Titlu",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Добавить вложение",
|
||||
"add-board": "Добавить доску",
|
||||
"add-card": "Добавить карту",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Добавить контрольный список",
|
||||
"add-checklist-item": "Добавить пункт в контрольный список",
|
||||
"add-cover": "Прикрепить",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Изменить Отслеживание",
|
||||
"boardMenuPopup-title": "Меню доски",
|
||||
"boards": "Доски",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Списки",
|
||||
"bucket-example": "Например “Список дел”",
|
||||
"cancel": "Отмена",
|
||||
"card-archived": "Эта карточка помещена в архив.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Переработка (в часах)",
|
||||
"overtime": "Переработка",
|
||||
"has-overtime-cards": "Имеются карточки с переработкой",
|
||||
"has-spenttime-cards": "Имеются карточки с учетом затраченного времени",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Время",
|
||||
"title": "Название",
|
||||
"tracking": "Отслеживание",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Dodaj novu stavku u listu",
|
||||
"add-cover": "Dodaj zaglavlje",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Meni table",
|
||||
"boards": "Table",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Na primer \"Lista zadataka\"",
|
||||
"cancel": "Otkaži",
|
||||
"card-archived": "Ova kartica je arhivirana",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Vreme",
|
||||
"title": "Naslov",
|
||||
"tracking": "Praćenje",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Lägg till bilaga",
|
||||
"add-board": "Lägg till anslagstavla",
|
||||
"add-card": "Lägg till kort",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Lägg till checklista",
|
||||
"add-checklist-item": "Lägg till ett objekt till kontrollista",
|
||||
"add-cover": "Lägg till omslag",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Ändra bevaka",
|
||||
"boardMenuPopup-title": "Anslagstavla meny",
|
||||
"boards": "Anslagstavlor",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listor",
|
||||
"bucket-example": "Gilla \"att-göra-innan-jag-dör-lista\" till exempel",
|
||||
"cancel": "Avbryt",
|
||||
"card-archived": "Detta kort är arkiverat.",
|
||||
|
@ -345,8 +349,8 @@
|
|||
"spent-time-hours": "Spenderad tid (timmar)",
|
||||
"overtime-hours": "Övertid (timmar)",
|
||||
"overtime": "Övertid",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-overtime-cards": "Har övertidskort",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Tid",
|
||||
"title": "Titel",
|
||||
"tracking": "Spårning",
|
||||
|
@ -388,12 +392,12 @@
|
|||
"smtp-password": "Lösenord",
|
||||
"smtp-tls": "TLS-stöd",
|
||||
"send-from": "Från",
|
||||
"send-smtp-test": "Send a test email to yourself",
|
||||
"send-smtp-test": "Skicka ett prov e-postmeddelande till dig själv",
|
||||
"invitation-code": "Inbjudningskod",
|
||||
"email-invite-register-subject": "__inviter__ skickade dig en inbjudan",
|
||||
"email-invite-register-text": "Bästa __user__,\n\n__inviter__ inbjuder dig till Wekan för samarbeten.\n\nVänligen följ länken nedan:\n__url__\n\nOch din inbjudningskod är: __icode__\n\nTack.",
|
||||
"email-smtp-test-subject": "SMTP Test Email From Wekan",
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"email-smtp-test-subject": "SMTP-prov e-post från Wekan",
|
||||
"email-smtp-test-text": "Du har skickat ett e-postmeddelande",
|
||||
"error-invitation-code-not-exist": "Inbjudningskod finns inte",
|
||||
"error-notAuthorized": "Du är inte behörig att se den här sidan.",
|
||||
"outgoing-webhooks": "Outgoing Webhooks",
|
||||
|
@ -418,7 +422,7 @@
|
|||
"no": "Nej",
|
||||
"accounts": "Konton",
|
||||
"accounts-allowEmailChange": "Tillåt e-poständring",
|
||||
"createdAt": "Created at",
|
||||
"createdAt": "Skapad vid",
|
||||
"verified": "Verifierad",
|
||||
"active": "Aktiv"
|
||||
}
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Add an item to checklist",
|
||||
"add-cover": "Add Cover",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Boards",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Cancel",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "เพิ่มรายการตรวจสอบ",
|
||||
"add-cover": "เพิ่มหน้าปก",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "เปลี่ยนการเฝ้าดู",
|
||||
"boardMenuPopup-title": "เมนูบอร์ด",
|
||||
"boards": "บอร์ด",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "รายการ",
|
||||
"bucket-example": "ตัวอย่างเช่น “ระบบที่ต้องทำ”",
|
||||
"cancel": "ยกเลิก",
|
||||
"card-archived": "การ์ดนี้ถูกเก็บไว้",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "เวลา",
|
||||
"title": "หัวข้อ",
|
||||
"tracking": "ติดตาม",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Ek Ekle",
|
||||
"add-board": "Pano Ekle",
|
||||
"add-card": "Kart Ekle",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Yapılacak Listesi Ekle",
|
||||
"add-checklist-item": "Yapılacak listesine yeni bir öğe ekle",
|
||||
"add-cover": "Kapak resmi ekle",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "İzleme Durumunu Değiştir",
|
||||
"boardMenuPopup-title": "Pano menüsü",
|
||||
"boards": "Panolar",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Listeler",
|
||||
"bucket-example": "Örn: \"Marketten Alacaklarım\"",
|
||||
"cancel": "İptal",
|
||||
"card-archived": "Bu kart arşivlendi.",
|
||||
|
@ -103,7 +107,7 @@
|
|||
"card-delete-suggest-archive": "Kartı panodan kaldırıp, buna rağmen aktivitelerini saklamak istiyorsan kartı arşivleyebilirsin.",
|
||||
"card-due": "Bitiş",
|
||||
"card-due-on": "Bitiş tarihi:",
|
||||
"card-spent": "Spent Time",
|
||||
"card-spent": "Harcanan Zaman",
|
||||
"card-edit-attachments": "Ek dosyasını düzenle",
|
||||
"card-edit-labels": "Etiketleri düzenle",
|
||||
"card-edit-members": "Üyeleri düzenle",
|
||||
|
@ -176,7 +180,7 @@
|
|||
"soft-wip-limit": "Zayıf Devam Eden İş Sınırı",
|
||||
"editCardStartDatePopup-title": "Başlangıç tarihini değiştir",
|
||||
"editCardDueDatePopup-title": "Bitiş tarihini değiştir",
|
||||
"editCardSpentTimePopup-title": "Change spent time",
|
||||
"editCardSpentTimePopup-title": "Harcanan zamanı değiştir",
|
||||
"editLabelPopup-title": "Etiket Değiştir",
|
||||
"editNotificationPopup-title": "Bildirimi değiştir",
|
||||
"editProfilePopup-title": "Profili Düzenle",
|
||||
|
@ -184,7 +188,7 @@
|
|||
"email-enrollAccount-subject": "Hesabınız __siteName__ üzerinde oluşturuldu",
|
||||
"email-enrollAccount-text": "Merhaba __user__,\n\nBu servisi kullanmaya başlamak için aşağıdaki linke tıklamalısın:\n\n__url__\n\nTeşekkürler.",
|
||||
"email-fail": "E-posta gönderimi başarısız",
|
||||
"email-fail-text": "Error trying to send email",
|
||||
"email-fail-text": "E-Posta gönderilme çalışırken hata oluştu",
|
||||
"email-invalid": "Geçersiz e-posta",
|
||||
"email-invite": "E-posta ile davet et",
|
||||
"email-invite-subject": "__inviter__ size bir davetiye gönderdi",
|
||||
|
@ -239,8 +243,8 @@
|
|||
"info": "Sürüm",
|
||||
"initials": "İlk Harfleri",
|
||||
"invalid-date": "Geçersiz tarih",
|
||||
"invalid-time": "Invalid time",
|
||||
"invalid-user": "Invalid user",
|
||||
"invalid-time": "Geçersiz zaman",
|
||||
"invalid-user": "Geçersiz kullanıcı",
|
||||
"joined": "katıldı",
|
||||
"just-invited": "Bu panoya şimdi davet edildin.",
|
||||
"keyboard-shortcuts": "Klavye kısayolları",
|
||||
|
@ -342,11 +346,11 @@
|
|||
"team": "Takım",
|
||||
"this-board": "bu panoyu",
|
||||
"this-card": "bu kart",
|
||||
"spent-time-hours": "Spent time (hours)",
|
||||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"spent-time-hours": "Harcanan zaman (saat)",
|
||||
"overtime-hours": "Aşılan süre (saat)",
|
||||
"overtime": "Aşılan süre",
|
||||
"has-overtime-cards": "Süresi aşılmış kartlar",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Zaman",
|
||||
"title": "Başlık",
|
||||
"tracking": "Takip",
|
||||
|
@ -388,12 +392,12 @@
|
|||
"smtp-password": "Parola",
|
||||
"smtp-tls": "TLS desteği",
|
||||
"send-from": "Gönderen",
|
||||
"send-smtp-test": "Send a test email to yourself",
|
||||
"send-smtp-test": "Kendinize deneme E-Postası gönderin",
|
||||
"invitation-code": "Davetiye kodu",
|
||||
"email-invite-register-subject": "__inviter__ size bir davetiye gönderdi",
|
||||
"email-invite-register-text": "Sevgili __user__,\n\n__inviter__ sizi beraber çalışabilmek için Wekan'a davet etti.\n\nLütfen aşağıdaki linke tıklayın:\n__url__\n\nDavetiye kodunuz: __icode__\n\nTeşekkürler.",
|
||||
"email-smtp-test-subject": "SMTP Test Email From Wekan",
|
||||
"email-smtp-test-text": "You have successfully sent an email",
|
||||
"email-smtp-test-subject": "Wekan' dan SMTP E-Postası",
|
||||
"email-smtp-test-text": "E-Posta başarıyla gönderildi",
|
||||
"error-invitation-code-not-exist": "Davetiye kodu bulunamadı",
|
||||
"error-notAuthorized": "Bu sayfayı görmek için yetkiniz yok.",
|
||||
"outgoing-webhooks": "Dışarı giden bağlantılar",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Add Attachment",
|
||||
"add-board": "Add Board",
|
||||
"add-card": "Add Card",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Add Checklist",
|
||||
"add-checklist-item": "Додати елемент в список",
|
||||
"add-cover": "Додати обкладинку",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Change Watch",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Дошки",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Відміна",
|
||||
"card-archived": "This card is archived.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "Thêm Bản Đính Kèm",
|
||||
"add-board": "Thêm Bảng",
|
||||
"add-card": "Thêm Thẻ",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "Thêm Danh Sách Kiểm Tra",
|
||||
"add-checklist-item": "Thêm Một Mục Vào Danh Sách Kiểm Tra",
|
||||
"add-cover": "Thêm Bìa",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "Đổi cách xem",
|
||||
"boardMenuPopup-title": "Board Menu",
|
||||
"boards": "Bảng",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "Lists",
|
||||
"bucket-example": "Like “Bucket List” for example",
|
||||
"cancel": "Hủy",
|
||||
"card-archived": "Thẻ này đã được lưu.",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "Time",
|
||||
"title": "Title",
|
||||
"tracking": "Tracking",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "添加附件",
|
||||
"add-board": "添加看板",
|
||||
"add-card": "添加卡片",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "添加待办清单",
|
||||
"add-checklist-item": "扩充清单",
|
||||
"add-cover": "添加封面",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "更改关注状态",
|
||||
"boardMenuPopup-title": "看板菜单",
|
||||
"boards": "看板",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "列表",
|
||||
"bucket-example": "例如 “遗愿清单”",
|
||||
"cancel": "取消",
|
||||
"card-archived": "该卡片已被归档",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "超时 (小时)",
|
||||
"overtime": "超时",
|
||||
"has-overtime-cards": "有超时卡片",
|
||||
"has-spenttime-cards": "有耗时卡片",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "时间",
|
||||
"title": "标题",
|
||||
"tracking": "跟踪",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"add-attachment": "新增附件",
|
||||
"add-board": "新增看板",
|
||||
"add-card": "新增卡片",
|
||||
"add-swimlane": "Add Swimlane",
|
||||
"add-checklist": "新增待辦清單",
|
||||
"add-checklist-item": "新增項目",
|
||||
"add-cover": "新增封面",
|
||||
|
@ -94,6 +95,9 @@
|
|||
"boardChangeWatchPopup-title": "更改觀察",
|
||||
"boardMenuPopup-title": "看板選單",
|
||||
"boards": "看板",
|
||||
"board-view": "Board View",
|
||||
"board-view-swimlanes": "Swimlanes",
|
||||
"board-view-lists": "清單",
|
||||
"bucket-example": "例如 “目標清單”",
|
||||
"cancel": "取消",
|
||||
"card-archived": "該卡片已被刪除",
|
||||
|
@ -346,7 +350,7 @@
|
|||
"overtime-hours": "Overtime (hours)",
|
||||
"overtime": "Overtime",
|
||||
"has-overtime-cards": "Has overtime cards",
|
||||
"has-spenttime-cards": "Has spenttime cards",
|
||||
"has-spenttime-cards": "Has spent time cards",
|
||||
"time": "時間",
|
||||
"title": "標題",
|
||||
"tracking": "追蹤",
|
||||
|
|
|
@ -1,83 +1,90 @@
|
|||
Attachments = new FS.Collection('attachments', {
|
||||
stores: [
|
||||
Attachments = new FS.Collection('attachments', {
|
||||
stores: [
|
||||
|
||||
// XXX Add a new store for cover thumbnails so we don't load big images in
|
||||
// the general board view
|
||||
new FS.Store.GridFS('attachments', {
|
||||
// If the uploaded document is not an image we need to enforce browser
|
||||
// download instead of execution. This is particularly important for HTML
|
||||
// files that the browser will just execute if we don't serve them with the
|
||||
// appropriate `application/octet-stream` MIME header which can lead to user
|
||||
// data leaks. I imagine other formats (like PDF) can also be attack vectors.
|
||||
// See https://github.com/wekan/wekan/issues/99
|
||||
// XXX Should we use `beforeWrite` option of CollectionFS instead of
|
||||
// collection-hooks?
|
||||
// We should use `beforeWrite`.
|
||||
beforeWrite: (fileObj) => {
|
||||
if (!fileObj.isImage()) {
|
||||
return {
|
||||
type: 'application/octet-stream',
|
||||
};
|
||||
}
|
||||
return {};
|
||||
// XXX Add a new store for cover thumbnails so we don't load big images in
|
||||
// the general board view
|
||||
new FS.Store.GridFS('attachments', {
|
||||
// If the uploaded document is not an image we need to enforce browser
|
||||
// download instead of execution. This is particularly important for HTML
|
||||
// files that the browser will just execute if we don't serve them with the
|
||||
// appropriate `application/octet-stream` MIME header which can lead to user
|
||||
// data leaks. I imagine other formats (like PDF) can also be attack vectors.
|
||||
// See https://github.com/wekan/wekan/issues/99
|
||||
// XXX Should we use `beforeWrite` option of CollectionFS instead of
|
||||
// collection-hooks?
|
||||
// We should use `beforeWrite`.
|
||||
beforeWrite: (fileObj) => {
|
||||
if (!fileObj.isImage()) {
|
||||
return {
|
||||
type: 'application/octet-stream',
|
||||
};
|
||||
}
|
||||
return {};
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
|
||||
if (Meteor.isServer) {
|
||||
Attachments.allow({
|
||||
insert(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
update(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
remove(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
// We authorize the attachment download either:
|
||||
// - if the board is public, everyone (even unconnected) can download it
|
||||
// - if the board is private, only board members can download it
|
||||
download(userId, doc) {
|
||||
const board = Boards.findOne(doc.boardId);
|
||||
if (board.isPublic()) {
|
||||
return true;
|
||||
} else {
|
||||
return board.hasMember(userId);
|
||||
}
|
||||
},
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
if (Meteor.isServer) {
|
||||
Attachments.allow({
|
||||
insert(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
update(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
remove(userId, doc) {
|
||||
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
// We authorize the attachment download either:
|
||||
// - if the board is public, everyone (even unconnected) can download it
|
||||
// - if the board is private, only board members can download it
|
||||
download(userId, doc) {
|
||||
const board = Boards.findOne(doc.boardId);
|
||||
if (board.isPublic()) {
|
||||
return true;
|
||||
} else {
|
||||
return board.hasMember(userId);
|
||||
}
|
||||
},
|
||||
|
||||
fetch: ['boardId'],
|
||||
});
|
||||
}
|
||||
|
||||
// XXX Enforce a schema for the Attachments CollectionFS
|
||||
|
||||
if (Meteor.isServer) {
|
||||
Attachments.files.after.insert((userId, doc) => {
|
||||
// If the attachment doesn't have a source field
|
||||
// or its source is different than import
|
||||
if (!doc.source || doc.source !== 'import') {
|
||||
// Add activity about adding the attachment
|
||||
Activities.insert({
|
||||
userId,
|
||||
type: 'card',
|
||||
activityType: 'addAttachment',
|
||||
attachmentId: doc._id,
|
||||
boardId: doc.boardId,
|
||||
cardId: doc.cardId,
|
||||
});
|
||||
} else {
|
||||
// Don't add activity about adding the attachment as the activity
|
||||
// be imported and delete source field
|
||||
Attachments.update( {_id: doc._id}, {$unset: { source : '' } } );
|
||||
}
|
||||
});
|
||||
|
||||
Attachments.files.after.remove((userId, doc) => {
|
||||
Activities.remove({
|
||||
attachmentId: doc._id,
|
||||
fetch: ['boardId'],
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// XXX Enforce a schema for the Attachments CollectionFS
|
||||
|
||||
if (Meteor.isServer) {
|
||||
Attachments.files.after.insert((userId, doc) => {
|
||||
// If the attachment doesn't have a source field
|
||||
// or its source is different than import
|
||||
if (!doc.source || doc.source !== 'import') {
|
||||
// Add activity about adding the attachment
|
||||
Activities.insert({
|
||||
userId,
|
||||
type: 'card',
|
||||
activityType: 'addAttachment',
|
||||
attachmentId: doc._id,
|
||||
boardId: doc.boardId,
|
||||
cardId: doc.cardId,
|
||||
});
|
||||
} else {
|
||||
// Don't add activity about adding the attachment as the activity
|
||||
// be imported and delete source field
|
||||
Attachments.update({
|
||||
_id: doc._id,
|
||||
}, {
|
||||
$unset: {
|
||||
source: '',
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Attachments.files.after.remove((userId, doc) => {
|
||||
Activities.remove({
|
||||
attachmentId: doc._id,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -31,6 +31,14 @@ Boards.attachSchema(new SimpleSchema({
|
|||
}
|
||||
},
|
||||
},
|
||||
view: {
|
||||
type: String,
|
||||
autoValue() { // eslint-disable-line consistent-return
|
||||
if (this.isInsert) {
|
||||
return 'board-view-swimlanes';
|
||||
}
|
||||
},
|
||||
},
|
||||
createdAt: {
|
||||
type: Date,
|
||||
autoValue() { // eslint-disable-line consistent-return
|
||||
|
@ -187,6 +195,10 @@ Boards.helpers({
|
|||
return Lists.find({ boardId: this._id, archived: false }, { sort: { sort: 1 } });
|
||||
},
|
||||
|
||||
swimlanes() {
|
||||
return Swimlanes.find({ boardId: this._id, archived: false }, { sort: { sort: 1 } });
|
||||
},
|
||||
|
||||
hasOvertimeCards(){
|
||||
const card = Cards.findOne({isOvertime: true, boardId: this._id, archived: false} );
|
||||
return card !== undefined;
|
||||
|
|
|
@ -18,6 +18,9 @@ Cards.attachSchema(new SimpleSchema({
|
|||
listId: {
|
||||
type: String,
|
||||
},
|
||||
swimlaneId: {
|
||||
type: String,
|
||||
},
|
||||
// The system could work without this `boardId` information (we could deduce
|
||||
// the board identifier from the card), but it would make the system more
|
||||
// difficult to manage and less efficient.
|
||||
|
@ -216,9 +219,10 @@ Cards.mutations({
|
|||
return {$set: {description}};
|
||||
},
|
||||
|
||||
move(listId, sortIndex) {
|
||||
move(swimlaneId, listId, sortIndex) {
|
||||
const list = Lists.findOne(listId);
|
||||
const mutatedFields = {
|
||||
swimlaneId,
|
||||
listId,
|
||||
boardId: list.boardId,
|
||||
};
|
||||
|
|
|
@ -75,11 +75,15 @@ Lists.allow({
|
|||
});
|
||||
|
||||
Lists.helpers({
|
||||
cards() {
|
||||
return Cards.find(Filter.mongoSelector({
|
||||
cards(swimlaneId) {
|
||||
const selector = {
|
||||
listId: this._id,
|
||||
archived: false,
|
||||
}), { sort: ['sort'] });
|
||||
};
|
||||
if (swimlaneId)
|
||||
selector.swimlaneId = swimlaneId;
|
||||
return Cards.find(Filter.mongoSelector(selector,
|
||||
{ sort: ['sort'] }));
|
||||
},
|
||||
|
||||
allCards() {
|
||||
|
|
219
models/swimlanes.js
Normal file
219
models/swimlanes.js
Normal file
|
@ -0,0 +1,219 @@
|
|||
Swimlanes = new Mongo.Collection('swimlanes');
|
||||
|
||||
Swimlanes.attachSchema(new SimpleSchema({
|
||||
title: {
|
||||
type: String,
|
||||
},
|
||||
archived: {
|
||||
type: Boolean,
|
||||
autoValue() { // eslint-disable-line consistent-return
|
||||
if (this.isInsert && !this.isSet) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
},
|
||||
boardId: {
|
||||
type: String,
|
||||
},
|
||||
createdAt: {
|
||||
type: Date,
|
||||
autoValue() { // eslint-disable-line consistent-return
|
||||
if (this.isInsert) {
|
||||
return new Date();
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
},
|
||||
},
|
||||
sort: {
|
||||
type: Number,
|
||||
decimal: true,
|
||||
// XXX We should probably provide a default
|
||||
optional: true,
|
||||
},
|
||||
updatedAt: {
|
||||
type: Date,
|
||||
optional: true,
|
||||
autoValue() { // eslint-disable-line consistent-return
|
||||
if (this.isUpdate) {
|
||||
return new Date();
|
||||
} else {
|
||||
this.unset();
|
||||
}
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
Swimlanes.allow({
|
||||
insert(userId, doc) {
|
||||
return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
update(userId, doc) {
|
||||
return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
remove(userId, doc) {
|
||||
return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId));
|
||||
},
|
||||
fetch: ['boardId'],
|
||||
});
|
||||
|
||||
Swimlanes.helpers({
|
||||
cards() {
|
||||
return Cards.find(Filter.mongoSelector({
|
||||
swimlaneId: this._id,
|
||||
archived: false,
|
||||
}), { sort: ['sort'] });
|
||||
},
|
||||
|
||||
allCards() {
|
||||
return Cards.find({ swimlaneId: this._id });
|
||||
},
|
||||
|
||||
board() {
|
||||
return Boards.findOne(this.boardId);
|
||||
},
|
||||
});
|
||||
|
||||
Swimlanes.mutations({
|
||||
rename(title) {
|
||||
return { $set: { title } };
|
||||
},
|
||||
|
||||
archive() {
|
||||
return { $set: { archived: true } };
|
||||
},
|
||||
|
||||
restore() {
|
||||
return { $set: { archived: false } };
|
||||
},
|
||||
});
|
||||
|
||||
Swimlanes.hookOptions.after.update = { fetchPrevious: false };
|
||||
|
||||
if (Meteor.isServer) {
|
||||
Meteor.startup(() => {
|
||||
Swimlanes._collection._ensureIndex({ boardId: 1 });
|
||||
});
|
||||
|
||||
Swimlanes.after.insert((userId, doc) => {
|
||||
Activities.insert({
|
||||
userId,
|
||||
type: 'swimlane',
|
||||
activityType: 'createSwimlane',
|
||||
boardId: doc.boardId,
|
||||
swimlaneId: doc._id,
|
||||
});
|
||||
});
|
||||
|
||||
Swimlanes.before.remove((userId, doc) => {
|
||||
Activities.insert({
|
||||
userId,
|
||||
type: 'swimlane',
|
||||
activityType: 'removeSwimlane',
|
||||
boardId: doc.boardId,
|
||||
swimlaneId: doc._id,
|
||||
title: doc.title,
|
||||
});
|
||||
});
|
||||
|
||||
Swimlanes.after.update((userId, doc) => {
|
||||
if (doc.archived) {
|
||||
Activities.insert({
|
||||
userId,
|
||||
type: 'swimlane',
|
||||
activityType: 'archivedSwimlane',
|
||||
swimlaneId: doc._id,
|
||||
boardId: doc.boardId,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//SWIMLANE REST API
|
||||
if (Meteor.isServer) {
|
||||
JsonRoutes.add('GET', '/api/boards/:boardId/swimlanes', function (req, res, next) {
|
||||
try {
|
||||
const paramBoardId = req.params.boardId;
|
||||
Authentication.checkBoardAccess( req.userId, paramBoardId);
|
||||
|
||||
JsonRoutes.sendResult(res, {
|
||||
code: 200,
|
||||
data: Swimlanes.find({ boardId: paramBoardId, archived: false }).map(function (doc) {
|
||||
return {
|
||||
_id: doc._id,
|
||||
title: doc.title,
|
||||
};
|
||||
}),
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
JsonRoutes.sendResult(res, {
|
||||
code: 200,
|
||||
data: error,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
JsonRoutes.add('GET', '/api/boards/:boardId/swimlanes/:swimlaneId', function (req, res, next) {
|
||||
try {
|
||||
const paramBoardId = req.params.boardId;
|
||||
const paramSwimlaneId = req.params.swimlaneId;
|
||||
Authentication.checkBoardAccess( req.userId, paramBoardId);
|
||||
JsonRoutes.sendResult(res, {
|
||||
code: 200,
|
||||
data: Swimlanes.findOne({ _id: paramSwimlaneId, boardId: paramBoardId, archived: false }),
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
JsonRoutes.sendResult(res, {
|
||||
code: 200,
|
||||
data: error,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
JsonRoutes.add('POST', '/api/boards/:boardId/swimlanes', function (req, res, next) {
|
||||
try {
|
||||
Authentication.checkUserId( req.userId);
|
||||
const paramBoardId = req.params.boardId;
|
||||
const id = Swimlanes.insert({
|
||||
title: req.body.title,
|
||||
boardId: paramBoardId,
|
||||
});
|
||||
JsonRoutes.sendResult(res, {
|
||||
code: 200,
|
||||
data: {
|
||||
_id: id,
|
||||
},
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
JsonRoutes.sendResult(res, {
|
||||
code: 200,
|
||||
data: error,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
JsonRoutes.add('DELETE', '/api/boards/:boardId/swimlanes/:swimlaneId', function (req, res, next) {
|
||||
try {
|
||||
Authentication.checkUserId( req.userId);
|
||||
const paramBoardId = req.params.boardId;
|
||||
const paramSwimlaneId = req.params.swimlaneId;
|
||||
Swimlanes.remove({ _id: paramSwimlaneId, boardId: paramBoardId });
|
||||
JsonRoutes.sendResult(res, {
|
||||
code: 200,
|
||||
data: {
|
||||
_id: paramSwimlaneId,
|
||||
},
|
||||
});
|
||||
}
|
||||
catch (error) {
|
||||
JsonRoutes.sendResult(res, {
|
||||
code: 200,
|
||||
data: error,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "wekan",
|
||||
"version": "0.63.0",
|
||||
"version": "0.65.0",
|
||||
"description": "The open-source Trello-like kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
@ -24,8 +24,8 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"babel-runtime": "^6.23.0",
|
||||
"bcrypt": "^1.0.2",
|
||||
"bson": "^1.0.4",
|
||||
"bcrypt": "^1.0.3",
|
||||
"bson-ext": "^1.0.5",
|
||||
"es6-promise": "^4.1.0",
|
||||
"meteor-node-stubs": "^0.2.6",
|
||||
"os": "^0.1.1",
|
||||
|
|
|
@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
|||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 48,
|
||||
appVersion = 50,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "0.63.0~2017-12-20"),
|
||||
appMarketingVersion = (defaultText = "0.65.0~2018-01-28"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
|
|
@ -22,7 +22,7 @@ const sandstormBoard = {
|
|||
|
||||
if (isSandstorm && Meteor.isServer) {
|
||||
const fs = require('fs');
|
||||
const Capnp = require('capnp');
|
||||
const Capnp = require('/node_modules/capnp.js');
|
||||
const Package = Capnp.importSystem('sandstorm/package.capnp');
|
||||
const Powerbox = Capnp.importSystem('sandstorm/powerbox.capnp');
|
||||
const Identity = Capnp.importSystem('sandstorm/identity.capnp');
|
||||
|
|
|
@ -151,3 +151,39 @@ Migrations.add('add-sort-checklists', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
Migrations.add('add-swimlanes', () => {
|
||||
Boards.find().forEach((board) => {
|
||||
const swimlane = Swimlanes.findOne({ boardId: board._id });
|
||||
let swimlaneId = '';
|
||||
if (swimlane)
|
||||
swimlaneId = swimlane._id;
|
||||
else
|
||||
swimlaneId = Swimlanes.direct.insert({
|
||||
boardId: board._id,
|
||||
title: 'Default',
|
||||
});
|
||||
|
||||
Cards.find({ boardId: board._id }).forEach((card) => {
|
||||
if (!card.hasOwnProperty('swimlaneId')) {
|
||||
Cards.direct.update(
|
||||
{ _id: card._id },
|
||||
{ $set: { swimlaneId } },
|
||||
noValidate
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Migrations.add('add-views', () => {
|
||||
Boards.find().forEach((board) => {
|
||||
if (!board.hasOwnProperty('view')) {
|
||||
Boards.direct.update(
|
||||
{ _id: board._id },
|
||||
{ $set: { view: 'board-view-swimlanes' } },
|
||||
noValidate
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -73,6 +73,7 @@ Meteor.publishRelations('board', function(boardId) {
|
|||
],
|
||||
}, { limit: 1 }), function(boardId, board) {
|
||||
this.cursor(Lists.find({ boardId }));
|
||||
this.cursor(Swimlanes.find({ boardId }));
|
||||
this.cursor(Integrations.find({ boardId }));
|
||||
|
||||
// Cards and cards comments
|
||||
|
|
|
@ -70,15 +70,16 @@ parts:
|
|||
wekan:
|
||||
source: .
|
||||
plugin: nodejs
|
||||
node-engine: 4.8.7
|
||||
node-engine: 8.9.3
|
||||
node-packages:
|
||||
- n
|
||||
- npm@4.6.1
|
||||
- npm@5.5.1
|
||||
- node-gyp
|
||||
- node-pre-gyp
|
||||
- fibers@1.0.15
|
||||
build-packages:
|
||||
- fibers@2.0.0
|
||||
stage-packages:
|
||||
- ca-certificates
|
||||
build-packages:
|
||||
- apt-utils
|
||||
- python
|
||||
- g++
|
||||
- capnproto
|
||||
|
@ -88,21 +89,19 @@ parts:
|
|||
prepare: |
|
||||
echo "Cleaning environment first"
|
||||
rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules
|
||||
echo "Installing node"
|
||||
n 4.8.7
|
||||
echo "Applying paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303"
|
||||
paxctl -mC `which node`
|
||||
echo "Installing meteor"
|
||||
curl https://install.meteor.com/ -o install_meteor.sh
|
||||
sed -i "s|RELEASE=.*|RELEASE=\"1.4.4.1\"|g" install_meteor.sh
|
||||
sed -i "s|RELEASE=.*|RELEASE=\"1.6.0.1\"|g" install_meteor.sh
|
||||
chmod +x install_meteor.sh
|
||||
sh install_meteor.sh
|
||||
rm install_meteor.sh
|
||||
mkdir -p ~/.meteor/packages
|
||||
cd ~/.meteor/packages
|
||||
mkdir packages
|
||||
cd packages
|
||||
git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
|
||||
git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
|
||||
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/.meteor/packages/meteor-useraccounts-core/package.js
|
||||
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' meteor-useraccounts-core/package.js
|
||||
cd ..
|
||||
build: |
|
||||
rm -rf package-lock.json .build
|
||||
|
@ -110,12 +109,12 @@ parts:
|
|||
meteor npm install --allow-superuser
|
||||
meteor build .build --directory --allow-superuser
|
||||
cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
|
||||
sed -i "s|build\/Release\/bson|browser_build\/bson|g" .build/bundle/programs/server/npm/node_modules/meteor/cfs_gridfs/node_modules/mongodb/node_modules/bson/ext/index.js
|
||||
cd .build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
|
||||
rm -rf node_modules/bcrypt
|
||||
npm install bcrypt
|
||||
meteor npm install --save bcrypt
|
||||
cd ../../../../
|
||||
npm install
|
||||
meteor npm install --save bcrypt
|
||||
install: |
|
||||
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
|
||||
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue