diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index eedd056f3..5ba76383d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,24 +1,20 @@ -FROM ubuntu:24.04 -LABEL maintainer="wekan" -LABEL org.opencontainers.image.ref.name="ubuntu" -LABEL org.opencontainers.image.version="24.04" -LABEL org.opencontainers.image.source="https://github.com/wekan/wekan" +FROM ubuntu:21.10 +LABEL maintainer="sgr" # 2022-04-25: # - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling, # so changing to 21.10. https://github.com/wekan/wekan/issues/4488 -ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ iproute2 apt-transport-https libarchive-tools" -ENV DEV_DEPS="curl python3 ca-certificates build-essential git" -ARG DEBIAN_FRONTEND=noninteractive +ENV BUILD_DEPS="gnupg gosu libarchive-tools wget curl bzip2 g++ build-essential python3 git ca-certificates iproute2" +ENV DEBIAN_FRONTEND=noninteractive ENV \ DEBUG=false \ NODE_VERSION=v14.21.4 \ - METEOR_RELEASE=METEOR@2.14 \ + METEOR_RELEASE=METEOR@2.13 \ USE_EDGE=false \ METEOR_EDGE=1.5-beta.17 \ - NPM_VERSION=6.14.17 \ + NPM_VERSION=latest \ FIBERS_VERSION=4.0.1 \ ARCHITECTURE=linux-x64 \ SRC_PATH=./ \ @@ -32,14 +28,15 @@ ENV \ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \ ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS=90 \ + RICHER_CARD_COMMENT_EDITOR=false \ + CARD_OPENED_WEBHOOK_ENABLED=false \ + ATTACHMENTS_STORE_PATH="" \ ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM="" \ ATTACHMENTS_UPLOAD_MIME_TYPES="" \ ATTACHMENTS_UPLOAD_MAX_SIZE=0 \ AVATARS_UPLOAD_EXTERNAL_PROGRAM="" \ AVATARS_UPLOAD_MIME_TYPES="" \ AVATARS_UPLOAD_MAX_SIZE=0 \ - RICHER_CARD_COMMENT_EDITOR=false \ - CARD_OPENED_WEBHOOK_ENABLED=false \ MAX_IMAGE_PIXEL="" \ IMAGE_COMPRESS_RATIO="" \ NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE="" \ @@ -51,15 +48,12 @@ ENV \ MATOMO_SITE_ID="" \ MATOMO_DO_NOT_TRACK=true \ MATOMO_WITH_USERNAME=false \ - METRICS_ALLOWED_IP_ADDRESSES="" \ BROWSER_POLICY_ENABLED=true \ TRUSTED_URL="" \ WEBHOOKS_ATTRIBUTES="" \ OAUTH2_ENABLED=false \ - OIDC_REDIRECTION_ENABLED=false \ OAUTH2_CA_CERT="" \ OAUTH2_ADFS_ENABLED=false \ - OAUTH2_B2C_ENABLED=false \ OAUTH2_LOGIN_STYLE=redirect \ OAUTH2_CLIENT_ID="" \ OAUTH2_SECRET="" \ @@ -76,9 +70,6 @@ ENV \ LDAP_ENABLE=false \ LDAP_PORT=389 \ LDAP_HOST="" \ - LDAP_AD_SIMPLE_AUTH="" \ - LDAP_USER_AUTHENTICATION=false \ - LDAP_USER_AUTHENTICATION_FIELD=uid \ LDAP_BASEDN="" \ LDAP_LOGIN_FALLBACK=false \ LDAP_RECONNECT=true \ @@ -96,6 +87,8 @@ ENV \ LDAP_ENCRYPTION=false \ LDAP_CA_CERT="" \ LDAP_REJECT_UNAUTHORIZED=false \ + LDAP_USER_AUTHENTICATION=false \ + LDAP_USER_AUTHENTICATION_FIELD=uid \ LDAP_USER_SEARCH_FILTER="" \ LDAP_USER_SEARCH_SCOPE="" \ LDAP_USER_SEARCH_FIELD="" \ @@ -150,32 +143,69 @@ ENV \ SAML_IDENTIFIER_FORMAT="" \ SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \ SAML_ATTRIBUTES="" \ - ORACLE_OIM_ENABLED=false \ - WAIT_SPINNER="" \ - WRITABLE_PATH=/data \ + DEFAULT_WAIT_SPINNER="" \ S3="" +# \ +# NODE_OPTIONS="--max_old_space_size=4096" -# NODE_OPTIONS="--max_old_space_size=4096" - -#--------------------------------------------- -# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ==== -# https://github.com/wekan/wekan/wiki/autologin -#- OIDC_REDIRECTION_ENABLED=true #--------------------------------------------------------------------- +# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132 +# Add more Node heap: +# NODE_OPTIONS="--max_old_space_size=4096" +# Add more stack: +# bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js" +#--------------------------------------------------------------------- + +# Install OS +RUN set -o xtrace \ + && useradd --user-group -m --system --home-dir /home/wekan wekan \ + && apt-get update \ + && apt-get install --assume-yes --no-install-recommends apt-utils apt-transport-https ca-certificates 2>&1 \ + && apt-get install --assume-yes --no-install-recommends ${BUILD_DEPS} + +# OLD: +# && curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$ARCHITECTURE.tar.xz" \ +# && curl -fsSLO --compressed "https://nodejs.org/dist/$NODE_VERSION/SHASUMS256.txt.asc" \ + +# Install NodeJS +RUN set -o xtrace \ + && cd /tmp \ + && curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.xz" \ + && curl -fsSLO --compressed "https://github.com/wekan/node-v14-esm/releases/download/${NODE_VERSION}/SHASUMS256.txt" \ + && grep " node-$NODE_VERSION-$ARCHITECTURE.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xJf "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ + && rm "node-$NODE_VERSION-$ARCHITECTURE.tar.xz" SHASUMS256.txt \ + && ln -s /usr/local/bin/node /usr/local/bin/nodejs \ + && mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp /root/.node-gyp/${NODE_VERSION} /home/wekan/.config \ + && npm install -g npm@${NPM_VERSION} \ + && chown wekan:wekan --recursive /home/wekan/.config + +ENV DEBIAN_FRONTEND=dialog + +USER wekan + +# Install Meteor +RUN set -o xtrace \ + && cd /home/wekan \ + && curl https://install.meteor.com/?release=$METEOR_VERSION --output /home/wekan/install-meteor.sh \ + # Replace tar with bsdtar in the install script; https://github.com/jshimko/meteor-launchpad/issues/39 + && sed --in-place "s/tar -xzf.*/bsdtar -xf \"\$TARBALL_FILE\" -C \"\$INSTALL_TMPDIR\"/g" /home/wekan/install-meteor.sh \ + && sed --in-place 's/VERBOSITY="--silent"/VERBOSITY="--progress-bar"/' /home/wekan/install-meteor.sh \ + && printf "\n[-] Installing Meteor $METEOR_VERSION...\n\n" \ + && sh /home/wekan/install-meteor.sh ENV PATH=$PATH:/home/wekan/.meteor/ -RUN <> /etc/environment -EOR +USER root + +RUN echo "export PATH=$PATH" >> /etc/environment + +USER wekan # Copy source dir -RUN < ### Server Setup Information - -Please anonymize info, and do not any of your Wekan board URLs, passwords, -API tokens etc to this public issue. - + * Did you test in newest Wekan?: * Did you configure root-url correctly so Wekan cards open correctly (see https://github.com/wekan/wekan/wiki/Settings)? * Operating System: @@ -31,25 +23,13 @@ API tokens etc to this public issue. * What webbrowser version are you using (Wekan should work on all modern browsers that support Javascript)? ### Problem description - -Add a recorded animated gif (e.g. with https://github.com/phw/peek) about -how it works currently, and screenshot mockups how it should work. - - + #### Reproduction Steps - - #### Logs + -Check Right Click / Inspect / Console in you browser - generally Chromium -based browsers show more detailed info than Firefox based browsers. - -Please anonymize logs. - + diff --git a/.github/workflows/depsreview.yaml b/.github/workflows/depsreview.yaml index b9d6d20ff..b9945082d 100644 --- a/.github/workflows/depsreview.yaml +++ b/.github/workflows/depsreview.yaml @@ -11,4 +11,4 @@ jobs: - name: 'Checkout Repository' uses: actions/checkout@v4 - name: 'Dependency Review' - uses: actions/dependency-review-action@v4 + uses: actions/dependency-review-action@v3 diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 173603b2c..3ae068cd7 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -38,7 +38,7 @@ jobs: # https://github.com/docker/login-action - name: Log into registry ${{ env.REGISTRY }} if: github.event_name != 'pull_request' - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 + uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -48,14 +48,14 @@ jobs: # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta - uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 + uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} # Build and push Docker image with Buildx (don't push on PR) # https://github.com/docker/build-push-action - name: Build and push Docker image - uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 + uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 with: context: . push: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fcdbed26d..dbe30ccaa 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,6 +25,6 @@ jobs: git config user.email "$GITHUB_ACTOR@users.noreply.github.com" - name: Run chart-releaser - uses: helm/chart-releaser-action@v1.7.0 + uses: helm/chart-releaser-action@v1.6.0 env: CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/test_suite.yml b/.github/workflows/test_suite.yml index a02b3e254..811742b5a 100644 --- a/.github/workflows/test_suite.yml +++ b/.github/workflows/test_suite.yml @@ -95,7 +95,7 @@ jobs: # CACHING - name: Install Meteor id: cache-meteor-install - uses: actions/cache@v4 + uses: actions/cache@v3 with: path: ~/.meteor key: v1-meteor-${{ hashFiles('.meteor/versions') }} @@ -104,7 +104,7 @@ jobs: - name: Cache NPM dependencies id: cache-meteor-npm - uses: actions/cache@v4 + uses: actions/cache@v3 with: path: ~/.npm key: v1-npm-${{ hashFiles('package-lock.json') }} @@ -113,7 +113,7 @@ jobs: - name: Cache Meteor build id: cache-meteor-build - uses: actions/cache@v4 + uses: actions/cache@v3 with: path: | .meteor/local/resolver-result-cache.json @@ -125,7 +125,7 @@ jobs: v1-meteor_build_cache- - name: Setup meteor - uses: meteorengineer/setup-meteor@v2 + uses: meteorengineer/setup-meteor@v1 with: meteor-release: '2.2' @@ -136,7 +136,7 @@ jobs: run: sh ./test-wekan.sh -cv - name: Upload coverage - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: coverage-folder path: .coverage/ @@ -150,14 +150,14 @@ jobs: uses: actions/checkout@v4 - name: Download coverage - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v3 with: name: coverage-folder path: .coverage/ - name: Coverage Report - uses: VeryGoodOpenSource/very_good_coverage@v3.0.0 + uses: VeryGoodOpenSource/very_good_coverage@v2.1.0 with: path: ".coverage/lcov.info" min_coverage: 1 # TODO add tests and increase to 95! diff --git a/.meteor/packages b/.meteor/packages index 95e40c00c..67f39c007 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -6,7 +6,7 @@ meteor-base@1.5.1 # Build system -ecmascript@0.16.8 +ecmascript@0.16.7 standard-minifier-js@2.8.1 mquandalle:jade coffeescript@2.4.1! @@ -20,11 +20,11 @@ cottz:publish-relations dburles:collection-helpers idmontie:migrations easy:search -mongo@1.16.8 +mongo@1.16.8-beta2140.0 mquandalle:collection-mutations # Account system -accounts-password@2.4.0 +accounts-password@2.4.0-beta2140.0 useraccounts:core useraccounts:flow-routing useraccounts:unstyled @@ -42,7 +42,7 @@ jquery@3.0.0! random@1.2.1 reactive-dict@1.3.1 session@1.2.1 -tracker@1.3.3 +tracker@1.3.2 underscore@1.0.13 arillo:flow-router-helpers audit-argument-checks@1.0.7 @@ -83,14 +83,14 @@ matb33:collection-hooks simple:json-routes kadira:flow-router spacebars -service-configuration@1.3.2 +service-configuration@1.3.2-beta2140.0 communitypackages:picker minifier-css@1.6.4 blaze kadira:blaze-layout peerlibrary:blaze-components ejson@1.1.3 -logging@1.3.3 +logging@1.3.3-beta2140.0 wekan-fullcalendar momentjs:moment@2.29.3 wekan-fontawesome diff --git a/.meteor/release b/.meteor/release index c500c39d6..f0e85a40e 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@2.14 +METEOR@2.14-beta.0 diff --git a/.meteor/versions b/.meteor/versions index fbf430721..769a8909f 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,6 +1,6 @@ -accounts-base@2.2.10 -accounts-oauth@1.4.3 -accounts-password@2.4.0 +accounts-base@2.2.9-beta2140.0 +accounts-oauth@1.4.3-beta2140.0 +accounts-password@2.4.0-beta2140.0 aldeed:collection2@2.10.0 aldeed:collection2-core@1.2.0 aldeed:schema-deny@1.1.0 @@ -10,13 +10,13 @@ allow-deny@1.1.1 arillo:flow-router-helpers@0.5.2 audit-argument-checks@1.0.7 autoupdate@1.8.0 -babel-compiler@7.10.5 +babel-compiler@7.10.4 babel-runtime@1.5.1 base64@1.0.12 binary-heap@1.0.11 blaze@2.7.1 blaze-tools@1.1.3 -boilerplate-generator@1.7.2 +boilerplate-generator@1.7.1 caching-compiler@1.2.2 caching-html-compiler@1.2.1 callback-hook@1.5.1 @@ -29,22 +29,22 @@ dburles:collection-helpers@1.1.0 ddp@1.4.1 ddp-client@2.6.1 ddp-common@1.4.0 -ddp-rate-limiter@1.2.1 -ddp-server@2.7.0 +ddp-rate-limiter@1.2.0 +ddp-server@2.7.0-beta2140.0 deps@1.0.12 diff-sequence@1.1.2 dynamic-import@0.7.3 easy:search@2.2.1 easysearch:components@2.2.2 easysearch:core@2.2.2 -ecmascript@0.16.8 +ecmascript@0.16.7 ecmascript-runtime@0.8.1 ecmascript-runtime-client@0.12.1 ecmascript-runtime-server@0.11.0 ejson@1.1.3 email@2.2.5 es5-shim@4.8.0 -fetch@0.1.4 +fetch@0.1.4-beta2140.0 geojson-utils@1.0.11 hot-code-push@1.0.4 html-tools@1.1.3 @@ -60,10 +60,10 @@ kadira:flow-router@2.12.1 konecty:mongo-counter@0.0.5_3 lmieulet:meteor-coverage@1.1.4 localstorage@1.2.0 -logging@1.3.3 +logging@1.3.3-beta2140.0 matb33:collection-hooks@1.3.0 mdg:validation-error@0.5.1 -meteor@1.11.5 +meteor@1.11.4-beta2140.0 meteor-autosize@5.0.1 meteor-base@1.5.1 meteorhacks:aggregate@1.3.0 @@ -77,11 +77,11 @@ minifier-css@1.6.4 minifier-js@2.7.5 minifiers@1.1.8-faster-rebuild.0 minimongo@1.9.3 -modern-browsers@0.1.10 -modules@0.20.0 +modern-browsers@0.1.10-beta2140.0 +modules@0.19.0 modules-runtime@0.13.1 momentjs:moment@2.29.3 -mongo@1.16.8 +mongo@1.16.8-beta2140.0 mongo-decimal@0.1.3 mongo-dev-server@1.1.0 mongo-id@1.0.8 @@ -94,8 +94,8 @@ mquandalle:jade-compiler@0.4.5 mquandalle:jquery-textcomplete@0.8.0_1 mquandalle:mousetrap-bindglobal@0.0.1 msavin:usercache@1.8.0 -npm-mongo@4.17.2 -oauth@2.2.1 +npm-mongo@4.17.0-beta2140.0 +oauth@2.2.1-beta2140.0 oauth2@1.3.2 observe-sequence@1.0.21 ongoworks:speakingurl@1.1.0 @@ -111,19 +111,19 @@ peerlibrary:blaze-components@0.23.0 peerlibrary:computed-field@0.10.0 peerlibrary:data-lookup@0.3.0 peerlibrary:reactive-field@0.6.0 -percolate:synced-cron@1.5.2 +percolate:synced-cron@1.3.2 promise@0.12.2 raix:eventemitter@0.1.3 raix:handlebar-helpers@0.2.5 random@1.2.1 rate-limit@1.1.1 -react-fast-refresh@0.2.8 +react-fast-refresh@0.2.8-beta2140.0 reactive-dict@1.3.1 reactive-var@1.0.12 reload@1.3.1 retry@1.1.0 routepolicy@1.1.1 -service-configuration@1.3.3 +service-configuration@1.3.2-beta2140.0 session@1.2.1 sha@1.0.9 shell-server@0.5.0 @@ -132,7 +132,7 @@ simple:json-routes@2.3.1 simple:rest-accounts-password@1.2.2 simple:rest-bearer-token-parser@1.1.1 simple:rest-json-error-handler@1.1.1 -socket-stream-client@0.5.2 +socket-stream-client@0.5.1 spacebars@1.4.1 spacebars-compiler@1.3.1 standard-minifier-js@2.8.1 @@ -141,15 +141,15 @@ templating@1.4.1 templating-compiler@1.4.1 templating-runtime@1.5.0 templating-tools@1.2.2 -tracker@1.3.3 -typescript@4.9.5 +tracker@1.3.2 +typescript@4.9.4 ui@1.0.13 underscore@1.0.13 url@1.3.2 useraccounts:core@1.16.2 useraccounts:flow-routing@1.15.0 useraccounts:unstyled@1.14.2 -webapp@1.13.6 +webapp@1.13.5 webapp-hashing@1.1.1 wekan-accounts-cas@0.1.0 wekan-accounts-lockout@1.0.0 diff --git a/.tx/config b/.tx/config index 7745b5608..261af1170 100644 --- a/.tx/config +++ b/.tx/config @@ -1,6 +1,6 @@ [main] host = https://www.transifex.com -lang_map = te_IN: te-IN, es_AR: es-AR, es_419: es-LA, es_TX: es-TX, he_IL: he-IL, zh_CN: zh-CN, ar_EG: ar-EG, cs_CZ: cs-CZ, fa_IR: fa-IR, ms_MY: ms-MY, nl_NL: nl-NL, de_CH: de-CH, en_IT: en-IT, uz_UZ: uz-UZ, fr_CH: fr-CH, hi_IN: hi-IN, et_EE: et-EE, es_PE: es-PE, es_MX: es-MX, gl_ES: gl-ES, mn_MN: mn, sl_SI: sl, zh_TW: zh-TW, ast_ES: ast-ES, es_CL: es-CL, ja_JP: ja, lv_LV: lv, ro_RO: ro-RO, az_AZ: az-AZ, cy_GB: cy-GB, gu_IN: gu-IN, pl_PL: pl-PL, vep: ve-PP, en_BR: en-BR, en@ysv: en-YS, hu_HU: hu, ko_KR: ko-KR, pt_BR: pt-BR, zh_HK: zh-HK, zu_ZA: zu-ZA, en_MY: en-MY, ja-Hira: ja-HI, fi_FI: fi, vec: ve-CC, vi_VN: vi-VN, fr_FR: fr-FR, id_ID: id, zh_Hans: zh-Hans, en_DE: en-DE, en_GB: en-GB, el_GR: el-GR, uk_UA: uk-UA, az@latin: az-LA, de_AT: de-AT, uz@Latn: uz-LA, vls: vl-SS, ar_DZ: ar-DZ, bg_BG: bg, es_PY: es-PY, fy_NL: fy-NL, uz@Arab: uz-AR, ru_UA: ru-UA, war: wa-RR, zh_CN.GB2312: zh-GB +lang_map = es_AR: es-AR, es_419: es-LA, es_TX: es-TX, he_IL: he-IL, zh_CN: zh-CN, ar_EG: ar-EG, cs_CZ: cs-CZ, fa_IR: fa-IR, ms_MY: ms-MY, nl_NL: nl-NL, de_CH: de-CH, en_IT: en-IT, uz_UZ: uz-UZ, fr_CH: fr-CH, hi_IN: hi-IN, et_EE: et-EE, es_PE: es-PE, es_MX: es-MX, gl_ES: gl-ES, mn_MN: mn, sl_SI: sl, zh_TW: zh-TW, ast_ES: ast-ES, es_CL: es-CL, ja_JP: ja, lv_LV: lv, ro_RO: ro-RO, az_AZ: az-AZ, cy_GB: cy-GB, gu_IN: gu-IN, pl_PL: pl-PL, vep: ve-PP, en_BR: en-BR, en@ysv: en-YS, hu_HU: hu, ko_KR: ko-KR, pt_BR: pt-BR, zh_HK: zh-HK, zu_ZA: zu-ZA, en_MY: en-MY, ja-Hira: ja-HI, fi_FI: fi, vec: ve-CC, vi_VN: vi-VN, fr_FR: fr-FR, id_ID: id, zh_Hans: zh-Hans, en_DE: en-DE, en_GB: en-GB, el_GR: el-GR, uk_UA: uk-UA, az@latin: az-LA, de_AT: de-AT, uz@Latn: uz-LA, vls: vl-SS, ar_DZ: ar-DZ, bg_BG: bg, es_PY: es-PY, fy_NL: fy-NL, uz@Arab: uz-AR, ru_UA: ru-UA, war: wa-RR, zh_CN.GB2312: zh-GB [o:wekan:p:wekan:r:application] file_filter = imports/i18n/data/.i18n.json diff --git a/.vscode/launch.json b/.vscode/launch.json index 5cdd3f3ef..1cb8d89fa 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,57 +1,45 @@ { "version": "0.2.0", "configurations": [ - { - "type": "node", - "request": "launch", - "name": "Meteor: Node", - "runtimeExecutable": "meteor", - "runtimeArgs": [ - "--port=4000", - "--exclude-archs=web.browser.legacy,web.cordova", - "--raw-logs" - ], - "env": { - "WRITABLE_PATH": "/tmp/uploads", + { + "type": "chrome", + "request": "launch", + "name": "Meteor: Chrome", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}" }, - "outputCapture": "std", - "restart": true, - "timeout": 60000 - }, - { - "type": "chrome", - "request": "launch", - "name": "Meteor: Chrome", - "url": "http://localhost:4000", - "sourceMapPathOverrides": { - "meteor://💻app/*": "${workspaceFolder}/*" + { + "type": "node", + "request": "launch", + "name": "Meteor: Node", + "runtimeExecutable": "/home/wekan/.meteor/meteor", + "runtimeArgs": ["run", "--inspect-brk=9229"], + "outputCapture": "std", + "port": 9229, + "timeout": 60000 }, - "userDataDir": "${env:HOME}/.vscode/chrome" - }, - { - "type": "node", - "request": "launch", - "name": "Test: Node", - "runtimeExecutable": "meteor", - "runtimeArgs": [ - "test", - "--port=4040", - "--exclude-archs=web.browser.legacy,web.cordova", - "--driver-package=meteortesting:mocha", - "--settings=settings.json", - "--raw-logs" - ], - "env": { - "TEST_WATCH": "1" - }, - "outputCapture": "std", - "timeout": 60000 - } + { + "type": "node", + "request": "launch", + "name": "Test: Node", + "runtimeExecutable": "meteor", + "runtimeArgs": [ + "test", + "--inspect-brk=9229", + "--port=4040", + "--exclude-archs=web.browser.legacy,web.cordova", + "--driver-package=meteortesting:mocha", + "--settings=settings.json" + ], + "outputCapture": "std", + "port": 9229, + "timeout": 60000 + } ], "compounds": [ - { - "name": "Meteor: All", - "configurations": ["Meteor: Node", "Meteor: Chrome"] - } + { + "name": "Meteor: All", + "configurations": ["Meteor: Node", "Meteor: Chrome"] + } ] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 495be0185..9a884a816 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,1261 +1,25 @@ [Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac) -Newest WeKan at these amd64 platforms: +Newest Node.js is at https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4 -- Windows and Linux bundle -- Snap Candidate -- Docker -- Kubernetes +Required versions of Node.js, MongoDB etc are listed at https://wekan.github.io +Download section. -Fixing other platforms In Progress. +Newest WeKan is on platforms: Snap Candidate, Docker, Kubernetes, Source/Bundle. Download section at https://wekan.github.io -- Install info at Server part of webpage https://wekan.github.io -- Newest Node.js is at https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4 -- MongoDB 6.x +In Progress is: +- Getting newest WeKan to all platforms, fixing any migration and upgrade issues +- Adding more platforms +- Developing all paid features and fixes https://wekan.team/commercial-support/ +- More info and news at https://github.com/wekan/wekan/issues/4578#issuecomment-1505909376 + +Note: +- Snap Candidate has newest WeKan with MongoDB 6 https://github.com/wekan/wekan/issues/4824#issuecomment-1425753485 +- Snap Beta has old WeKan with MongoDB 5 https://github.com/wekan/wekan/issues/4780#issuecomment-1427625571 +- Snap Stable has old WeKan 6.09 with MongoDB 3.2.2 [How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585) -# Upcoming WeKan ® release - -This release adds the following updates: - -- Updated Browser compatibility matrix, adding Iris browser at RISC OS Direct, and fixing links. - [Part1](https://github.com/wekan/wekan/commit/db5346fc5c7407160f381c0fcf4a87204206ed55), - [Part2](https://github.com/wekan/wekan/commit/05d1736f5f21e93e83b2e25029c6cab6c5106398). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.84 2025-03-23 WeKan ® release - -This release adds the following new features: - -- [Time on minicard for Start/End/Due Date](https://github.com/wekan/wekan/pull/5712). - Thanks to Rayene123. - -and adds the following updates: - -- [Added developer docs about Login code](https://github.com/wekan/wekan/commit/c0e4e01deb936653df69b4fd21598ac27cd349a0). - Thanks to xet7. -- Updated dependencies. - [Part 1](https://github.com/wekan/wekan/pull/5718), - [Part 2](https://github.com/wekan/wekan/commit/bb6ac70f63b6f3568b7c943417c698615936a956). - Thanks to developers of dependencies. - -and fixes the following bugs: - -- [Fixed typo at Shortcuts, now became visible translations of assignees visibility 1-9 shortcuts](https://github.com/wekan/wekan/commit/4510ddda1507bc775b9523d3673adba48d7a8385). - Thanks to xet7. -- [Fixed building OpenAPI docs](https://github.com/wekan/wekan/commit/a2911bc9c3bd94ef583388931d2cd354cc8657e3). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.83 2025-03-08 WeKan ® release - -This release adds the following updates: - -- [Adding Development information to readme](https://github.com/wekan/wekan/pull/5702). - Thanks to adam-fu. -- Updated GitHub actions. - [Part 1](https://github.com/wekan/wekan/pull/5703), - [Part 2](https://github.com/wekan/wekan/pull/5704). - -and fixes the following bugs: - -- [Removed siteurl from manifest to fix browser console error about not matching URL](https://github.com/wekan/wekan/commit/b402676079517e463ed291285f69c04126a00975). - Thanks to xet7. -- [Exception while invoking method 'copyCard' TypeError: Cannot read property 'name' of undefined](https://github.com/wekan/wekan/pull/5711). - Thanks to Firas-Git. -- [Comment out error message of non-existing Custom Field](https://github.com/wekan/wekan/commit/908a5fc60d5d574a36d4bfd496d3a16fd267ae75). - Thanks to xet7. -- [Reverted Docker changes of WeKan v7.68 to get WeKan Docker version working](https://github.com/wekan/wekan/commit/e7462ada12ec8edfd08d6c3b3a97a034211d51eb). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.82 2025-02-24 WeKan ® release - -v7.82 Docker version is broken: https://github.com/wekan/wekan/issues/5697 . Snap Candidate works. - -This release adds the following new features: - -- [Add possibility to use a token in place of ipaddress to access metrics route](https://github.com/wekan/wekan/pull/5682). - Thanks to salleman33. - -and adds the following updates: - -- [Updated dependencies](https://github.com/wekan/wekan/pull/5691). - Thanks to dependabot. -- [Updated requirements at docs](https://github.com/wekan/wekan/commit/148b81262d0d143460e881d645fefa6740aae40d). - Thanks to mueller-ma. -- [Updated dependencies](https://github.com/wekan/wekan/commit/666ee8403388f7d5e1a30cf0e53bc46a70bf1c40). - Thanks to developes of dependencies. -- [Fixed building WeKan. Updated dompurify. Forked Meteor 2.14 version of meteor-node-stubs to update elliptic](https://github.com/wekan/wekan/commit/18d0fa43275cd2955dd6416213e316ca08a62255). - Thanks to developers of depedencies and xet7. - -and fixes the following bugs: - -- [Added missing ) character](https://github.com/wekan/wekan/commit/563a508e269be87eb713e2888409525e1ba82001). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.81 2025-02-07 WeKan ® release - -This release adds the following new features: - -- [Helm Chart: Added secretManaged value for enabling or disabling the creation of secret by Helm](https://github.com/wekan/charts/pull/39). - Thanks to salleman33. - -and adds the following updates: - -- [Updated Docker Actions](https://github.com/wekan/wekan/pull/5670). - Thanks to dependabot. -- [Added Meteor 3.1 learning course to docs](https://github.com/wekan/wekan/commit/0c7e12c5e7f322bdbaaa61100e66153dd0b92e4d). - Thanks to producer of learning course. -- [Upgraded to MongoDB 6.0.20 at Snap Candidate](https://github.com/wekan/wekan/commit/b571f1c9530b899db75bf28a03c18277a9b77cb8). - Thanks to MongoDB developers. - -and fixes the following bugs: - -- [Fixed env variable METRICS_ACCEPTED_IP_ADDRESS to be same as at docs](https://github.com/wekan/wekan/commit/0b1e0bd39569175668c195b63dde91bf0e6f1b24). - Thanks to salleman33. -- [Fixed misspelling of hours at env variable setting LDAP_BACKGROUND_SYNC_INTERVAL](https://github.com/wekan/wekan/commit/36a307785369337a788499065f64175971878930). - Thanks to hubermam. -- [Helm Chart: Restore pod security context in deployment](https://github.com/wekan/charts/pull/40). - Thanks to adalinesimonian. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.80 2025-01-12 WeKan ® release - -This release fixes the following bugs: - -- [Fix card updating issues with ReactiveCache when using keyboard shortcuts](https://github.com/wekan/wekan/pull/5654). - Thanks to NadavTasher. -- [Fix assignee toggling keyboard shortcut to only toggle current board members](https://github.com/wekan/wekan/pull/5655). - Thanks to NadavTasher. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.79 2025-01-02 WeKan ® release - -This release adds the following new features: - -- [Add toggle for week-of-year in date displays (ISO 8601)](https://github.com/wekan/wekan/pull/5652). - Thanks to NadavTasher. -- [Assign members using keyboard shortcut Ctrl+Alt+(1-9)](https://github.com/wekan/wekan/pull/5653). - Thanks to NadavTasher. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.78 2024-12-31 WeKan ® release - -This release fixes the following bugs: - -- [Disable scrollbars on older versions of Chrome and Safari in "no vertical scrollbars" mode](https://github.com/wekan/wekan/pull/5644). - Thanks to NadavTasher. -- [Fix styling for vertical scrollbars toggle](https://github.com/wekan/wekan/pull/5645). - Thanks to NadavTasher. -- [Add additional archiving keyboard shortcut (added -)](https://github.com/wekan/wekan/pull/5646). - Thanks to NadavTasher. -- [Fix assign-self shortcut in shortcut help popup (different from actual shortcut)](https://github.com/wekan/wekan/pull/5647). - Thanks to NadavTasher. -- [Fix upper-case keyboard shortcuts & different language shortcuts getting triggered when shortcuts are disabled](https://github.com/wekan/wekan/pull/5648). - Thanks to NadavTasher. -- [Fix list header too wide in cleanlight and cleandark themes](https://github.com/wekan/wekan/pull/5649). - Thanks to NadavTasher. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.77 2024-12-30 WeKan ® release - -This release adds the following new features: - -- [Allow vertical scrollbars to be disabled (new preference)](https://github.com/wekan/wekan/pull/5643). - Thanks to NadavTasher. - -and fixes the following bugs: - -- [Enable keyboard shortcuts by default](https://github.com/wekan/wekan/pull/5639). - Thanks to NadavTasher. -- [Fix comment backgrounds in cleandark theme](https://github.com/wekan/wekan/pull/5640). - Thanks to NadavTasher. -- [Fix weird add checklist buttons in card details](https://github.com/wekan/wekan/pull/5641). - Thanks to NadavTasher. -- [Fix "SPACE" shortcut not working after recent fixes](https://github.com/wekan/wekan/pull/5642). - Thanks to NadavTasher. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.76 2024-12-30 WeKan ® release - -This release fixes the following bugs: - -- [Always handle the escape key when shortcuts are enabled](https://github.com/wekan/wekan/pull/5636). - Thanks to NadavTasher. -- [New Swimlane button visible, when there are no swimlanes at all](https://github.com/wekan/wekan/pull/5635). - Thanks to NadavTasher. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.75 2024-12-29 WeKan ® release - -This release fixes the following bugs: - -- [Change margins around keyboard shortcuts toggle to make it clearer, remove old toggle from mobile view](https://github.com/wekan/wekan/pull/5634). - Thanks to NadavTasher. -- [Fix Cannot save Layout settings](https://github.com/wekan/wekan/commit/407d018067a5398f0c8d50519096b921d744be68). - Thanks to tensor5g and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.74 2024-12-25 WeKan ® release - -This release fixes the following bugs: - -- [Restore keyboard shortcuts, enable per-user toggle, fix Ctrl + C bug by checking the text selection range](https://github.com/wekan/wekan/pull/5628). - Thanks to NadavTasher. -- [Fixed keyboard shortcuts defaults, icons and texts to be more understandable](https://github.com/wekan/wekan/commit/955a46ca6016e75c0ac1b01e25f96f47c2844559). - Thanks to xet7. -- ["Auto List Width" is now at "List ☰ Set Width" popup](https://github.com/wekan/wekan/commit/a862486ec37fcd022619c7e45ad9ca615aa444ed). - Thanks to xet7. -- [Keyboard Shortcuts Enable/Disable is now at Right Sidebar, where already was list of Keyboard Shortcuts](https://github.com/wekan/wekan/commit/275ac445d0cd6f817dd2281aacc27ca7d30b17eb). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.73 2024-12-24 WeKan ® release - -This release adds the following updates: - -- [Changed the default maximum list width](https://github.com/wekan/wekan/pull/5614). - Thanks to NadavTasher. -- [Updated Developer Docs about docker compose](https://github.com/wekan/wekan/commit/3e3b629aa2a9efb43b1be8f57009c1d384b66ed8). - Thanks to sridharin2020 and xet7. -- [Hide support popup. It will be made editable later](https://github.com/wekan/wekan/commit/0332ef32980b24a0c4e108436eec5b112287c14b). - Thanks to xet7. -- [Hide Accessibility Settings at Admin Panel. It will be continued and added back later](https://github.com/wekan/wekan/commit/e70c51a1f033c8712771238e408cbf52487f07f5). - Thanks to xet7. - -and fixes the following bugs: - -- [Fix buggy behaviours in board dragscrolling](https://github.com/wekan/wekan/pull/5618). - Thanks to NadavTasher. -- [Revert back to have shortcut "c to archive" back for non-Persian keyboards](https://github.com/wekan/wekan/commit/ba0fdaef72393632ca80b42a3c5d2ee5f5e0c76e). - Thanks to hatl and xet7. -- Hide and disable Keyboard Shortcuts, because they make using Ctrl-C to copy etc impossible. - [Part 1](https://github.com/wekan/wekan/commit/5606414f8975fa0f75642d2e3a6b48c7559186f9), - [Part 2](https://github.com/wekan/wekan/commit/94391d4cde7aed6e37efc6a9127b23ef0c2bd323), - [Part 3](https://github.com/wekan/wekan/commit/8b73c702c39a1fd546e591a096d703a53577ffec). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.72 2024-12-08 WeKan ® release - -This release adds the following new features: - -- [Optional board list auto-width, Support for min & max width for lists](https://github.com/wekan/wekan/pull/5607). - Thanks to NadavTasher. - -and adds the following updates: - -- [Disabled syncing of old and unrelated docker containers between docker registries](https://github.com/wekan/wekan/commit/17d5fae7bbd96eb6721ad869802cc980c9791c7f). - Thanks to xet7. - -and fixes the following bugs: - -- [Fix in API user role is not considered](https://github.com/wekan/wekan/commit/c062bd63bbfceb3a96f23ea3e8696534694db54e). - Thanks to mohammadZahedian and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.71 2024-12-05 WeKan ® release - -This release adds the following new features: - -- [To menu right top username, added Support, to have info about from where to get support](https://github.com/wekan/wekan/commit/46327f19a1c6d37f2e5591aa0cc2a882e4c56ee5). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.70 2024-12-04 WeKan ® release - -This release adds the following new features: - -- [Helm Chart: Allow to define securityContext for pod and containers](https://github.com/wekan/charts/pull/37). - Thanks to maitredede. -- [Move card to archive, add shortcut key ÷ for Persian keyboard](https://github.com/wekan/wekan/commit/80ea1782f935c74f1b7b1fd0fb7700ef9a39dc64). - Thanks to mohammadZahedian and xet7. - -and fixes the following bugs: - -- [Helm Chart: Service account token does not need to be mounted in op](https://github.com/wekan/charts/pull/38). - Thanks to maitredede. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.69 2024-12-02 WeKan ® release - -This release adds the following updates: - -- [Bump docker/metadata-action from 5.5.1 to 5.6.1](https://github.com/wekan/wekan/pull/5590). - Thanks to dependabot. -- [Updated dependencies](https://github.com/wekan/wekan/commit/9c87572f90f16fbdddb6a4dff3984e64acac20cc). - Thanks to developers of dependencies. -- [Updated Windows docs](https://github.com/wekan/wekan/commit/aa33ead7b2efd11bfd9e3f1fb94b564b6bdce119). - Thanks to xet7. -- [Update docker-compose.yml Keycloak part](https://github.com/wekan/wekan/pull/5597). - Thanks to NadavTasher. -- [Updated Keycloak etc login settings at start-wekan.bat and start-wekan.sh](https://github.com/wekan/wekan/commit/ab4c3bd2fc49e6fa82ec47dccdf9670110cddf98). - Thanks to xet7. -- [Updated release scripts](https://github.com/wekan/wekan/commit/79f7ec27159825db9206f385d9281fd68a2aacf5). - Thanks to xet7. - -and fixes the following bugs: - -- [Fix issue with comments not showing when using Exodark Theme](https://github.com/wekan/wekan/pull/5595). - Thanks to walster001. -- [Change archive-card shortcut to backtick for better ergonomics](https://github.com/wekan/wekan/pull/5589). - Thanks to malteprang. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.68 2024-11-24 WeKan ® release - -This release adds the following updates: - -- [Speed improvements to building WeKan x86_64 Dockerfile. Reduced Docker image size from 1 GB to 0.5 GB. Using Ubuntu 24.04 Docker base image](https://github.com/wekan/wekan/pull/5588). - Thanks to NadavTasher. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.67 2024-11-21 WeKan ® release - -This release adds the following new features: - -- [Re-introduce list auto-width feature, Reverted scrollbar hiding, Fixed transparent sidebar bug](https://github.com/wekan/wekan/pull/5586). - Thanks to NadavTasher. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.65 2024-11-20 WeKan ® release - -This release fixes the following bugs: - -- [Revert some scrollbar, sidebar and list width changes](https://github.com/wekan/wekan/commit/096fe130f68e0d8d082d309901c75ed04285b7e2). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.64 2024-11-20 WeKan ® release - -This release fixes the following bugs: - -- [Add missing semicolon in keyboard.js](https://github.com/wekan/wekan/pull/5580). - Thanks to NadavTasher. -- [Make lists fill up space evenly, change listWidth to max-width](https://github.com/wekan/wekan/pull/5581). - Thanks to NadavTasher. -- [Change way of disabling scrollbars, disable swimlane scrollbars](https://github.com/wekan/wekan/pull/5583). - Thanks to NadavTasher. -- [Improve list auto-width, fix regressions](https://github.com/wekan/wekan/pull/5584). - Thanks to NadavTasher. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.63 2024-11-16 WeKan ® release - -This release adds the following new features: - -- [Always close sidebar when user clicks ESC](https://github.com/wekan/wekan/pull/5571). - Thanks to NadavTasher. -- [Added 'n' shortcut for adding new minicards to current list](https://github.com/wekan/wekan/pull/5570). - Thanks to NadavTasher. -- [Patch to allow shortcuts to work when another keyboard layout is used](https://github.com/wekan/wekan/pull/5574). - Thanks to NadavTasher. - -and adds the following updates: - -- [Updated scaling docs](https://github.com/wekan/wekan/commit/92af6f71d9c60acbca8f65c7ec1822818186639c). - Thanks to xet7. - -and fixes the following bugs: - -- [Fix some text alignment issues when using RTL languages](https://github.com/wekan/wekan/pull/5572). - Thanks to NadavTasher. -- [Hide scrollbars where they interrupt](https://github.com/wekan/wekan/pull/5573). - Thanks to NadavTasher. -- [Disable sidebar showing when filtering using keyboard shortcut](https://github.com/wekan/wekan/pull/5575). - Thanks to NadavTasher. -- [Change move-to-archive keyboard shortcut to '-', because of Ctrl + C shortcut](https://github.com/wekan/wekan/pull/5576). - Thanks to NadavTasher. -- [Potential bug(fix?) - Add assign-self keyboard shortcut (old shortcut actually adds)](https://github.com/wekan/wekan/pull/5577). - Thanks to NadavTasher. -- [Sidebar style overhaul - absolute positioning, weird style fixes, disable sidebar scrollbar](https://github.com/wekan/wekan/pull/5578). - Thanks to NadavTasher. -- [Revert adding more stack size](https://github.com/wekan/wekan/commit/edb73982953d63066494dbc096bdeb62f7fe730b). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.62 2024-11-15 WeKan ® release - -This release adds the following new features: - -- [Added comment section on card details to avoid loading the card comment activities from the server](https://github.com/wekan/wekan/pull/5566). - Thanks to mfilser. -- [Checklist items hide per card](https://github.com/wekan/wekan/pull/5567). - Thanks to mfilser. -- [Checklist multiline insert (many checklist items at once)](https://github.com/wekan/wekan/pull/5568). - Thanks to mfilser. -- [Each checklist can now be configured to hide checked checklist items](https://github.com/wekan/wekan/pull/5569). - Thanks to mfilser. - -and adds the following updates: - -- [Copied updated Docs from wiki to WeKan repo](https://github.com/wekan/wekan/commit/559251eb0d8aea6a714f14224497d0a25c7a3864). - Thanks to xet7. -- [Updated docs about Linked Cards](https://github.com/wekan/wekan/commit/96627540da0b6e12890ee1660f4ff0f469bb0e25). - Thanks to xet7. -- [Add docs about how at LXC/LXD Fix: System does not fully support snapd](https://github.com/wekan/wekan/commit/508bbb37ce960c88c2a7d0b2cb35e5d8790df19f). - Thanks to xet7. -- [Copied from Sandstorm developer discussions to docs fix for running Sandstorm at Ubuntu 24.04](https://github.com/wekan/wekan/commit/8ac9353c5313402e00160843ca57405ebeb128cb). - Thanks to xet7. -- [Update ldap-sync.py reference](https://github.com/wekan/wekan/pull/5555). - Thanks to emmanuel-ferdman. -- [Updated dependencies](https://github.com/wekan/wekan/commit/b24acefa6f6696b702f2c3ceb28d6d6290017bb2). - Thanks to developers of dependencies. -- [Update Snap Candidate to MongoDB 6.0.19. Updated WeKan Windows version numbers. Added Cron docs](https://github.com/wekan/wekan/commit/fb4d95672e37d849ff52954c79eede2af7d2a509). - Thanks to xet7. -- [Updated docs sidebar](https://github.com/wekan/wekan/commit/5448a1569113142ab5b2440763c9642c88e86ba4)- - Thanks to xet7. -- [Updated Docker base image to Ubuntu 24.10](https://github.com/wekan/wekan/commit/7a34bc3eb03943506abe5e54501d1906fc16540b). - Thanks to Ubuntu developers. - -and fixes the following bugs: - -- [Add more stack size](https://github.com/wekan/wekan/commit/324be07b859937966f98feb2aeea8f344c689bb0). - Thanks to xet7. -- [Fix Warning: missing space before text for line 210 of jade file client/components/activities/activities.jade](https://github.com/wekan/wekan/commit/a27f8ecfa9971740a019a955d3f8d0e5a5dd8dab). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.61 2024-10-23 WeKan ® release - -This release adds the following updates: - -- [Testing packages without versions from, for upcoming upgrades](https://github.com/wekan/wekan/commit/6e8e581ceb330a7756403efa1f8bbe5a198ff111). - Thanks to xet7. -- [Updated to MongoDB 6.0.18 at Snap Candidate](https://github.com/wekan/wekan/commit/9d92a79a284147380eb08a0c011a8815dae5209b). - Thanks to MongoDB developers. - -and fixes the following bugs: - -- [Try 3 to fix apparmor denied in syslog at Snap Candidate. Changed MongoDB --host back to --bind_ip](https://github.com/wekan/wekan/commit/6c54b38cdfd14959f4449cea0c3150bf86708ecd). - Thanks to webenefits and xet7. -- [Try 4 to fix apparmor denied in syslog at Snap Candidate](https://github.com/wekan/wekan/commit/ecdfc681700633d8688ca709f36924ceced96af8). - Thanks to webenefits and xet7. -- [Try 5 to fix apparmor denied in syslog at Snap Candidate](https://github.com/wekan/wekan/commit/e32d2daa4567728e4dd5048c9c575edcac1372da). - Thanks to webenefits and xet7. -- [Try 6 to fix apparmor denied in syslog at Snap Candidate](https://github.com/wekan/wekan/commit/5aa38c2e40429f06aac8bc1bc0b5ac30c5344c6f). - Thanks to webenefits and xet7. -- [Renaming list shows in activities](https://github.com/wekan/wekan/pull/5549). - Thanks to AdenKoziol. -- [Fixing opening cards and slow performance of closing cards by reverting switching kadira:flow-router to ostrio:flow-router-extra](https://github.com/wekan/wekan/pull/5552). - Thanks to mfilser. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.60 2024-09-23 WeKan ® release - -This release adds the following updates: - -- [Added to Docs CNAME DNS info about CloudFlare and Sandstorm](https://github.com/wekan/wekan/commit/b6e7e03c95dfa68c8de6922ffb7663631e476d91). - Thanks to xet7. -- [Switch from kadira:flow-router to ostrio:flow-router-extra](https://github.com/wekan/wekan/pull/5530). - Thanks to imajus. -- [Removed outdated dependency page. To be seen, does anything break](https://github.com/wekan/wekan/commit/a9d41217bd8c797b28510efec3e21a92d7ec4bba). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.59 2024-09-04 WeKan ® release - -This release tries to fix the following bugs: - -- [Try 2 to fix apparmor denied in syslog at Snap Candidate](https://github.com/wekan/wekan/commit/0a1074ca6e95728b0da30bd701ba783f2a4bdd98). - Newest MongoDB uses --host, not anymore --bind_ip. - Thanks to webenefits and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.58 2024-09-04 WeKan ® release - -This release tries to fix the following bugs: - -- [Try to fix apparrmor denied in syslog at Snap Candidate](https://github.com/wekan/wekan/commit/a6c8833f652ee84284da2195bf79fb8edaa818b7). - Thanks to webenefits and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.57 2024-09-04 WeKan ® release - -This release adds the following updates: - -- [Rework fix for mobile devices to incorporate all themes/list headers](https://github.com/wekan/wekan/pull/5517). - Thanks to walster001. -- [Update templates to use label instead of span](https://github.com/wekan/wekan/pull/5519). - Thanks to novashdima. -- [Large updates to UI CSS](https://github.com/wekan/wekan/pull/5523). - Thanks to walster001. -- [Updated dependencies](https://github.com/wekan/wekan/commit/1610eff0e9212fdf6423ce5579b7bdaf8e45950b). - Thanks to developers of dependencies. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.56 2024-08-21 WeKan ® release - -This release adds the following updates: - -- Updated Browser compatibility matrix. - [Part 1](https://github.com/wekan/wekan/commit/cab285c34d1f159120ccd48b17a897e95bd48471), - [Part 2](https://github.com/wekan/wekan/commit/ec534c8cca3f0256091c2d870c128d26033d40ad). -- [Updated code of conduct](https://github.com/wekan/wekan/commit/cae6f38b8070cfcc2f2529027f7e66b965a19f05). - Thanks to xet7. -- [Updated Docker build actions](https://github.com/wekan/wekan/pull/5505). - Thanks to dependabot. -- Updated docs for building custom Docker image. - [Part 1](https://github.com/wekan/wekan/issues/5509), - [Part 2](https://github.com/wekan/wekan/commit/6d6d51310e4168cd0fc75f550d3af35df9ccef9f), - [Part 3](https://github.com/wekan/wekan/commit/a94cfd5b91d29f81e51e67ed03ba84f820d4892a). -- [Update mongodb chart version to 15.6.18 and enables wekan to be deployed on an OpenShift cluster](https://github.com/wekan/charts/pull/36). - Thanks to fobrice. -- [Upgraded Snap Candidate MongoDB to 6.0.17](https://github.com/wekan/wekan/commit/d63d445b7d5da48c05d0fbd4e560c00283b1aef7). - Thanks to MongoDB developers. - -and fixes the following bugs: - -- [Fix ModernDark Mobile View List Titles](https://github.com/wekan/wekan/pull/5503). - Thanks to walster001. -- [Fix apparmor denied in syslog at Snap Candidate](https://github.com/wekan/wekan/commit/c3909edc5ee7a82b694b19ca7e022cbdfd12affd). - Thanks to webenefits and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.55 2024-08-08 WeKan ® release - -This release fixes the following bugs: - -- [Fix board backgrounds not showing correctly after v7.54](https://github.com/wekan/wekan/pull/5501). - Thanks to walster001. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.54 2024-08-07 WeKan ® release - -This release adds the following new features: - -- [Helm Chart: Add Support for Overriding Image Registry in Airgapped Environments](https://github.com/wekan/charts/pull/35). - Thanks to geilername. -- [PWA, move to standalone (standard) to display the status bar](https://github.com/wekan/wekan/pull/5484) - Thanks to mfilser. -- [Added info how with Caddy webserver config, PWA and Android app override icons, showing toolbars, etc](https://github.com/wekan/wekan/commit/55fc342f6d90d8e30b70a8903ecead1c4370bd89). - Thanks to xet7. - -and fixes the following bugs: - -- [Don't set background image in .board-canvas too](https://github.com/wekan/wekan/pull/5485). - Thanks to mfilser. -- [Bugfix, variable "color" didn't exist](https://github.com/wekan/wekan/pull/5486). - Thanks to mfilser. -- [Little opacity to minicards to see the background image a little bit](https://github.com/wekan/wekan/pull/5487). - Thanks to mfilser. -- [Remove attachment storage name from attachment list](https://github.com/wekan/wekan/pull/5488). - Thanks to mfilser. -- [Attachment popup back was broken since new attachment viewer, now fixed](https://github.com/wekan/wekan/pull/5489). - Thanks to mfilser. -- [Change Meteor.user() to ReactiveCache.getCurrentUser()](https://github.com/wekan/wekan/pull/5490). - Thanks to mfilser. -- [Fix empty parentId in cards](https://github.com/wekan/wekan/pull/5491). - Thanks to mfilser. -- [Sidebar xmark icon, add padding and background color](https://github.com/wekan/wekan/pull/5492). - Thanks to mfilser. -- [Board view, first column a bit smaller to save screen space](https://github.com/wekan/wekan/pull/5493). - Thanks to mfilser. -- [Minicard, show creator, defaultValue of schema and other code is now the same](https://github.com/wekan/wekan/pull/5494). - Thanks to mfilser. -- [Editor, Bugfix, copy text is now at each editor (textarea) again](https://github.com/wekan/wekan/pull/5495). - Thanks to mfilser. -- [Bugfix, Cards Count on mobile view was missing](https://github.com/wekan/wekan/pull/5496). - Thanks to mfilser. -- [ListHeader, simpler code logic at collapsed if conditions](https://github.com/wekan/wekan/pull/5497). - Thanks to mfilser. -- [Bugfix, edit description didn't work if it was clicked](https://github.com/wekan/wekan/pull/5498). - Thanks to mfilser. -- [Fix LDAP login fails after upgrade](https://github.com/wekan/wekan/commit/a4169f3da773e4fd961acd0266260085a753cdab). - Thanks to juppees and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.53 2024-08-03 WeKan ® release - -This release adds the following new features: - -- [Added Dragscroll to scroll the board](https://github.com/wekan/wekan/pull/5477). - Click on an empty space in the board, hold the left mouse and move left and right - to scroll the board easily. - Thanks to mfilser. - -and adds the following updates: - -- [Updated release script: New install webpage location](https://github.com/wekan/wekan/commit/5e639a7c2d6dc1182ba95e44875ac8a6798a62be). - Thanks to xet7. -- [Updated dependencies](https://github.com/wekan/wekan/commit/3f9ae57144dc9befd674c784896d68b5db9df146). - Thanks to developers of dependencies. -- [Copied changes from wiki to docs](https://github.com/wekan/wekan/commit/aaca60b6760cc84b56a24fc15c93f23b4a34f06e). - Thanks to xet7. -- [Updated Snap Candidate to MongoDB 6.0.16](https://github.com/wekan/wekan/commit/1af1844f37d17f9f54ca358ccf0f44eed1dfbef4). - Thanks to MongoDB developers. - -and fixes the following bugs: - -- [Board Menu Popup's were opened twice because of 2 same event creation](https://github.com/wekan/wekan/pull/5478). - Thanks to mfilser. -- [Fixing of "mode is undefined" on first activity component creation](https://github.com/wekan/wekan/pull/5479). - Thanks to mfilser. -- [Changing card color now closes the popup and doesn't refresh the whole board page](https://github.com/wekan/wekan/pull/5480). - Thanks to mfilser. -- [Fix dragscroll package name](https://github.com/wekan/wekan/commit/45674806d78fddb8a3b8a75890e5059cc1a680ea). - Thanks to xet7. -- [Reducing card size in database if no planning poker was started](https://github.com/wekan/wekan/pull/5481). - Thanks to mfilser. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.52 2024-08-03 WeKan ® release - -This release adds the following new features: - -- [Helm Chart: Add option to set resource limits for initContainer](https://github.com/wekan/charts/pull/33). - Thanks to mreichelt-dicos. -- [Helm Chart: Fixes for mongodb persistence. Please test is this correct](https://github.com/wekan/charts/commit/7efb071dd91d76c3971e1865fd18f9d43d8c6891). - Thanks to emoritzx. -- [Helm Chart: Added info about rarely used running WeKan at subpath](https://github.com/wekan/charts/commit/7d4176c7b328c5477c1fa29a323574aac78616a9). - Thanks to emoritzx. - -and adds the following updates: - -- Updated dependencies. - [Part 1](https://github.com/wekan/wekan/pull/5460), - [Part 2](https://github.com/wekan/wekan/pull/5464), - [Part 3](https://github.com/wekan/wekan/pull/5460), - [Part 4](https://github.com/wekan/wekan/pull/5469), - [Part 5](https://github.com/wekan/wekan/pull/5470), - [Part 6](https://github.com/wekan/wekan/pull/5471), - [Part 7](https://github.com/wekan/wekan/pull/5473). - Thanks to dependabot. -- Added RepoCloud SaaS. - [Part 1](https://github.com/wekan/wekan/commit/21d6dfd79090f9885635f55537bd9fa1ef8539e1), - [Part 2](https://github.com/wekan/wekan/commit/e663ce038af397f547e8823d61ce5dc2e3cea84d), - [Part 3](https://github.com/wekan/wekan.github.io/commit/e9e0550824cdda31daae42df7c497fbd037fd78f). - Thanks to RepoCloud. -- [Updated WeKan app webmanifest](https://github.com/wekan/wekan/commit/745618626535743938b9d2e8c88afe6345807a85). - Thanks to xet7. -- [Revert forking of ldapjs](https://github.com/wekan/wekan/commit/c89f3ba3da6512169e033d76377a9190b35a92d2). - Thanks to xet7. - -and fixes the following bugs: - -- [Fixes to Clean light and Clean dark themes](https://github.com/wekan/wekan/pull/5458). - Thanks to abramchikd. -- [Activities, adding back "created at" field](https://github.com/wekan/wekan/pull/5476). - Thanks to mfilser. -- [Fix typos at attachments code](https://github.com/wekan/wekan/commit/de3bc9cb4d20590c45ff72ef7749d830ea3fc16c). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.51 2024-06-27 WeKan ® release - -This release adds the following updates: - -- [Updated dependencies](https://github.com/wekan/wekan/pull/5452). - Thanks to dependabot. -- Moved docs from wiki to wekan repo docs directory, organized to subdirectories. Organizing and updating in progress. - [Part 1](https://github.com/wekan/wekan/commit/1961e22cbd51e83aa131c8b092c7d43475a021eb), - [Part 2](https://github.com/wekan/wekan/commit/ce89ff48331a27ffb42d021833c78df3a462b9db), - [Part 3](https://github.com/wekan/wekan/commit/449c02c42a0183a49592ada89bdfb8f25e5db903), - [Part 4](https://github.com/wekan/wekan/commit/0fb2f7fdd6b6cb828ab4ea534204a5b834d2e19a), - [Part 5](https://github.com/wekan/wekan/commit/e9c1c620eb938349c30761497066daf41cdcfc19), - [Part 6](https://github.com/wekan/wekan/commit/6b7b66801b716e1d0bf2548b18eed4ed4e354f2d), - [Part 7](https://github.com/wekan/wekan/commit/1cfaddff9cd4fe84fb74c80d1585f2a5dd65f5ca), - [Part 8](https://github.com/wekan/wekan/commit/057ac4031eaa912b849c637e163f4dffa79a9329), - [Part 9](https://github.com/wekan/wekan/commit/52375df78380bbe3407b51dc986baaf6f31f40e4), - [Part 10](https://github.com/wekan/wekan/commit/00a56f6aaa0c2bcd24ca8829a0718b45e7cedf04), - [Part 11](https://github.com/wekan/wekan/commit/c863428aa2597457fc4931e7b1bdd75d6cc2610b). - Thanks to xet7. - -and fixes the following bugs: - -- [Fix ModernDark Cards not showing correctly](https://github.com/wekan/wekan/pull/5455). - Thanks to walster001. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.50 2024-06-22 WeKan ® release - -This release adds the following new features: - -- [Added "Clean dark" and "Clean light" themes that are more clean and modern looking](https://github.com/wekan/wekan/pull/5449). - Thanks to abramchikd. - -and adds the following updates: - -- Updated docs for WeKan version for Windows. - [Part 1](https://github.com/wekan/wekan/commit/9b428150a4fb9efdcb2ae9d3bb59d0da29529e69), - [Part 2](https://github.com/wekan/wekan/commit/3c35a6400b88e071a474a552ee941892522c8d59). - Thanks to xet7. -- Updated dependencies. - [Part 1](https://github.com/wekan/wekan/pull/5446), - [Part 2](https://github.com/wekan/wekan/commit/99a8afd6c39591e0d85fe5f55ebc3016b9e7f011). - Thanks to developers of dependencies. - -and fixes the following bugs: - -- [Task card may overflow below the screen when maximized, making the bottom part not viewable](https://github.com/wekan/wekan/pull/5443). - Thanks to Hekatomb. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.49 2024-06-11 WeKan ® release - -This release adds the following updates: - -- [WeKan new release version number from wiki to WeKan repo docs](https://github.com/wekan/wekan/commit/e5c7650fc8eb5c3fcc6216f12e806ceb56fd94d9). - Thanks to xet7. -- Updated dependencies. - [Part 1](https://github.com/wekan/wekan/pull/5430), - [Part 2](https://github.com/wekan/wekan/pull/5441). - Thanks to dependabot. - -and fixes the following bugs: - -- [Bugfix: Strikethrough inactive Teams and orginizations logic was inverted](https://github.com/wekan/wekan/pull/5435). - Thanks to Hekatomb. -- [Changed back to original icon of Edit Description](https://github.com/wekan/wekan/commit/e3214c874ec9369ab6b865154f7964da8ec55f45). - Thanks to saschafoerster, C0rn3j and xet7. -- [Fill out Org and Team in adminReports](https://github.com/wekan/wekan/pull/5440). - Thanks to Hekatomb. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.48 2024-06-06 WeKan ® release - -This release adds the following updates: - -- [Updated release scripts](https://github.com/wekan/wekan/commit/4a9d881e47751ec49d24af5bf4fd1c5452ceb194). - Thanks to xet7. -- Add changes from wiki to docs. - [Part 1](https://github.com/wekan/wekan/commit/13be8160d5b6a894c674d04c37ff9e653e7bd4b0), - [Part 2](https://github.com/wekan/wekan/commit/e65a8c90177cd948ca8212486a365b65cd7d5372). - Thanks to xet7. - -and fixes the following bugs: - -- [Fix Admin Panel pages Organizations and Teams, where HTML Tables were broken](https://github.com/wekan/wekan/commit/36bb5e099ed9f1f88c0399867bd76f040467745c). - Thanks to Hekatomb and xet7. -- [Try to show more of title of collapsed list](https://github.com/wekan/wekan/commit/ec0e88ad2e914437b4767456a160f2c1138fc5f2). - Thanks to C0rn3j and xet7. -- [Allow Normal user to add new swimlane, list and label](https://github.com/wekan/wekan/commit/04b995e77fdb5abc186e02482a75aba6a5cf0759). - Thanks to RyanHecht, norrig and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.47 2024-06-03 WeKan ® release - -This release adds the following updates: - -- [Update Docker base images to Ubuntu 24.04](https://github.com/wekan/wekan/commit/79e2001708b5110b26cf54b15bbbf90f7977fe90). - Thanks to xet7. -- [Updated to MongoDB 6.0.15 at Snap Candidate](https://github.com/wekan/wekan/commit/4e2a8735bc2e449a2a3c949d042fb625052a1152). - Thanks to MongoDB developers. -- [Updated release scripts](https://github.com/wekan/wekan/commit/2c9c9c43561093801004f0268d58b29d9a10b570). - Thanks to xet7. - -and fixes the following bugs: - -- [Only show Board name edit button to BoardAdmin](https://github.com/wekan/wekan/commit/5e2b423ef87c62a70a6b08abd2f185fd560f391f). - Thanks to xet7. -- [Fix Edit Description button is wildly out of place](https://github.com/wekan/wekan/commit/1f2fb2ccce38e9cac348f1c459784d6e5a949ded). - Thanks to C0rn3j and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.46 2024-06-03 WeKan ® release - -This release adds the following updates: - -- [Update ukrainian translation](https://github.com/wekan/wekan/pull/5405). - Thanks to novashdima. -- [Updated GitHub issue template for issue instructions to be more visible](https://github.com/wekan/wekan/commit/5124265142c94d5044b81f81eaaa9c3bc01cef58). - Thanks to xet7. -- [For development, only recommend Debian 12 amd64, because Sandstorm works at Debian 12. Sandstorm does not work at Ubuntu 24.04](https://github.com/wekan/wekan/commit/1bd30bc12129be8cc8a633a561bb8a5be76823d7). - Thanks to xet7. Related https://github.com/sandstorm-io/sandstorm/issues/3712 - -and fixes the following bugs: - -- [Optimize SVGs and PNGs to save 550KB](https://github.com/wekan/wekan/pull/5403). - Thanks to C0rn3j. -- [Swap deprecated egrep for grep -E](https://github.com/wekan/wekan/pull/5404). - Thanks to C0rn3j. -- [Remove notification while copying board](https://github.com/wekan/wekan/pull/5412). - Thanks to e-gaulue. -- [Fixed loading of cards if there are more than 20 of them on one swimlane](https://github.com/wekan/wekan/pull/5417). - Thanks to novashdima. -- [Devcontainer, reduce image size and other necessary changes for development](https://github.com/wekan/wekan/pull/5418). - Thanks to mfilser. -- [Dockerfile production and dev same build](https://github.com/wekan/wekan/pull/5419). - Thanks to mfilser. -- [Remove second created at on activities](https://github.com/wekan/wekan/pull/5420). - Thanks to mfilser. -- [Fix Export CSV/TSV from Board create unhandled Exception](https://github.com/wekan/wekan/pull/5424). - Thanks to Dexus. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.45 2024-05-06 WeKan ® release - -This release adds the following updates: - -- [Update Docker base container to Ubuntu 24.04, and update software versions](https://github.com/wekan/wekan/commit/63117e87e759af965c8eeceaaa41f52815630d20). - Thanks to developers of dependencies. -- [Updated dependencies](https://github.com/wekan/wekan/pull/5392). - Thanks to developers of dependencies. - -and fixes the following bugs: - -- [Fix display of tables with a large number of rows](https://github.com/wekan/wekan/pull/5393). - Thanks to novashdima. -- [Fix white List color and define Silver in CSS instead of leaving it unset](https://github.com/wekan/wekan/pull/5400). - Thanks to C0rn3j. -- [Allow silver color to be set in List and Swimlane](https://github.com/wekan/wekan/pull/5401). - Thanks to C0rn3j. -- [Fix Can't set a Due Date that has a leading zero in time, errors with invalid time](https://github.com/wekan/wekan/commit/9cebee734740790145ca574c539ccebd067cee7e). - Thanks to C0rn3j and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.44 2024-04-26 WeKan ® release - -This release adds the following new features: - -- [Collapse Lists](https://github.com/wekan/wekan/commit/a601ba542aebefdfa8b5d683d22405ab3d5f8569). - Thanks to xet7. -- [Collapse Swimlanes. In Progress, does not work yet, not visible yet](https://github.com/wekan/wekan/commit b704d58f0f3cf5e7785b79d5a6c9f6c63da4159c). - Thanks to xet7. - -and fixes the following bugs: - -- [Fix board not visible at Collapse Lists](https://github.com/wekan/wekan/commit/e6476319bcb06cc71fa0eefa0a608ec3a7b89767). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.43 2024-04-18 WeKan ® release - -This release adds the following updates: - -- [Updated release script for Windows On-Premise, that is without container like Docker and Snap](https://github.com/wekan/wekan/commit/802eeb1e6bb87c45fa79298f67ff690e87f939f8). - Thanks to xet7. -- [Updated translations Transifex URL at readme](https://github.com/wekan/wekan/commit/9838af5e5630a6ef34175e110ddfb6bfc225b40c). - Thanks to xet7. -- [Improve Docker files](https://github.com/wekan/wekan/pull/5377). - Thanks to C0rn3j. -- Updated dependencies. - [Part 1](https://github.com/wekan/wekan/commit/08e2f2f2731856255e0b40eb692328424efdf9ac), - [Part 2](https://github.com/wekan/wekan/commit/da99e363cd72cda7d400ce65785a6650e42c72cf). - Thanks to developers of dependencies. - -and fixes the following bugs: - -- [Fix DEBUG environment variable check](https://github.com/wekan/wekan/pull/5380). - Thanks to verdel. -- [By default, use localized long date-time format](https://github.com/wekan/wekan/pull/5381). - Thanks to tvogel. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.42 2024-04-03 WeKan ® release - -This release fixes the following CRITICAL SECURITY ISSUES: - -- [Fixed CRITICAL SECURITY ISSUE by updating meteor-node-stubs](https://github.com/wekan/wekan/commit/c461adff11456734fcb9193b5522cc6451078732). - Thanks to Meteor developers. - -and adds the following updates: - -- Updated dependencies. - [Part 1](https://github.com/wekan/wekan/pull/5355), - [Part 2](https://github.com/wekan/wekan/pull/5356), - [Part 3](https://github.com/wekan/wekan/commit/1c8f783767a680758f2219d2f416ce3ae2fb0c57). - Thanks to dependabot and developers of dependencies. -- [Small tweaks to moderndark theme](https://github.com/wekan/wekan/pull/5363). - Thanks to jghaanstra. - -and fixes the following bugs: - -- [Fixed link at readme](https://github.com/wekan/wekan/pull/5360). - Thanks to dyercode. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.41 2024-03-18 WeKan ® release - -This release fixes the following bugs: - -- Fixes for mongosh to allow snap packages to update to the edge/candidate version. - [Part 1](https://github.com/wekan/wekan/pull/5349), - [Part 2](https://github.com/wekan/wekan/pull/5350). - Thanks to lorodoes. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.40 2024-03-17 WeKan ® release - -This release fixes the following bugs: - -- [Fixed centering of text below custom login logo](https://github.com/wekan/wekan/commit/24c89aeb64cf6266d95f42124419d4f070864631). - Thanks to xet7. -- [Fixed In RTL, hamburger margin is too much in mobile](https://github.com/wekan/wekan/commit/583fca1814d916490b04947ba8d97dd85168fb22). - Thanks to mohammadZahedian and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.39 2024-03-16 WeKan ® release - -This release adds the following updates: - -- Clarify usage of api.py. - [Part 1](https://github.com/wekan/wekan/pull/5341). - [Part 2](https://github.com/wekan/wekan/commit/8f3c948614df0641b0971d1882cc241587d9d3b4). - Thanks to e-gaulue and xet7. -- Updated dependencies. - [Part 1](https://github.com/wekan/wekan/pull/5343), - [Part 2](https://github.com/wekan/wekan/pull/5344). - -and fixes the following bugs: - -- [Make the contents of the cards grow to the list width](https://github.com/wekan/wekan/pull/5346). - Thanks to kuba-orlik. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.38 2024-03-10 WeKan ® release - -This release adds the following new features: - -- [Added docs wikis to WeKan repo directory docs, to make possible to send PRs](https://github.com/wekan/wekan/commit/73ae73d4c38640e9daedbe8ef9e5b25b877ee804). - Thanks to e-gaulue, C0rn3j and xet7. -- [Added script to count lines of code changed per committer email address, because GitHub removed that feature from web UI](https://github.com/wekan/wekan/commit/835e33bf090022875f50916412f80b6a9b4a3b21). - Thanks to bgwines and xet7. -- [Add info about GitHub top committers at Finland](https://github.com/wekan/wekan/commit/ef5b8887799a75ab797655f39483bc08841815d2). - Thanks to xet7. - -and adds the following updates: - -- [Updated contributing to wiki](https://github.com/wekan/wekan/commit/8ba3a05648818f6162b2021affeb33066f91c400). - Thanks to xet7. -- [Upgraded to MongoDB 6.0.14 at Snap Candidate](https://github.com/wekan/wekan/commit/07d6c1e5148eb0392357d55d0486a9672378c16f). - Thanks to MongoDB developers. - -and tried to fix the following bugs: - -- [Fix error during delete](https://github.com/wekan/wekan/pull/5336). - Thanks to xator91. -- [Fixed text below custom login logo not visible](https://github.com/wekan/wekan/commit/00bbc2669814247c0ff79bd816be7bf34bcf08a2). - Thanks to xet7. -- [Fixed In RTL, hamburger needs margin](https://github.com/wekan/wekan/commit/abd3c95dfa13cd697ff2fb7e299c85287406772a). - Thanks to mohammadZahedian and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.37 2024-03-07 WeKan ® release - -This release fixes the following bugs: - -- [Fixed API get swimlane cards wrong order. Please test](https://github.com/wekan/wekan/commit/7beced1e683c2eb2960b0ee40d5ec927d235fa6a). - Thanks to mohammadZahedian, xator91 and xet7. -- [Fixed API get_all_cards doesn't return SwimlaneId. Please test](https://github.com/wekan/wekan/commit/ffafb30b9b394188e1b60ec836ad83f1738c266d). - Thanks to mohammadZahedian, xator91 and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.36 2024-03-06 WeKan ® release - -This release adds the following features: - -- [api.py: checklistid, checklistinfo, get_list_cards_count and get_board_cards_count](https://github.com/wekan/wekan/pull/5326). - Thanks to xator91. - -and fixes the following bugs: - -- [Fixed Card image cover should be margin-top:6px since hamburger menu and due date at the top](https://github.com/wekan/wekan/commit/747bc4c08837ad9781d63b9f16b97a64b0bfe7b8). - Thanks to e-gaulue and xet7. -- [Try to fix API get cards wrong order. Please test](https://github.com/wekan/wekan/commit/c570405d0267e28f2b2644005d48fb097eac385b). - Thanks to mohammadZahedian, xator91 and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.35 2024-02-27 WeKan ® release - -This release adds the following features and bugs: - -- [Added back Mathjax that has bug of showing math twice](https://github.com/wekan/wekan/commit/f43dadc06894d874281ec0e449dcc4c81b3c59ad). - Thanks to macthecadillac, Dexus and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.34 2024-02-23 WeKan ® release - -This release adds the following updates: - -- [Updated translations](https://github.com/wekan/wekan/commit/3cd5d00b0b8d74acb2cd2afbc12f5b9d7aafcbd8). - Thanks to translators. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.33 2024-02-23 WeKan ® release - -This release adds the following updates: - -- [Updated docs for previous version of WeKan](https://github.com/wekan/wekan/commit/3b0616c1500b5070e660d2ba00968d59600958eb). - Thanks to xet7. - -and fixes the following bugs: - -- [OpenAPI: Fix breakage introduced with blank return](https://github.com/wekan/wekan/pull/5321). - Thanks to bentiss. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.32 2024-02-22 WeKan ® release - -This release adds the following new features: - -- [api.py: Added create label](https://github.com/wekan/wekan/pull/5308). - Thanks to xator91. -- [api.py: Edit card color](https://github.com/wekan/wekan/pull/5309). - Thanks to xator91. -- [api.py: Add checklist with multiple items also or just title](https://github.com/wekan/wekan/pull/5311). - Thanks to xator91. -- [api.py: Delete all cards. Will delete all cards from Swimlanes automatically, will retrieve automatically all list id and delete everything](https://github.com/wekan/wekan/pull/5313). - Thanks to xator91. -- [cards.js: Added a control to check error if card is not updated](https://github.com/wekan/wekan/pull/5312). - Thanks to xator91. -- [Shortcut a to filter by assignees](https://github.com/wekan/wekan/pull/5318). - Thanks to DevOpsNB. - -and fixes the following bugs: - -- [Fixed Error 500 when adding user to a board and multiple same avatar icons by reverting back from Meteor 2.15 to 2.14](https://github.com/wekan/wekan/commit/b5f4be36d4577c391ad19c5e5dd9de3036b8998f). - Thanks to xator91, mariogalan, bbyszio, zeo101, laurentm255, johnnytolengo and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.31 2024-02-17 WeKan ® release - -This release adds the following new features: - -- [api.py: Added getcard and cardsbyswimlane](https://github.com/wekan/wekan/pull/5287). - Thanks to xator91. -- [api.py: Add card with label and add a label to a card](https://github.com/wekan/wekan/pull/5290). - Thanks to xator91. -- [api.py: Fix BoardID to SwimlaneID in cardsbyswimlane](https://github.com/wekan/wekan/pull/5290). - Thanks to xator91. -- [boards.js: New update board title function for API](https://github.com/wekan/wekan/pull/5300). - Thanks to xator91. -- [api.py: EDIT BOARD TITLE](https://github.com/wekan/wekan/pull/5301). - Thanks to xator91. - -and adds the following updates: - -- [Release scripts: Commented out not currently in use builds of WeKan bundle](https://github.com/wekan/wekan/commit/4eb0085243672071a392dc32f77dba3103c592ab). - Thanks to xet7. -- [Try to fix Snap](https://github.com/wekan/wekan/commit/a54e52d34bdab02befda7eefad46d16814d2c46e). - Thanks to xet7. -- [Updated to Meteor 2.15-rc.1 and removed duplicate nodemailer package because of some errors](https://github.com/wekan/wekan/commit/59c42bc1a3a1792a50379be2f9251fce9b45c1a3). - Thanks to Meteor developers. -- [Updated to Meteor 2.15](https://github.com/wekan/wekan/commit/5198ee997cb43b503fcb2edaf781b0521d8096cd). - Thanks to Meteor developers. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.30 2024-01-28 WeKan ® release - -This release adds the following updates: - -- [Back to MongoDB 6.0.13](https://github.com/wekan/wekan/commit/64592d734cfdbe10b48c3aa3ea74e0ba35903976). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.29 2024-01-27 WeKan ® release - -This release removes the following features: - -- [Removed markdown-it-mathjax3](https://github.com/wekan/wekan/commit/19703fed311c894b61e9269cc0b973d0b0275a6a). - Thanks to Dexus and xet7. - -and adds the following updates: - -- [Updated to Meteor 2.14.1-beta.0](https://github.com/wekan/wekan/commit/28d640afb40f4d7c9070fa514c910fbf7065a724). - Thanks to Meteor developers. -- [Updated to MongoDB 7.0.5 at Snap Candidate and Docker](https://github.com/wekan/wekan/commit/f624211620c5e42ccdd6f931ba473be62437a62c). - Thanks to MongoDB developers. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.28 2024-01-23 WeKan ® release - -This release adds the following new features: - -- [Added archive option to of Wekan API](https://github.com/wekan/wekan/pull/5265). - Thanks to gustavengstrom. - -and adds the following updates: - -- Updated dependencies. - [Part 1](https://github.com/wekan/wekan/pull/5270), - [Part 2](https://github.com/wekan/wekan/pull/5271), - [Part 3](https://github.com/wekan/wekan/commit/67896adefc4a12a93fed7575f621f8aa924a2ab8). - Thanks to developers of dependencies. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.27 2024-01-02 WeKan ® release - -This release fixes the following bugs: - -- [Fix missing maximize card](https://github.com/wekan/wekan/commit/f10f80f6559a6cdee020d5ca34fd5991e07617cf). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.26 2024-01-02 WeKan ® release - -This release fixes the following bugs: - --[Fix some public board buttons](https://github.com/wekan/wekan/commit/8ae47cb2f82bcc2078cc9c9987f7d7b7f6394493). - Thanks to xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.25 2023-12-30 WeKan ® release - -This release adds the following updates: - -- [Snap: Organized file locations](https://github.com/wekan/wekan/commit/84a228fc1a7ced2b8b146795acc13eb5abb13d24). - Thanks to xet7. -- Updated GitHub Actions. - [Part 1](https://github.com/wekan/wekan/pulls/5243), - [Part 2](https://github.com/wekan/wekan/pulls/5244), - [Part 3](https://github.com/wekan/wekan/pulls/5245). -- [Updated percolate:synced-cron](https://github.com/wekan/wekan/commit/06397e9e11a689a0a2e6a95ae785749d5a6a695b). - Thanks to developers of percolate:synced-cron. -- Snap: Added MongoDB 3 binaries for migrating to MongoDB 6. - [Part 1](https://github.com/wekan/wekan/commit/805458a7638ff6213929bfa70a46b5afeacaedf1), - [Part 2](https://github.com/wekan/wekan/commit/335f0451e07d6ff924c0af3e5a934676c8e69f4c), - [Part 3](https://github.com/wekan/wekan/commit/374e67310723f3c0d3ab20f6b2e4bd0b273bce2b). - Thanks to xet7. -- [Updated dependencies](https://github.com/wekan/wekan/commit/0e6d83c0852b2da4430f9c902b84c16f5c2ee8bc). - Thanks to developers of dependencies. - -and adds the following translations: - -- [Translations: Added German (Germany) (de_DE) and Odia (India) (or_IN)](https://github.com/wekan/wekan/commit/23c2a2bc224e2def4722a35c20f32a21062b4154). - Thanks to translators. - -and fixes the following bugs: - -- [Fix: Export HTML popup](https://github.com/wekan/wekan/pull/5252). - Thanks to Lewiscowles1986. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.24 2023-12-17 WeKan ® release - -This release adds the following new features: - -- [Azure AD B2C login using OAuth2](https://github.com/wekan/wekan/commit/93be112a9454c894c1ce3146ed377e6a6aeca64a). - https://github.com/wekan/wekan/wiki/B2C . - Thanks to snowsky and xet7. - -and adds the following updates: - -- [Upgrade to Meteor 2.14](https://github.com/wekan/wekan/commit/75383fe477874a7aaf5caa3b913e2173694efe13). - Thanks to Meteor developers. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.23 2023-12-11 WeKan ® release - -This release adds the following updates: - -- [Updated security.md about mitm](https://github.com/wekan/wekan/commit/b4c9c1df9a7e89d263b1864407a7007338ce770d). - Thanks to xet7. -- [Upgraded to Meteor 2.14-rc.3](https://github.com/wekan/wekan/commit/6a3b8a668bc84c89714e44c3865168be81c8e2ed). - Thanks to Meteor developers. -- [Updated dependencies](https://github.com/wekan/wekan/commit/e3a0a480ed960d30fc80f7c7c1a6c7471368d0e8). - Thanks to developers of dependencies. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.22 2023-12-01 WeKan ® release - -This release adds the following new features: - -- [At right sidebar, moved Minicard Settings to Card Settings popup](https://github.com/wekan/wekan/commit/2f2a039e3c1957b8921f3800315508d4f51c21b7). - Thanks to Roemer and xet7. -- [New feature: Sidebar / Card Settings / Creator at minicard](https://github.com/wekan/wekan/commit/f3242869110738210b712761dda67fec34932307). - Thanks to Roemer and xet7. - -and adds the following updates: - -- [Upgraded to MongoDB 6.0.12 at Snap Candidate](https://github.com/wekan/wekan/commit/31ca78c17b0c734087cef99d481b939ac9533612). - Thanks to MongoDB developers. - -and fixes the following bugs: - -- [Fixed Markdown and copy buttons on top of text](https://github.com/wekan/wekan/commit/3cc10c77f99db344d0af3d6d862eb05c909fbf2c). - Thanks to mueller-ma and xet7. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.21 2023-11-27 WeKan ® release - -This release adds the following updates: - -- [Updated dependencies](https://github.com/wekan/wekan/commit/fef0c0e490ef0d90b6504074312bf827ff5f2d61). - Thanks to developers of dependencies. - -Thanks to above GitHub users for their contributions and translators for their translations. - -# v7.20 2023-11-26 WeKan ® release - -This release adds the following updates: - -- [Added standard for public code assessment](https://github.com/wekan/wekan/commit/a307bfa1ec82b66d97714bff32d4201aa8e6e6f7). - Thanks to those that participated to making of assessment. -- [Upgraded to Meteor 2.14-beta.2](https://github.com/wekan/wekan/commit/126ddda45d07769f9fef67aa74241c9afa04b6a8). - Thanks to Meteor developers. -- [Upgraded to Meteor 2.14-beta.4](https://github.com/wekan/wekan/commit/d90ab03bbe9f13d211aaca2e72542386fdf2a6ba). - Thanks to Meteor developers. - -Thanks to above GitHub users for their contributions and translators for their translations. - # v7.19 2023-11-20 WeKan ® release This release adds the following new features: diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index ab3b34b15..f639fe496 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -11,7 +11,7 @@ For all code at WeKan GitHub Organization https://github.com/wekan ## Private reports -- Email support@wekan.team +- Email support (at) wekan.team using [this PGP public key](support-at-wekan.team_pgp-publickey.asc) if possible - Security issues: [SECURITY.md](SECURITY.md) - License violations - Anything private, sensitive or negative diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 051a3a90a..8054427d0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,9 +27,13 @@ CVE Hall of Fame is at https://wekan.github.io/hall-of-fame/ ## Contributing to Documentation Wiki -Fork WeKan repo https://github.com/wekan/wekan , -edit `docs` directory content at GitHub web interface, -and click send PR. +Please clone wiki: +``` +git clone https://github.com/wekan/wekan.wiki +``` +Edit .md files, and add changed files in .zip attachment +directly to comment of new issue at +https://github.com/wekan/wekan/issues ## Contributing code diff --git a/Dockerfile b/Dockerfile index 64a4e921f..90c8426d6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,13 @@ -FROM ubuntu:24.04 -LABEL maintainer="wekan" -LABEL org.opencontainers.image.ref.name="ubuntu" -LABEL org.opencontainers.image.version="24.04" -LABEL org.opencontainers.image.source="https://github.com/wekan/wekan" +FROM --platform=linux/amd64 ubuntu:23.10 as wekan +LABEL maintainer="wekan" \ + org.opencontainers.image.ref.name="ubuntu" \ + org.opencontainers.image.version="23.10" \ + org.opencontainers.image.source="https://github.com/wekan/wekan" + +# 2022-09-04: +# - above "--platform=linux/amd64 ubuntu:22.04 as wekan" is needed to build Dockerfile +# correctly on Mac M1 etc, to not get this error: +# https://stackoverflow.com/questions/71040681/qemu-x86-64-could-not-open-lib64-ld-linux-x86-64-so-2-no-such-file-or-direc # 2022-04-25: # - gyp does not yet work with Ubuntu 22.04 ubuntu:rolling, @@ -11,17 +16,19 @@ LABEL org.opencontainers.image.source="https://github.com/wekan/wekan" # 2021-09-18: # - Above Ubuntu base image copied from Docker Hub ubuntu:hirsute-20210825 # to Quay to avoid Docker Hub rate limits. + +# Set the environment variables (defaults where required) +# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303 +# ENV BUILD_DEPS="paxctl" ARG DEBIAN_FRONTEND=noninteractive -ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3" - -ENV \ +ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \ DEBUG=false \ NODE_VERSION=v14.21.4 \ - METEOR_RELEASE=METEOR@2.14 \ + METEOR_RELEASE=METEOR@2.13.3 \ USE_EDGE=false \ METEOR_EDGE=1.5-beta.17 \ - NPM_VERSION=6.14.17 \ + NPM_VERSION=9.8.1 \ FIBERS_VERSION=4.0.1 \ ARCHITECTURE=linux-x64 \ SRC_PATH=./ \ @@ -62,7 +69,6 @@ ENV \ OIDC_REDIRECTION_ENABLED=false \ OAUTH2_CA_CERT="" \ OAUTH2_ADFS_ENABLED=false \ - OAUTH2_B2C_ENABLED=false \ OAUTH2_LOGIN_STYLE=redirect \ OAUTH2_CLIENT_ID="" \ OAUTH2_SECRET="" \ @@ -158,7 +164,7 @@ ENV \ WRITABLE_PATH=/data \ S3="" -# NODE_OPTIONS="--max_old_space_size=4096" +# NODE_OPTIONS="--max_old_space_size=4096" \ #--------------------------------------------- # == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ==== @@ -169,98 +175,99 @@ ENV \ # Copy the app to the image COPY ${SRC_PATH} /home/wekan/app -# Install OS -RUN < Newest WeKan at amd64 platforms: Linux bundle, Snap Candidate, Docker, Kubernetes. Fixing other platforms In Progress. - -Platform support changes often, because: - -- There are many dependencies, that update or break or change often -- Node.js segfaults at some CPU/OS -- Some platforms have build errors - -Roadmap is to update all existing platforms, and add more platforms. - -Upcoming platform upgrades: - -- Fix migrations, so that newest WeKan can be released to Snap Stable. (Currently newest is at Snap Candidate). - -## WeKan features - -Most Meteor WeKan features are listed here: - -https://github.com/wekan/wekan/wiki/Deep-Dive-Into-WeKan - -Remaining features and all changes are listed here: - -https://github.com/wekan/wekan/blob/main/CHANGELOG.md diff --git a/LICENSE b/LICENSE index 2c8dfcbb7..d047830ae 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2024 The Wekan Team +Copyright (c) 2014-2023 The Wekan Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 231512512..0902ee2b3 100644 --- a/README.md +++ b/README.md @@ -2,34 +2,23 @@ # WeKan ® - Open Source kanban -## Downloads - -https://wekan.github.io / Install WeKan ® Server - ## Docker Containers -- [GitHub](https://github.com/wekan/wekan/pkgs/container/wekan) - [Quay](https://quay.io/repository/wekan/wekan) - [Docker Hub](https://hub.docker.com/r/wekanteam/wekan) -docker-compose.yml at https://github.com/wekan/wekan/blob/main/docker-compose.yml - -## Standards - -- [WeKan and Standard for Public Code](https://wekan.github.io/standard-for-public-code/) assessment was made at 2023-11. - Currently Wekan meets 8 out of 16 criteria out of the box. - Some others could be met with small changes. +Other platforms and compatible software versions at https://wekan.github.io Download section. ## Code stats -- [CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619) - [Code Climate](https://codeclimate.com/github/wekan/wekan) - [Open Hub](https://www.openhub.net/p/wekan) - [OSS Insight](https://ossinsight.io/analyze/wekan/wekan) +- [CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619) ## [Translate WeKan ® at Transifex](https://app.transifex.com/wekan/) -Translations to non-English languages are accepted only at [Transifex](https://app.transifex.com/wekan/wekan) using webbrowser. +Translations to non-English languages are accepted only at [Transifex](https://app.transifex.com/wekan/) using webbrowser. New English strings of new features can be added as PRs to master branch file wekan/imports/i18n/data/en.i18n.json . ## [WeKan ® feature requests and bugs](https://github.com/wekan/wekan/issues) @@ -107,14 +96,6 @@ that by providing one-click installation on various platforms. We also welcome sponsors for features and bugfixes. By working directly with WeKan ® you get the benefit of active maintenance and new features added by growing WeKan ® developer community. -## Getting Started with Development - -The default branch uses [Meteor 2 with Node.js 14](https://wekan.github.io/install/). - -To contribute, [create a fork](https://github.com/wekan/wekan/wiki/Emoji#2-create-fork-of-httpsgithubcomwekanwekan-at-github-web-page) and run `./rebuild-wekan.sh` (or `./rebuild-wekan.bat` on Windows) as detailed [here](https://github.com/wekan/wekan/wiki/Emoji#3-select-option-1-to-install-dependencies-and-then-enter). Once you're ready, please test your code and [submit a pull request (PR)](https://github.com/wekan/wekan/wiki/Emoji#7-test). - -Please refer to the [developer documentation](https://github.com/wekan/wekan/wiki/Developer-Documentation) for more information. - ## Screenshot [More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features) diff --git a/SECURITY.md b/SECURITY.md index 9e6cd4549..5aff43c5a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,7 +1,8 @@ About money, see [CONTRIBUTING.md](CONTRIBUTING.md) Security is very important to us. If you discover any issue regarding security, please disclose -the information responsibly by sending an email to security@wekan.team and not by +the information responsibly by sending an email to support (at) wekan.team using +[this PGP public key](support-at-wekan.team_pgp-publickey.asc) and not by creating a GitHub issue. We will respond swiftly to fix verifiable security issues. We thank you with a place at our hall of fame page, that is @@ -59,7 +60,7 @@ and by by companies that have 30k users. ## SSL/TLS - SSL/TLS encrypts traffic between webbrowser and webserver. -- If you are thinking about TLS MITM, look at https://github.com/caddyserver/caddy/issues/2530 +- If you are thinking about TLS MITM, look at Caddy 2 webserver MITM detections. - Let's Encrypt TLS requires publicly accessible webserver, that Let's Encrypt TLS validation servers check. - If firewall limits to only allowed IP addresses, you may need non-Let's Encrypt TLS cert. - For On Premise: @@ -217,7 +218,7 @@ Typical already known or "no impact" bugs such as: - Email spoofing, SPF, DMARC & DKIM. Wekan does not include email server. Wekan is Open Source with MIT license, and free to use also for commercial use. -We welcome all fixes to improve security by email to security@wekan.team +We welcome all fixes to improve security by email to security (at) wekan.team . ## Bonus Points diff --git a/Stackerfile.yml b/Stackerfile.yml index 257145fd9..42940f988 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v7.84.0" +appVersion: "v7.19.0" files: userUploads: - README.md diff --git a/api.py b/api.py index c6f2064c4..992cfa1fe 100755 --- a/api.py +++ b/api.py @@ -37,24 +37,9 @@ If *nix: chmod +x api.py => ./api.py users python3 api.py customfields BOARDID # Custom Fields of BOARDID python3 api.py customfield BOARDID CUSTOMFIELDID # Info of CUSTOMFIELDID python3 api.py addcustomfieldtoboard AUTHORID BOARDID NAME TYPE SETTINGS SHOWONCARD AUTOMATICALLYONCARD SHOWLABELONMINICARD SHOWSUMATTOPOFLIST # Add Custom Field to Board - python3 api.py editcustomfield BOARDID LISTID CARDID CUSTOMFIELDID NEWCUSTOMFIELDVALUE # Edit Custom Field + python3 api.py editcustomfield BOARDID LISTID CARDID CUSTOMFIELDID NEWCUSTOMFIELDVALUE python3 api.py listattachments BOARDID # List attachments - python3 api.py cardsbyswimlane SWIMLANEID LISTID # Retrieve cards list on a swimlane - python3 api.py getcard BOARDID LISTID CARDID # Get card info - python3 api.py addlabel BOARDID LISTID CARDID LABELID # Add label to a card - python3 api.py addcardwithlabel AUTHORID BOARDID SWIMLANEID LISTID CARDTITLE CARDDESCRIPTION LABELIDS # Add a card and a label - python3 api.py editboardtitle BOARDID NEWBOARDTITLE # Edit board title - python3 api.py copyboard BOARDID NEWBOARDTITLE # Copy a board - python3 api.py createlabel BOARDID LABELCOLOR LABELNAME (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Create a new label - python3 api.py editcardcolor BOARDID LISTID CARDID COLOR (Color available: `white`, `green`, `yellow`, `orange`, `red`, `purple`, `blue`, `sky`, `lime`, `pink`, `black`, `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, `slateblue`, `magenta`, `gold`, `navy`, `gray`, `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`) # Edit card color - python3 api.py addchecklist BOARDID CARDID TITLE ITEM1 ITEM2 ITEM3 ITEM4 (You can add multiple items or just one, or also without any item, just TITLE works as well. * If items or Title contains spaces, you should add ' between them.) # Add checklist + item on a card - python3 api.py deleteallcards BOARDID SWIMLANEID ( * Be careful will delete ALL CARDS INSIDE the swimlanes automatically in every list * ) # Delete all cards on a swimlane - python3 api.py checklistid BOARDID CARDID # Retrieve Checklist ID attached to a card - python3 api.py checklistinfo BOARDID CARDID CHECKLISTID # Get checklist info - python3 api.py get_list_cards_count BOARDID LISTID # Retrieve how many cards in a list - python3 api.py get_board_cards_count BOARDID # Retrieve how many cards in a board - Admin API: python3 api.py users # All users python3 api.py boards # All Public Boards @@ -194,52 +179,6 @@ if arguments == 10: print(body.text) # ------- ADD CUSTOM FIELD TO BOARD END ----------- -if arguments == 8: - - if sys.argv[1] == 'addcardwithlabel': - # ------- ADD CARD WITH LABEL START ----------- - authorid = sys.argv[2] - boardid = sys.argv[3] - swimlaneid = sys.argv[4] - listid = sys.argv[5] - cardtitle = sys.argv[6] - carddescription = sys.argv[7] - labelIds = sys.argv[8] # Aggiunto labelIds - - cardtolist = wekanurl + apiboards + boardid + s + l + s + listid + s + cs - # Add card - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - post_data = { - 'authorId': '{}'.format(authorid), - 'title': '{}'.format(cardtitle), - 'description': '{}'.format(carddescription), - 'swimlaneId': '{}'.format(swimlaneid), - 'labelIds': labelIds - } - - body = requests.post(cardtolist, data=post_data, headers=headers) - print(body.text) - - # If ok id card - if body.status_code == 200: - card_data = body.json() - new_card_id = card_data.get('_id') - - # Updating card - if new_card_id: - edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + new_card_id - put_data = {'labelIds': labelIds} - body = requests.put(edcard, data=put_data, headers=headers) - print("=== EDIT CARD ===\n") - body = requests.get(edcard, headers=headers) - data2 = body.text.replace('}', "}\n") - print(data2) - else: - print("Error obraining ID.") - else: - print("Error adding card.") - # ------- ADD CARD WITH LABEL END ----------- - if arguments == 7: if sys.argv[1] == 'addcard': @@ -298,53 +237,7 @@ if arguments == 6: print(data2) # ------- EDIT CUSTOMFIELD END ----------- -if arguments == 5: - - if sys.argv[1] == 'addlabel': - - # ------- EDIT CARD ADD LABEL START ----------- - boardid = sys.argv[2] - listid = sys.argv[3] - cardid = sys.argv[4] - labelIds = sys.argv[5] - edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid - print(edcard) - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - put_data = {'labelIds': labelIds} - body = requests.put(edcard, data=put_data, headers=headers) - print("=== ADD LABEL ===\n") - body = requests.get(edcard, headers=headers) - data2 = body.text.replace('}',"}\n") - print(data2) - # ------- EDIT CARD ADD LABEL END ----------- - - if sys.argv[1] == 'editcardcolor': - # ------- EDIT CARD COLOR START ----------- - boardid = sys.argv[2] - listid = sys.argv[3] - cardid = sys.argv[4] - newcolor = sys.argv[5] - - valid_colors = ['white', 'green', 'yellow', 'orange', 'red', 'purple', 'blue', 'sky', 'lime', 'pink', 'black', - 'silver', 'peachpuff', 'crimson', 'plum', 'darkgreen', 'slateblue', 'magenta', 'gold', 'navy', - 'gray', 'saddlebrown', 'paleturquoise', 'mistyrose', 'indigo'] - - if newcolor not in valid_colors: - print("Invalid color. Choose a color from the list.") - sys.exit(1) - - edcard = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid - print(edcard) - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - put_data = {'color': '{}'.format(newcolor)} - body = requests.put(edcard, data=put_data, headers=headers) - print("=== EDIT CARD COLOR ===\n") - body = requests.get(edcard, headers=headers) - data2 = body.text.replace('}', "}\n") - print(data2) - # ------- EDIT CARD COLOR END ----------- - -if arguments >= 4: +if arguments == 4: if sys.argv[1] == 'newuser': @@ -358,155 +251,9 @@ if arguments >= 4: print("=== CREATE NEW USER ===\n") print(body.text) # ------- CREATE NEW USER END ----------- - - if sys.argv[1] == 'getcard': - - # ------- LIST OF CARD START ----------- - boardid = sys.argv[2] - listid = sys.argv[3] - cardid = sys.argv[4] - listone = wekanurl + apiboards + boardid + s + l + s + listid + s + cs + s + cardid - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - print("=== INFO OF ONE LIST ===\n") - print("URL:", listone) # Stampa l'URL per debug - try: - response = requests.get(listone, headers=headers) - print("=== RESPONSE ===\n") - print("Status Code:", response.status_code) # Stampa il codice di stato per debug - - if response.status_code == 200: - data2 = response.text.replace('}', "}\n") - print(data2) - else: - print(f"Error: {response.status_code}") - print(f"Response: {response.text}") - except Exception as e: - print(f"Error in the GET request: {e}") - # ------- LISTS OF CARD END ----------- - - if sys.argv[1] == 'createlabel': - - # ------- CREATE LABEL START ----------- - boardid = sys.argv[2] - labelcolor = sys.argv[3] - labelname = sys.argv[4] - label_url = wekanurl + apiboards + boardid + s + 'labels' - print(label_url) - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - # Object to send - put_data = {'label': {'color': labelcolor, 'name': labelname}} - print("URL:", label_url) - print("Headers:", headers) - print("Data:", put_data) - try: - response = requests.put(label_url, json=put_data, headers=headers) - print("=== CREATE LABELS ===\n") - print("Response Status Code:", response.status_code) - print("Response Text:", response.text) - except Exception as e: - print("Error:", e) - # ------- CREATE LABEL END ----------- - - if sys.argv[1] == 'addchecklist': - - # ------- ADD CHECKLIST START ----------- - board_id = sys.argv[2] - card_id = sys.argv[3] - checklist_title = sys.argv[4] - - # Aggiungi la checklist - checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists' - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - data = {'title': checklist_title} - - response = requests.post(checklist_url, data=data, headers=headers) - response.raise_for_status() - - result = json.loads(response.text) - checklist_id = result.get('_id') - - print(f"Checklist '{checklist_title}' created. ID: {checklist_id}") - - # Aggiungi gli items alla checklist - items_to_add = sys.argv[5:] - for item_title in items_to_add: - checklist_item_url = wekanurl + apiboards + board_id + s + cs + s + card_id + s + 'checklists' + s + checklist_id + '/items' - item_data = {'title': item_title} - - item_response = requests.post(checklist_item_url, data=item_data, headers=headers) - item_response.raise_for_status() - - item_result = json.loads(item_response.text) - checklist_item_id = item_result.get('_id') - - print(f"Item '{item_title}' added. ID: {checklist_item_id}") - - if sys.argv[1] == 'checklistinfo': - - # ------- ADD CHECKLIST START ----------- - board_id = sys.argv[2] - card_id = sys.argv[3] - checklist_id = sys.argv[4] - checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists' + s + checklist_id - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - response = requests.get(checklist_url, headers=headers) - - response.raise_for_status() - - checklist_info = response.json() - print("Checklist Info:") - print(checklist_info) if arguments == 3: - if sys.argv[1] == 'editboardtitle': - - # ------- EDIT BOARD TITLE START ----------- - boardid = sys.argv[2] - boardtitle = sys.argv[3] - edboardtitle = wekanurl + apiboards + boardid + s + 'title' - print(edboardtitle) - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - - post_data = {'title': boardtitle} - - body = requests.put(edboardtitle, json=post_data, headers=headers) - print("=== EDIT BOARD TITLE ===\n") - #body = requests.get(edboardtitle, headers=headers) - data2 = body.text.replace('}',"}\n") - print(data2) - if body.status_code == 200: - print("Succesfull!") - else: - print(f"Error: {body.status_code}") - print(body.text) - - # ------- EDIT BOARD TITLE END ----------- - - if sys.argv[1] == 'copyboard': - - # ------- COPY BOARD START ----------- - boardid = sys.argv[2] - boardtitle = sys.argv[3] - edboardcopy = wekanurl + apiboards + boardid + s + 'copy' - print(edboardcopy) - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - - post_data = {'title': boardtitle} - - body = requests.post(edboardcopy, json=post_data, headers=headers) - print("=== COPY BOARD ===\n") - #body = requests.get(edboardcopy, headers=headers) - data2 = body.text.replace('}',"}\n") - print(data2) - if body.status_code == 200: - print("Succesfull!") - else: - print(f"Error: {body.status_code}") - print(body.text) - - # ------- COPY BOARD END ----------- - if sys.argv[1] == 'createlist': # ------- CREATE LIST START ----------- @@ -546,90 +293,6 @@ if arguments == 3: print(data2) # ------- INFO OF CUSTOM FIELD END ----------- - if sys.argv[1] == 'cardsbyswimlane': - # ------- RETRIEVE CARDS BY SWIMLANE ID START ----------- - boardid = sys.argv[2] - swimlaneid = sys.argv[3] - cardsbyswimlane = wekanurl + apiboards + boardid + s + sws + s + swimlaneid + s + cs - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - print("=== CARDS BY SWIMLANE ID ===\n") - print("URL:", cardsbyswimlane) # Debug - try: - body = requests.get(cardsbyswimlane, headers=headers) - print("Status Code:", body.status_code) # Debug - data = body.text.replace('}', "}\n") - print("Data:", data) - except Exception as e: - print("Error GET:", e) - # ------- RETRIEVE CARDS BY SWIMLANE ID END ----------- - - if sys.argv[1] == 'deleteallcards': - boardid = sys.argv[2] - swimlaneid = sys.argv[3] - - # ------- GET SWIMLANE CARDS START ----------- - get_swimlane_cards_url = wekanurl + apiboards + boardid + s + "swimlanes" + s + swimlaneid + s + "cards" - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - - try: - response = requests.get(get_swimlane_cards_url, headers=headers) - response.raise_for_status() - cards_data = response.json() - - # Print the details of each card - for card in cards_data: - # ------- DELETE CARD START ----------- - delete_card_url = wekanurl + apiboards + boardid + s + "lists" + s + card['listId'] + s + "cards" + s + card['_id'] - try: - response = requests.delete(delete_card_url, headers=headers) - if response.status_code == 404: - print(f"Card not found: {card['_id']}") - else: - response.raise_for_status() - deleted_card_data = response.json() - print(f"Card Deleted Successfully. Card ID: {deleted_card_data['_id']}") - except requests.exceptions.RequestException as e: - print(f"Error deleting card: {e}") - # ------- DELETE CARD END ----------- - - except requests.exceptions.RequestException as e: - print(f"Error getting swimlane cards: {e}") - sys.exit(1) - # ------- GET SWIMLANE CARDS END ----------- - - if sys.argv[1] == 'get_list_cards_count': - # ------- GET LIST CARDS COUNT START ----------- - boardid = sys.argv[2] - listid = sys.argv[3] - - get_list_cards_count_url = wekanurl + apiboards + boardid + s + l + s + listid + s + "cards_count" - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - - try: - response = requests.get(get_list_cards_count_url, headers=headers) - response.raise_for_status() - data = response.json() - print(f"List Cards Count: {data['list_cards_count']}") - except requests.exceptions.RequestException as e: - print(f"Error: {e}") - # ------- GET LIST CARDS COUNT END ----------- - - if sys.argv[1] == 'checklistid': - - # ------- ADD CHECKLIST START ----------- - board_id = sys.argv[2] - card_id = sys.argv[3] - - checklist_url = wekanurl + apiboards + board_id + s + cs + s + card_id + '/checklists' - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - response = requests.get(checklist_url, headers=headers) - - response.raise_for_status() - checklists = response.json() - print("Checklists:") - for checklist in checklists: - print(checklist) - if arguments == 2: # ------- BOARDS LIST START ----------- @@ -701,22 +364,6 @@ if arguments == 2: print(data2) # ------- LISTS OF ATTACHMENTS END ----------- - if sys.argv[1] == 'get_board_cards_count': - # ------- GET BOARD CARDS COUNT START ----------- - boardid = sys.argv[2] - - get_board_cards_count_url = wekanurl + apiboards + boardid + s + "cards_count" - headers = {'Accept': 'application/json', 'Authorization': 'Bearer {}'.format(apikey)} - - try: - response = requests.get(get_board_cards_count_url, headers=headers) - response.raise_for_status() - data = response.json() - print(f"Board Cards Count: {data['board_cards_count']}") - except requests.exceptions.RequestException as e: - print(f"Error: {e}") - # ------- GET BOARD CARDS COUNT END ----------- - if arguments == 1: if sys.argv[1] == 'users': diff --git a/docs/ImportExport/asana/CHANGELOG.md b/asana/CHANGELOG.md similarity index 100% rename from docs/ImportExport/asana/CHANGELOG.md rename to asana/CHANGELOG.md diff --git a/docs/ImportExport/asana/LICENSE b/asana/LICENSE similarity index 100% rename from docs/ImportExport/asana/LICENSE rename to asana/LICENSE diff --git a/docs/ImportExport/asana/export_boards.pl b/asana/export_boards.pl similarity index 100% rename from docs/ImportExport/asana/export_boards.pl rename to asana/export_boards.pl diff --git a/docs/ImportExport/asana/load_tasks.pl b/asana/load_tasks.pl similarity index 100% rename from docs/ImportExport/asana/load_tasks.pl rename to asana/load_tasks.pl diff --git a/client/components/activities/activities.css b/client/components/activities/activities.css index febd43e56..4d630d098 100644 --- a/client/components/activities/activities.css +++ b/client/components/activities/activities.css @@ -49,6 +49,43 @@ margin-top: 5px; padding: 5px; } +.activities .activity .activity-desc .reactions { + display: flex; + margin-top: 5px; + gap: 5px; +} +.activities .activity .activity-desc .reactions .open-comment-reaction-popup { + display: flex; + align-items: center; + text-decoration: none; + height: 24px; +} +.activities .activity .activity-desc .reactions .open-comment-reaction-popup i.fa.fa-smile-o { + font-size: 17px; + font-weight: 500; + margin-left: 2px; +} +.activities .activity .activity-desc .reactions .open-comment-reaction-popup i.fa.fa-plus { + font-size: 8px; + margin-top: -7px; + margin-left: 1px; +} +.activities .activity .activity-desc .reactions .reaction { + cursor: pointer; + border: 1px solid #808080; + border-radius: 15px; + display: flex; + padding: 2px 5px; +} +.activities .activity .activity-desc .reactions .reaction.selected { + background-color: #b0c4de; +} +.activities .activity .activity-desc .reactions .reaction:hover { + background-color: #b0c4de; +} +.activities .activity .activity-desc .reactions .reaction .reaction-count { + font-size: 12px; +} .activities .activity .activity-desc .activity-checklist { display: block; border-radius: 3px; diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index f44673ae4..b4d1ac07b 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -1,12 +1,11 @@ template(name="activities") - if showActivities - .activities.js-sidebar-activities - //- We should use Template.dynamic here but there is a bug with - //- blaze-components: https://github.com/peerlibrary/meteor-blaze-components/issues/30 - if $eq mode "board" - +boardActivities - else - +cardActivities + .activities.js-sidebar-activities + //- We should use Template.dynamic here but there is a bug with + //- blaze-components: https://github.com/peerlibrary/meteor-blaze-components/issues/30 + if $eq mode "board" + +boardActivities + else + +cardActivities template(name="boardActivities") each activityData in currentBoard.activities @@ -16,6 +15,32 @@ template(name="cardActivities") each activityData in activities +activity(activity=activityData card=card mode=mode) +template(name="editOrDeleteComment") + = ' - ' + a.js-open-inlined-form {{_ "edit"}} + = ' - ' + a.js-delete-comment {{_ "delete"}} + +template(name="deleteCommentPopup") + p {{_ "comment-delete"}} + button.js-confirm.negate.full(type="submit") {{_ 'delete'}} + +template(name="commentReactions") + .reactions + each reaction in reactions + span.reaction(class="{{#if isSelected reaction.userIds}}selected{{/if}}" data-codepoint="#{reaction.reactionCodepoint}" title="{{userNames reaction.userIds}}") + span.reaction-codepoint !{reaction.reactionCodepoint} + span.reaction-count #{reaction.userIds.length} + if (currentUser.isBoardMember) + a.open-comment-reaction-popup(title="{{_ 'addReactionPopup-title'}}") + i.fa.fa-smile-o + i.fa.fa-plus + +template(name="addReactionPopup") + .reactions-popup + each codepoint in codepoints + span.add-comment-reaction(data-codepoint="#{codepoint}") !{codepoint} + template(name="activity") .activity(data-id=activity._id) +userAvatar(userId=activity.user._id) @@ -105,17 +130,39 @@ template(name="activity") | {{{_ 'activity-checklist-item-removed' (sanitize activity.checklist.title) cardLink}}}. //- comment activity ---------------------------------------------------- - if($eq activity.activityType 'deleteComment') - | {{{_ 'activity-deleteComment' activity.commentId}}}. + if($eq mode 'card') + //- if we are in card mode we display the comment in a way that it + //- can be edited by the owner + if($eq activity.activityType 'addComment') + +inlinedForm(classNames='js-edit-comment') + +editor(autofocus=true) + = activity.comment.text + .edit-controls + button.primary(type="submit") {{_ 'edit'}} + .fa.fa-times-thin.js-close-inlined-form + else + .activity-comment + +viewer + = activity.comment.text + +commentReactions(reactions=activity.comment.reactions commentId=activity.comment._id) + span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }} + if($eq currentUser._id activity.comment.userId) + +editOrDeleteComment + else if currentUser.isBoardAdmin + +editOrDeleteComment - if($eq activity.activityType 'editComment') - | {{{_ 'activity-editComment' activity.commentId}}}. + if($eq activity.activityType 'deleteComment') + | {{{_ 'activity-deleteComment' activity.commentId}}}. - if($eq activity.activityType 'addComment') - | {{{_ 'activity-on' cardLink}}} - a.activity-comment(href="{{ activity.card.originRelativeUrl }}") - +viewer - = activity.comment.text + if($eq activity.activityType 'editComment') + | {{{_ 'activity-editComment' activity.commentId}}}. + else + //- if we are not in card mode we only display a summary of the comment + if($eq activity.activityType 'addComment') + | {{{_ 'activity-on' cardLink}}} + a.activity-comment(href="{{ activity.card.originRelativeUrl }}") + +viewer + = activity.comment.text //- date activity ------------------------------------------------ if($eq activity.activityType 'a-receivedAt') @@ -161,9 +208,6 @@ template(name="activity") if($eq activity.activityType 'archivedList') | {{_ 'activity-archived' (sanitize listLabel)}}. - if($eq activity.activityType 'changedListTitle') - | {{_ 'activity-changedListTitle' (sanitize listLabel) boardLabelLink}} - //- member activity ---------------------------------------------------- if($eq activity.activityType 'joinMember') if($eq user._id activity.member._id) @@ -199,4 +243,4 @@ template(name="activity") else if(currentData.timeValue) | {{_ activity.activityType currentData.timeValue}} - div(title=activity.createdAt).activity-meta {{ moment activity.createdAt }} + span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }} diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 439e29619..176d151df 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -13,41 +13,39 @@ BlazeComponent.extendComponent({ const sidebar = Sidebar; sidebar && sidebar.callFirstWith(null, 'resetNextPeak'); this.autorun(() => { - let mode = this.data()?.mode; - if (mode) { - const capitalizedMode = Utils.capitalize(mode); - let searchId; - const showActivities = this.showActivities(); - if (mode === 'linkedcard' || mode === 'linkedboard') { - const currentCard = Utils.getCurrentCard(); - searchId = currentCard.linkedId; - mode = mode.replace('linked', ''); - } else if (mode === 'card') { - searchId = Utils.getCurrentCardId(); - } else { - searchId = Session.get(`current${capitalizedMode}`); - } - const limit = this.page.get() * activitiesPerPage; - if (searchId === null) return; - - this.subscribe('activities', mode, searchId, limit, showActivities, () => { - this.loadNextPageLocked = false; - - // TODO the guard can be removed as soon as the TODO above is resolved - if (!sidebar) return; - // If the sibear peak hasn't increased, that mean that there are no more - // activities, and we can stop calling new subscriptions. - // XXX This is hacky! We need to know excatly and reactively how many - // activities there are, we probably want to denormalize this number - // dirrectly into card and board documents. - const nextPeakBefore = sidebar.callFirstWith(null, 'getNextPeak'); - sidebar.calculateNextPeak(); - const nextPeakAfter = sidebar.callFirstWith(null, 'getNextPeak'); - if (nextPeakBefore === nextPeakAfter) { - sidebar.callFirstWith(null, 'resetNextPeak'); - } - }); + let mode = this.data().mode; + const capitalizedMode = Utils.capitalize(mode); + let searchId; + if (mode === 'linkedcard' || mode === 'linkedboard') { + searchId = Utils.getCurrentCard().linkedId; + mode = mode.replace('linked', ''); + } else if (mode === 'card') { + searchId = Utils.getCurrentCardId(); + } else { + searchId = Session.get(`current${capitalizedMode}`); } + const limit = this.page.get() * activitiesPerPage; + const user = ReactiveCache.getCurrentUser(); + const hideSystem = user ? user.hasHiddenSystemMessages() : false; + if (searchId === null) return; + + this.subscribe('activities', mode, searchId, limit, hideSystem, () => { + this.loadNextPageLocked = false; + + // TODO the guard can be removed as soon as the TODO above is resolved + if (!sidebar) return; + // If the sibear peak hasn't increased, that mean that there are no more + // activities, and we can stop calling new subscriptions. + // XXX This is hacky! We need to know excatly and reactively how many + // activities there are, we probably want to denormalize this number + // dirrectly into card and board documents. + const nextPeakBefore = sidebar.callFirstWith(null, 'getNextPeak'); + sidebar.calculateNextPeak(); + const nextPeakAfter = sidebar.callFirstWith(null, 'getNextPeak'); + if (nextPeakBefore === nextPeakAfter) { + sidebar.callFirstWith(null, 'resetNextPeak'); + } + }); }); }, loadNextPage() { @@ -56,27 +54,15 @@ BlazeComponent.extendComponent({ this.loadNextPageLocked = true; } }, - showActivities() { - let ret = false; - let mode = this.data()?.mode; - if (mode) { - if (mode === 'linkedcard' || mode === 'linkedboard') { - const currentCard = Utils.getCurrentCard(); - ret = currentCard.showActivities ?? false; - } else if (mode === 'card') { - ret = this.data()?.card?.showActivities ?? false; - } else { - ret = Utils.getCurrentBoard().showActivities ?? false; - } - } - return ret; - }, - activities() { - const ret = this.data().card.activities(); - return ret; - }, }).register('activities'); +Template.activities.helpers({ + activities() { + const ret = this.card.activities(); + return ret; + }, +}); + BlazeComponent.extendComponent({ checkItem() { const checkItemId = this.currentData().activity.checklistItemId; @@ -261,6 +247,32 @@ BlazeComponent.extendComponent({ return customField.name; }, + events() { + return [ + { + // XXX We should use Popup.afterConfirmation here + 'click .js-delete-comment': Popup.afterConfirm('deleteComment', () => { + const commentId = this.data().activity.commentId; + CardComments.remove(commentId); + Popup.back(); + }), + 'submit .js-edit-comment'(evt) { + evt.preventDefault(); + const commentText = this.currentComponent() + .getValue() + .trim(); + const commentId = Template.parentData().activity.commentId; + if (commentText) { + CardComments.update(commentId, { + $set: { + text: commentText, + }, + }); + } + }, + }, + ]; + }, }).register('activity'); Template.activity.helpers({ diff --git a/client/components/activities/comments.css b/client/components/activities/comments.css index f495ca361..4fbfdf8ba 100644 --- a/client/components/activities/comments.css +++ b/client/components/activities/comments.css @@ -63,78 +63,3 @@ display: block; margin: auto; } -.comments { - clear: both; -} -.comments .comment { - margin: 0.5px 0; - padding: 6px 0; - display: flex; -} -.comments .comment .member { - width: 32px; - height: 32px; -} -.comments .comment .comment-member { - font-weight: 700; -} -.comments .comment .comment-desc { - word-wrap: break-word; - overflow: hidden; - flex: 1; - align-self: center; - margin: 0; - margin-left: 3px; - overflow: hidden; - word-break: break-word; -} -.comments .comment .comment-desc .comment-text { - display: block; - border-radius: 3px; - background: #fff; - text-decoration: none; - box-shadow: 0 1px 2px rgba(0,0,0,0.2); - margin-top: 5px; - padding: 5px; -} -.comments .comment .comment-desc .reactions { - display: flex; - margin-top: 5px; - gap: 5px; -} -.comments .comment .comment-desc .reactions .open-comment-reaction-popup { - display: flex; - align-items: center; - text-decoration: none; - height: 24px; -} -.comments .comment .comment-desc .reactions .open-comment-reaction-popup i.fa.fa-smile-o { - font-size: 17px; - font-weight: 500; - margin-left: 2px; -} -.comments .comment .comment-desc .reactions .open-comment-reaction-popup i.fa.fa-plus { - font-size: 8px; - margin-top: -7px; - margin-left: 1px; -} -.comments .comment .comment-desc .reactions .reaction { - cursor: pointer; - border: 1px solid #808080; - border-radius: 15px; - display: flex; - padding: 2px 5px; -} -.comments .comment .comment-desc .reactions .reaction.selected { - background-color: #b0c4de; -} -.comments .comment .comment-desc .reactions .reaction:hover { - background-color: #b0c4de; -} -.comments .comment .comment-desc .reactions .reaction .reaction-count { - font-size: 12px; -} -.comments .comment .comment-desc .comment-meta { - font-size: 0.8em; - color: #999; -} diff --git a/client/components/activities/comments.jade b/client/components/activities/comments.jade index 07b52d47d..4cddf4c23 100644 --- a/client/components/activities/comments.jade +++ b/client/components/activities/comments.jade @@ -7,59 +7,3 @@ template(name="commentForm") | {{getUnsavedValue 'cardComment' currentCard._id}} .add-controls button.primary.confirm.clear.js-add-comment(type="submit") {{_ 'comment'}} - -template(name="comments") - .comments - each commentData in getComments - +comment(commentData) - -template(name="comment") - .comment - +userAvatar(userId=userId) - p.comment-desc - span.comment-member - +memberName(user=user) - - +inlinedForm(classNames='js-edit-comment') - +editor(autofocus=true) - = text - .edit-controls - button.primary(type="submit") {{_ 'edit'}} - .fa.fa-times-thin.js-close-inlined-form - else - .comment-text - +viewer - = text - +commentReactions(reactions=reactions commentId=_id) - span(title=createdAt).comment-meta {{ moment createdAt }} - if($eq currentUser._id userId) - +editOrDeleteComment - else if currentUser.isBoardAdmin - +editOrDeleteComment - -template(name="editOrDeleteComment") - = ' - ' - a.js-open-inlined-form {{_ "edit"}} - = ' - ' - a.js-delete-comment {{_ "delete"}} - -template(name="deleteCommentPopup") - p {{_ "comment-delete"}} - button.js-confirm.negate.full(type="submit") {{_ 'delete'}} - -template(name="commentReactions") - .reactions - each reaction in reactions - span.reaction(class="{{#if isSelected reaction.userIds}}selected{{/if}}" data-codepoint="#{reaction.reactionCodepoint}" title="{{userNames reaction.userIds}}") - span.reaction-codepoint !{reaction.reactionCodepoint} - span.reaction-count #{reaction.userIds.length} - if (currentUser.isBoardMember) - a.open-comment-reaction-popup(title="{{_ 'addReactionPopup-title'}}") - i.fa.fa-smile-o - i.fa.fa-plus - -template(name="addReactionPopup") - .reactions-popup - each codepoint in codepoints - span.add-comment-reaction(data-codepoint="#{codepoint}") !{codepoint} - diff --git a/client/components/activities/comments.js b/client/components/activities/comments.js index 62629252d..b46bd3c75 100644 --- a/client/components/activities/comments.js +++ b/client/components/activities/comments.js @@ -55,41 +55,6 @@ BlazeComponent.extendComponent({ }, }).register('commentForm'); -BlazeComponent.extendComponent({ - getComments() { - const ret = this.data().comments(); - return ret; - }, -}).register("comments"); - -BlazeComponent.extendComponent({ - events() { - return [ - { - 'click .js-delete-comment': Popup.afterConfirm('deleteComment', () => { - const commentId = this.data()._id; - CardComments.remove(commentId); - Popup.back(); - }), - 'submit .js-edit-comment'(evt) { - evt.preventDefault(); - const commentText = this.currentComponent() - .getValue() - .trim(); - const commentId = this.data()._id; - if (commentText) { - CardComments.update(commentId, { - $set: { - text: commentText, - }, - }); - } - }, - }, - ]; - }, -}).register("comment"); - // XXX This should be a static method of the `commentForm` component function resetCommentInput(input) { input.val(''); // without manually trigger, input event won't be fired diff --git a/client/components/boards/boardBody.css b/client/components/boards/boardBody.css index 1138aa19a..cb091b57d 100644 --- a/client/components/boards/boardBody.css +++ b/client/components/boards/boardBody.css @@ -16,6 +16,9 @@ transition: margin 0.1s; overflow-y: auto; } +.board-wrapper .board-canvas.is-sibling-sidebar-open { + margin-right: 248px; +} .board-wrapper .board-canvas .board-overlay { position: fixed; left: 0; diff --git a/client/components/boards/boardBody.jade b/client/components/boards/boardBody.jade index de1c1ca3c..edeb25464 100644 --- a/client/components/boards/boardBody.jade +++ b/client/components/boards/boardBody.jade @@ -17,32 +17,25 @@ template(name="boardBody") | {{_ 'tableVisibilityMode-allowPrivateOnly'}} else .board-wrapper(class=currentBoard.colorClass) + +sidebar .board-canvas.js-swimlanes( - class="{{#if hasSwimlanes}}dragscroll{{/if}}" class="{{#if Sidebar.isOpen}}is-sibling-sidebar-open{{/if}}" class="{{#if MultiSelection.isActive}}is-multiselection-active{{/if}}" - class="{{#if draggingActive.get}}is-dragging-active{{/if}}" - class="{{#unless isVerticalScrollbars}}no-scrollbars{{/unless}}") + class="{{#if draggingActive.get}}is-dragging-active{{/if}}") if showOverlay.get .board-overlay if currentBoard.isTemplatesBoard each currentBoard.swimlanes +swimlane(this) else if isViewSwimlanes - if hasSwimlanes - each currentBoard.swimlanes - +swimlane(this) - else - a.js-empty-board-add-swimlane(title="{{_ 'add-swimlane'}}") - h1.big-message.quiet - | {{_ 'add-swimlane'}} + + each currentBoard.swimlanes + +swimlane(this) else if isViewLists +listsGroup(currentBoard) else if isViewCalendar +calendarView else +listsGroup(currentBoard) - +sidebar template(name="calendarView") if isViewCalendar diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index 29bf5e5bb..f02b69fdd 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -1,6 +1,5 @@ import { ReactiveCache } from '/imports/reactiveCache'; import { TAPi18n } from '/imports/i18n'; -import dragscroll from '@wekanteam/dragscroll'; const subManager = new SubsManager(); const { calculateIndex } = Utils; @@ -195,9 +194,6 @@ BlazeComponent.extendComponent({ }); this.autorun(() => { - // Always reset dragscroll on view switch - dragscroll.reset(); - if (Utils.isTouchScreenOrShowDesktopDragHandles()) { $swimlanesDom.sortable({ handle: '.js-swimlane-header-handle', @@ -223,7 +219,6 @@ BlazeComponent.extendComponent({ boardComponent.openNewListForm(); } - dragscroll.reset(); Utils.setBackgroundImage(); }, @@ -248,10 +243,6 @@ BlazeComponent.extendComponent({ } }, - hasSwimlanes() { - return Utils.getCurrentBoard().swimlanes().length > 0; - }, - isViewLists() { const currentUser = ReactiveCache.getCurrentUser(); if (currentUser) { @@ -270,11 +261,6 @@ BlazeComponent.extendComponent({ } }, - isVerticalScrollbars() { - const user = ReactiveCache.getCurrentUser(); - return user && user.isVerticalScrollbars(); - }, - openNewListForm() { if (this.isViewSwimlanes()) { // The form had been removed in 416b17062e57f215206e93a85b02ef9eb1ab4902 @@ -297,7 +283,6 @@ BlazeComponent.extendComponent({ this._isDragging = false; } }, - 'click .js-empty-board-add-swimlane': Popup.open('swimlaneAdd'), }, ]; }, diff --git a/client/components/boards/boardColors.css b/client/components/boards/boardColors.css index 7f1bb29e4..9ca7a15c7 100644 --- a/client/components/boards/boardColors.css +++ b/client/components/boards/boardColors.css @@ -1,7 +1,3 @@ -/* =============== -THEME - NEPHRITIS -=================*/ - .board-color-nephritis#header, .board-color-nephritis.sk-spinner div, .board-backgrounds-list .board-color-nephritis.background-box, @@ -74,35 +70,6 @@ THEME - NEPHRITIS .board-color-nephritis#header-quick-access ul li.current { border-bottom: 4px solid #3dd37c; } - -/* Transparent modern scrollbar - Nephritis*/ -.board-color-nephritis .board-canvas { - scrollbar-color: #27ae60f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-nephritis .sidebar .sidebar-content { - scrollbar-color: #27ae60f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-nephritis .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-nephritis .list-body { - margin-top: 8px; -} - -/* === END NEPHRITIS THEME === */ - -/* =============== -THEME - Pomegranate -=================*/ - .board-color-pomegranate#header, .board-color-pomegranate.sk-spinner div, .board-backgrounds-list .board-color-pomegranate.background-box, @@ -175,35 +142,6 @@ THEME - Pomegranate .board-color-pomegranate#header-quick-access ul li.current { border-bottom: 4px solid #d7584b; } - -/* Transparent modern scrollbar - pomegranate*/ -.board-color-pomegranate .board-canvas { - scrollbar-color: #c0392bf2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-pomegranate .sidebar .sidebar-content { - scrollbar-color: #c0392bf2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-pomegranate .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-pomegranate .list-body { - margin-top: 8px; -} - -/* === END Pomegranate THEME === */ - -/* =============== -THEME - Belize -=================*/ - .board-color-belize#header, .board-color-belize.sk-spinner div, .board-backgrounds-list .board-color-belize.background-box, @@ -276,35 +214,6 @@ THEME - Belize .board-color-belize#header-quick-access ul li.current { border-bottom: 4px solid #459cd6; } - -/* Transparent modern scrollbar - belize*/ -.board-color-belize .board-canvas { - scrollbar-color: #2573a7f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-belize .sidebar .sidebar-content { - scrollbar-color: #2980b9f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-belize .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-belize .list-body { - margin-top: 8px; -} - -/* === END Belize THEME === */ - -/* =============== -THEME - Wisteria -=================*/ - .board-color-wisteria#header, .board-color-wisteria.sk-spinner div, .board-backgrounds-list .board-color-wisteria.background-box, @@ -377,35 +286,6 @@ THEME - Wisteria .board-color-wisteria#header-quick-access ul li.current { border-bottom: 4px solid #a765c2; } - -/* Transparent modern scrollbar - wisteria*/ -.board-color-wisteria .board-canvas { - scrollbar-color: #8e44adf2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-wisteria .sidebar .sidebar-content { - scrollbar-color: #8e44adf2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-wisteria .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-wisteria .list-body { - margin-top: 8px; -} - -/* === END Wisteria THEME === */ - -/* =============== -THEME - Midnight -=================*/ - .board-color-midnight#header, .board-color-midnight.sk-spinner div, .board-backgrounds-list .board-color-midnight.background-box, @@ -478,35 +358,6 @@ THEME - Midnight .board-color-midnight#header-quick-access ul li.current { border-bottom: 4px solid #476582; } - -/* Transparent modern scrollbar - midnight*/ -.board-color-midnight .board-canvas { - scrollbar-color: #2c3e50f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-midnight .sidebar .sidebar-content { - scrollbar-color: #2c3e50f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-midnight .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-midnight .list-body { - margin-top: 8px; -} - -/* === END Midnight THEME === */ - -/* =============== -THEME - Pumpkin -=================*/ - .board-color-pumpkin#header, .board-color-pumpkin.sk-spinner div, .board-backgrounds-list .board-color-pumpkin.background-box, @@ -579,35 +430,6 @@ THEME - Pumpkin .board-color-pumpkin#header-quick-access ul li.current { border-bottom: 4px solid #eb984e; } - -/* Transparent modern scrollbar - pumpkin*/ -.board-color-pumpkin .board-canvas { - scrollbar-color: #e67e22f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-pumpkin .sidebar .sidebar-content { - scrollbar-color: #e67e22f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-pumpkin .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-pumpkin .list-body { - margin-top: 8px; -} - -/* === END Pumpkin THEME === */ - -/* =============== -THEME - Moderate Pink -=================*/ - .board-color-moderatepink#header, .board-color-moderatepink.sk-spinner div, .board-backgrounds-list .board-color-moderatepink.background-box, @@ -680,35 +502,6 @@ THEME - Moderate Pink .board-color-moderatepink#header-quick-access ul li.current { border-bottom: 4px solid #d77ba7; } - -/* Transparent modern scrollbar - moderatepink*/ -.board-color-moderatepink .board-canvas { - scrollbar-color: #cd5a91f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-moderatepink .sidebar .sidebar-content { - scrollbar-color: #cd5a91f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-moderatepink .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-moderatepink .list-body { - margin-top: 8px; -} - -/* === END Moderatepink THEME === */ - -/* =============== -THEME - Strong Cyan -=================*/ - .board-color-strongcyan#header, .board-color-strongcyan.sk-spinner div, .board-backgrounds-list .board-color-strongcyan.background-box, @@ -781,35 +574,6 @@ THEME - Strong Cyan .board-color-strongcyan#header-quick-access ul li.current { border-bottom: 4px solid #0adbff; } - -/* Transparent modern scrollbar - strongcyan*/ -.board-color-strongcyan .board-canvas { - scrollbar-color: #00aeccf2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-strongcyan .sidebar .sidebar-content { - scrollbar-color: #00aeccf2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-strongcyan .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-strongcyan .list-body { - margin-top: 8px; -} - -/* === END Strongcyan THEME === */ - -/* =============== -THEME - Lime Green -=================*/ - .board-color-limegreen#header, .board-color-limegreen.sk-spinner div, .board-backgrounds-list .board-color-limegreen.background-box, @@ -882,35 +646,6 @@ THEME - Lime Green .board-color-limegreen#header-quick-access ul li.current { border-bottom: 4px solid #6fcc89; } - -/* Transparent modern scrollbar - limegreen*/ -.board-color-limegreen .board-canvas { - scrollbar-color: #4bbf6bf2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-limegreen .sidebar .sidebar-content { - scrollbar-color: #4bbf6bf2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-limegreen .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-limegreen .list-body { - margin-top: 8px; -} - -/* === END Limegreen THEME === */ - -/* =============== -THEME - Dark -=================*/ - .board-color-dark#header, .board-color-dark.sk-spinner div, .board-backgrounds-list .board-color-dark.background-box, @@ -924,7 +659,6 @@ THEME - Dark border-radius: 7px; padding: 10px 10px 4px 10px; box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.15); - background-color: rgb(255 255 255 / 90%); } .board-color-dark button[type=submit].primary, .board-color-dark input[type=submit].primary, @@ -984,12 +718,7 @@ THEME - Dark .board-color-dark#header-quick-access ul li.current { border-bottom: 4px solid #476483; } - -/* Board Wrapper background fix for dark theme */ -.board-color-dark.board-wrapper { - background-color: #2c3e50; -} - +.board-color-dark .ui-sortable, .board-color-dark .swimlane, .board-color-dark .swimlane >.swimlane-header-wrap, .board-color-dark .swimlane >.list.js-list, @@ -1086,35 +815,6 @@ THEME - Dark background-color: #ccc; color: #222; } - -/* Transparent modern scrollbar - dark*/ -.board-color-dark .board-canvas { - scrollbar-color: #f2f2f2f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-dark .sidebar .sidebar-content { - scrollbar-color: #f2f2f2f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-dark .list { - border-left: none; /* Remove this property to bring back lines in-between columns if needed*/ - padding: 0px 1px 8px 1px; /* Improves spacing between columns due to no borders, 8px padding at bottom to separate horizontal scrollbar/lists */ -} - -.board-color-dark .list-body { - margin-top: 8px; -} - -/* === END Dark THEME === */ - -/* =============== -THEME - Relax -=================*/ - .board-color-relax#header, .board-color-relax.sk-spinner div, .board-backgrounds-list .board-color-relax.background-box, @@ -1187,7 +887,7 @@ THEME - Relax .board-color-relax#header-quick-access ul li.current { border-bottom: 4px solid #3dd37e; } -.board-color-relax .board-wrapper { +.board-color-relax .ui-sortable { background-color: #a7e366; } .board-color-relax .list-header { @@ -1216,35 +916,6 @@ THEME - Relax font-weight: bold; font-size: 11pt; } - -/* Transparent modern scrollbar - relax*/ -.board-color-relax .board-canvas { - scrollbar-color: #fffffff2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-relax .sidebar .sidebar-content { - scrollbar-color: #a7e366 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-relax .list { - border-left: none; - /* padding-bottom: 8px; - Removed to get rid of grey bars for relax theme */ -} - -.board-color-relax .list-body { - margin-top: 8px; -} - -/* === END Relax THEME === */ - -/* =============== -THEME - Corteza -=================*/ - .board-color-corteza#header, .board-color-corteza.sk-spinner div, .board-backgrounds-list .board-color-corteza.background-box, @@ -1317,35 +988,9 @@ THEME - Corteza .board-color-corteza#header-quick-access ul li.current { border-bottom: 4px solid #76a3b6; } - -/* Transparent modern scrollbar - corteza*/ -.board-color-corteza .board-canvas { - scrollbar-color: #568ba2f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-corteza .sidebar .sidebar-content { - scrollbar-color: #568ba2f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-corteza .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-corteza .list-body { - margin-top: 8px; -} - -/* === END Corteza THEME === */ - -/* =============== -THEME - Clear Blue -=================*/ - +/* + Alternate "Clear" Styling +*/ .board-color-clearblue.sk-spinner div, .board-backgrounds-list .board-color-clearblue.background-box, .board-list .board-color-clearblue a { @@ -1409,7 +1054,7 @@ THEME - Clear Blue .board-color-clearblue .toggle-switch:checked ~ .toggle-label:after { background-color: #197ddc; } -.board-color-clearblue.board-wrapper { +.board-color-clearblue .board-canvas { background: linear-gradient(135deg, #499bea 0%, #00aecc 100%); } .board-color-clearblue .swimlane { @@ -1417,7 +1062,7 @@ THEME - Clear Blue } .board-color-clearblue .swimlane .list:first-child { min-width: 20px; - margin-left: 10px; /* Added 10px margin left to stop lists being butted up against the edge of the screen */ + margin-left: 0px; border-left: none; } .board-color-clearblue .swimlane .list:nth-child { @@ -1451,7 +1096,7 @@ THEME - Clear Blue color: rgba(0,0,0,0.6); } .board-color-clearblue .list-header { - background-color: rgb(255 255 255 / 68%); + background-color: rgba(255,255,255,0.25); border-radius: 14px 14px 0 0; } .board-color-clearblue .list-header:not([class*="list-header-"]) { @@ -1545,7 +1190,7 @@ THEME - Clear Blue .board-color-clearblue .list-body .open-minicard-composer { color: rgba(0,0,0,0.3); } -.board-color-clearblue .swimlane.ui-sortable-helper { +.board-color-clearblue .swinlane.ui-sortable-helper { transform: rotate(0deg); } .board-color-clearblue .swimlane .swimlane-header-wrap { @@ -1579,40 +1224,9 @@ THEME - Clear Blue cursor: -webkit-grabbing; cursor: grabbing; } - -/* Transparent modern scrollbar - clearblue*/ -.board-color-clearblue .board-canvas { - scrollbar-color: #ffffffdb #ffffff00; - scrollbar-width: thin; -} - -.board-color-clearblue .list-body { - scrollbar-width: thin; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-clearblue .sidebar .sidebar-content { - scrollbar-color: #00aecc #ffffff00; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-clearblue .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-clearblue .list-body { - margin-top: 8px; -} - -/* === END Clearblue THEME === */ - -/* =============== -THEME - Natural -=================*/ - +/* + Alternate "Natural" Styling +*/ .board-color-natural#header, .board-color-natural.sk-spinner div, .board-backgrounds-list .board-color-natural.background-box, @@ -1688,41 +1302,15 @@ THEME - Natural .board-color-natural#header-quick-access { background-color: #2d392b; } -.board-color-natural.board-wrapper { +.board-color-natural .ui-sortable { background-color: #dedede; } .board-color-natural .swimlane .swimlane-header-wrap { background-color: #c2c0ab; } - -/* Transparent modern scrollbar - natural*/ -.board-color-natural .board-canvas { - scrollbar-color: #596557f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-natural .sidebar .sidebar-content { - scrollbar-color: #596557f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-natural .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-natural .list-body { - margin-top: 8px; -} - -/* === END Natural THEME === */ - -/* =============== -THEME - Modern -=================*/ - +/* + Alternate "Modern" Styling +*/ .board-color-modern#header, .board-color-modern.sk-spinner div, .board-backgrounds-list .board-color-modern.background-box, @@ -1845,7 +1433,7 @@ THEME - Modern height: 21px; background: #f7f7f7; } -.board-color-modern.board-wrapper { +.board-color-modern .board-canvas { background: #f5f5f5; } .board-color-modern .swimlane { @@ -1888,7 +1476,7 @@ THEME - Modern color: #222; } .board-color-modern .list-header { - background: #f5f5f5f2; /*Added background colour same colour as base board background, prevents poor text visibility when bgd image applied*/ + background: none; } .board-color-modern .list-header .list-header-name { /* font-family: Poppins; */ @@ -1958,7 +1546,7 @@ THEME - Modern .board-color-modern .pop-over-list li>a .sub-name { margin-bottom: 8px; } -.board-color-modern .sidebar { +.board-color-modern .sidebar .sidebar-shadow { box-shadow: 0 0 60px rgba(0,0,0,0.2); } .board-color-modern .board-color-modern section#notifications-drawer { @@ -1981,35 +1569,9 @@ THEME - Modern .board-color-modern section#notifications-drawer .header .toggle-read { top: 18px; } - -/* Transparent modern scrollbar - modern*/ -.board-color-modern .board-canvas { - scrollbar-color: #333333f2 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-modern .sidebar .sidebar-content { - scrollbar-color: #333333f2 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-modern .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-modern .list-body { - margin-top: 8px; -} - -/* === END Modern THEME === */ - -/* =============== -THEME - Modern Dark -=================*/ - +/* + Alternate "Modern Dark" Styling +*/ .board-color-moderndark#header, .board-color-moderndark.sk-spinner div, .board-backgrounds-list .board-color-moderndark.background-box, @@ -2128,11 +1690,6 @@ THEME - Modern Dark padding: 4px; font-size: 14px; } -@media screen and (max-width: 800px) { - .board-color-moderndark#header-quick-access { - padding: 0; - } -} .board-color-moderndark#header-quick-access .allBoards { padding: 5px 10px 0 10px; } @@ -2169,7 +1726,7 @@ THEME - Modern Dark line-height: 0.8em; padding-top: 10px; } -.board-color-moderndark.board-wrapper { +.board-color-moderndark .board-canvas { background: #2a2a2a; } .board-color-moderndark .swimlane .swimlane-header-wrap { @@ -2228,11 +1785,7 @@ THEME - Modern Dark } @media screen and (max-width: 800px) { .board-color-moderndark .list-header .list-header-name { - line-height: unset; - padding-top: 10px; - } - .board-color-moderndark .list-header-black, .board-color-moderndark .mini-list { - border-bottom: 0; + line-height: 40px; } } @media screen and (min-width: 801px) { @@ -2244,6 +1797,7 @@ THEME - Modern Dark } } .board-color-moderndark .list-header .list-header-menu { + padding: 10px; top: 0; } .board-color-moderndark .list-header .list-header-plus-top { @@ -2340,25 +1894,22 @@ THEME - Modern Dark } @media screen and (max-width: 800px) { .board-color-moderndark .card-details { - width: 94%; + width: 98%; } - .board-color-moderndark .card-details-popup { - padding: 0; + .card-details-popup { + padding: 0px; } - .board-color-moderndark .card-details-left, .board-color-moderndark .card-details-right { - padding: 0px 20px; + .card-details-left, .card-details-right { + padding: 0px 10px; } - .board-color-moderndark .card-details .card-details-header .card-details-menu-mobile-web { + .card-details .card-details-header .card-details-menu-mobile-web { margin-right: 0; } - .board-color-moderndark .pop-over > .content-wrapper > .popup-container-depth-0 > .content { - width: calc(100% - 20px); - } } @media screen and (min-width: 801px) { .board-color-moderndark .card-details { - position: fixed; - top: 82px; + position: absolute; + top: 30px; left: calc(50% - 384px); width: 768px; max-height: calc(100% - 60px); @@ -2431,7 +1982,7 @@ THEME - Modern Dark background-color: #ccc; color: #222; } -.board-color-moderndark .sidebar { +.board-color-moderndark .sidebar .sidebar-shadow { background-color: #222; box-shadow: -10px 0 5px -10px #444; border-left: 1px solid #333; @@ -2468,38 +2019,6 @@ THEME - Modern Dark .pop-over.board-color-moderndark .pop-over-list li > a:hover { background-color: rgba(255,255,255,0.2); } - -/* Transparent moderndark scrollbar - moderndark*/ -.board-color-moderndark .board-canvas { - scrollbar-width: thin; - scrollbar-color: #343434f2 #999999f2; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-moderndark .sidebar .sidebar-content { - scrollbar-width: thin; - scrollbar-color: #343434f2 #999999f2; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-moderndark .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-moderndark .list-body { - margin-top: 8px; -} - -/* === END ModernDark THEME === */ - - -/* =============== -THEME - Exodark -=================*/ - .board-color-exodark#header, .board-color-exodark.sk-spinner div, .board-backgrounds-list .board-color-exodark.background-box, @@ -2580,7 +2099,7 @@ THEME - Exodark color: #fff !important; } */ -.board-color-exodark.board-wrapper { +.board-color-exodark .board-canvas { background: #222; /* font-family: Poppins; */ } @@ -2591,12 +2110,13 @@ THEME - Exodark margin: 10px; color: #fff; border-radius: 15px; - background-color: #1c1c1c; + background: #222; + box-shadow: inset 15px 15px 37px #1c1c1c, inset -15px -15px 37px #282828; border: none; } .board-color-exodark .swimlane .list:first-child { min-width: 20px; - margin-left: 10px; /*Added 10px margin to prevent butting up against edge of screen */ + margin-left: 0px; border-left: none; } .board-color-exodark .swimlane .list:nth-child { @@ -2648,9 +2168,6 @@ THEME - Exodark background: #2b2b2b !important; color: #fff; } -.board-color-exodark .card-details .comment-text { - color:#2b2b2b -} /*Fixes issue with comment text colour blending into background*/ .board-color-exodark .card-details .card-details-header { background: #2b2b2b; color: #fff; @@ -2723,1467 +2240,3 @@ THEME - Exodark background: #2b2b2b; color: #fff; } - -/* Transparent modern scrollbar - Exodark*/ -.board-color-exodark .list-body { - scrollbar-color: #e4e4e4d4 #202020ba; -} - -.board-color-exodark .list { - overflow: hidden; -} - -.board-color-exodark .board-canvas { - scrollbar-color: #e4e4e4d4 #202020ba; -} - -/* Apply scrollbar to sidebar content*/ -.board-color-exodark .sidebar .sidebar-content { - scrollbar-color: #e4e4e4d4 #202020ba; -} - -/* === END Exodark THEME === */ - -/* =============== -THEME - Clean Dark -=================*/ - -.board-color-cleandark#header ul li, -.board-color-cleandark#header-quick-access ul li { - color: rgba(255, 255, 255, 50%); - font-size: 16px; - font-weight: 400; - line-height: 24px; -} - -.board-color-cleandark#header-main-bar h1 { - font-size: 16px; - font-weight: 500; - line-height: 24px !important; - color: rgba(255, 255, 255, 1); -} - -.board-color-cleandark#header ul li.current, -.board-color-cleandark#header-quick-access ul li.current { - color: rgba(255, 255, 255, 85%); -} - -.board-color-cleandark .swimlane-header { - font-size: 16px; - font-weight: 500; - line-height: 24px; - color: rgba(255, 255, 255, 1); -} - -.board-color-cleandark.board-wrapper { - background: #0A0A14; -} - -.board-color-cleandark .sidebar { - background: rgba(35, 35, 43, 1) !important; - box-shadow: none; -} - -.board-color-cleandark .sidebar hr { - background:rgba(255, 255, 255, 0.05); -} - -.board-color-cleandark .sidebar .tab-item { - border-radius: 16px; - padding: 4px 12px 4px 12px; - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 0.85); - background: rgba(57, 57, 71, 1); -} - -.board-color-cleandark .sidebar .tab-item.active { - background: rgba(255, 255, 255, 1); - color: rgba(10, 10, 20, 1); - border: none; - padding: 4px 12px 4px 12px !important; -} - -.board-color-cleandark .sidebar .tabs-content-container { - border: none; -} - -.board-color-cleandark .card-details { - background: #23232B; - border-radius: 20px; - box-shadow: none; -} - -.board-color-cleandark .card-details-item a { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 0.5); -} - -.board-color-cleandark .add-assignee { - box-shadow: none !important; -} - -.board-color-cleandark .add-assignee:hover { - background: #444455; - border-radius: 8px; -} - -.board-color-cleandark .add-checklist-top { - display: none !important; -} - -.board-color-cleandark .add-checklist { - padding: 8px; - width: min-content !important; -} - -.board-color-cleandark .add-checklist:hover { - background: #444455 !important; - border-radius: 12px !important; -} - -.board-color-cleandark .add-checklist:hover i { - color: #FFFFFF !important; -} - -.board-color-cleandark .add-assignee:hover i { - color: #FFFFFF !important; -} - -.board-color-cleandark .card-time.card-label-green { - background: #009B64; - width: min-content; - color: #FFFFFF; - padding-left: 8px; - padding-right: 8px; - border-radius: 8px; - margin-left: 4px; -} - -.board-color-cleandark .card-details hr { - background: rgba(255, 255, 255, 0.05); -} - -.board-color-cleandark .card-details-canvas { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 0.85); -} - -.board-color-cleandark.pop-over { - border-radius: 12px; - border: none; - background: rgba(46, 46, 57, 1); -} - -.board-color-cleandark.pop-over .pop-over-list, -.board-color-cleandark.pop-over .content { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 1); -} - -.board-color-cleandark.pop-over .pop-over-list a:hover { - background: #393947 !important; -} - -.board-color-cleandark .member { - box-shadow: none !important; -} - -.board-color-cleandark .add-member:hover { - background: #444455; - border-radius: 8px; -} - -.board-color-cleandark .add-member:hover i { - color: #FFFFFF !important; -} - -.board-color-cleandark .add-label { - box-shadow: none !important; -} - -.board-color-cleandark .add-label:hover { - background: #444455; - border-radius: 8px; -} - -.board-color-cleandark .add-label:hover i { - color: #FFFFFF !important; -} - -.board-color-cleandark.pop-over .content kbd { - background: rgba(46, 46, 57, 1); -} - -.board-color-cleandark .full-name { - font-size: 16px; - font-weight: 500; - line-height: 24px; - - color: rgba(255, 255, 255, 0.85); -} - -.board-color-cleandark .username { - font-size: 16px; - font-weight: 400; - line-height: 24px; - - color: rgba(255, 255, 255, 0.7); -} - -.board-color-cleandark .attachment-item:hover { - background: rgba(46, 46, 57, 1); -} - -.board-color-cleandark .checklist { - background: none; - color: #FFFFFF; -} - -.board-color-cleandark .checklist-item { - background: none; -} - -.board-color-cleandark .checklist-item:hover { - background: rgba(46, 46, 57, 1) !important; -} - -.board-color-cleandark .add-checklist-item { - width: min-content !important; - padding: 8px; -} - -.board-color-cleandark .add-checklist-item:hover { - background: #444455 !important; - border-radius: 12px !important; -} - -.board-color-cleandark .add-checklist-item:hover i { - color: #FFFFFF !important; -} - -.board-color-cleandark .add-attachment { - border-radius: 12px; -} - -.board-color-cleandark .add-attachment:hover i { - color: #FFFFFF !important; -} - -.board-color-cleandark .attachment-actions i, -.board-color-cleandark .attachment-actions a { - font-size: 1em !important; -} - -.board-color-cleandark .activity-desc { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 0.5); -} - -.board-color-cleandark .activity-desc .activity-member { - color: rgba(255, 255, 255, 0.85); -} - -.board-color-cleandark .comments .comment .comment-desc .comment-text { - background: transparent; -} - -.board-color-cleandark .activity-checklist, -.board-color-cleandark .activity-comment { - background: none !important; - color: #FFFFFF; - border: 1px solid rgba(0, 155, 100, 1); - border-radius: 12px !important; -} - -.board-color-cleandark button[type=submit].primary, -.board-color-cleandark input[type=submit].primary { - font-size: 16px; - font-weight: 400; - line-height: 24px; - border-radius: 12px; - padding: 6px 12px 6px 12px; - background: #FFFFFF; - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleandark textarea { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 1); - background: rgba(57, 57, 71, 1) !important; - border: none !important; - border-radius: 12px !important; -} - -.board-color-cleandark textarea::placeholder { - color: rgba(255, 255, 255, 0.85) !important; -} - -.board-color-cleandark input { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 0.85) !important; - background: rgba(57, 57, 71, 1) !important; - border-radius: 12px !important; - border: none !important; -} - -.board-color-cleandark input::placeholder { - color: rgba(255, 255, 255, 1) !important; -} - -.board-color-cleandark select { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 0.85); - background: rgba(57, 57, 71, 1); - border-radius: 12px; - border: none; -} - -.board-color-cleandark button.primary { - padding: 6px 12px 6px 12px; - border-radius: 12px; - border: none; - background: #FFFFFF; - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleandark button.primary:hover { - background: rgba(255, 255, 255, 0.85); -} - -.board-color-cleandark button.negate { - padding: 6px 12px 6px 12px; - border-radius: 12px; - border: none; - background: #cc003a; - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: #FFFFFF; -} - -.board-color-cleandark button.negate:hover { - background: rgba(204, 0, 58, 0.77); -} - -.board-color-cleandark .card-details .checklist-item { - display: flex; - align-items: center; - gap: 4px; -} - -.board-color-cleandark .card-details .check-box.materialCheckBox { - border-radius: 4px; - border: none; - background: #393947; - height: 24px; - width: 24px; -} - -.board-color-cleandark .card-details .check-box.materialCheckBox.is-checked { - border-bottom: 2px solid #FFFFFF; - border-right: 2px solid #FFFFFF; - width: 11px; - height: 19px; - border-radius: 0; - background: none; -} - -.board-color-cleandark .sidebar .sidebar-content h3, -.board-color-cleandark .sidebar .sidebar-content h2, -.board-color-cleandark .sidebar .sidebar-content h1 { - color: #FFFFFF; -} - -.board-color-cleandark #cards span { - color: #FFFFFF; -} - -.board-color-cleandark #cards .materialCheckBox { - border-radius: 4px; - border: none; - background: #393947; - height: 18px; - width: 18px; -} - -.board-color-cleandark .sidebar-list-item-description { - color: #FFFFFF; -} - -.board-color-cleandark #cards .materialCheckBox.is-checked { - border-bottom: 2px solid #FFFFFF; - border-right: 2px solid #FFFFFF; - width: 5px; - height: 13px; - border-radius: 0; - background: none; - margin-left: 3px; - margin-top: 3px; -} - -.board-color-cleandark .allBoards { - white-space: nowrap; -} - -.board-color-cleandark#header-quick-access ul.header-quick-access-list li { - display: inline-flex; - align-items: center; - padding-bottom: 4px; - padding-top: 4px; - margin-right: 10px; -} - -.board-color-cleandark#header-quick-access ul.header-quick-access-list { - display: flex; - align-items: center; -} - -/* Transparent modern scrollbar - cleandark*/ -.board-color-cleandark .board-canvas { - scrollbar-color: #23232be6 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-cleandark .sidebar .sidebar-content { - scrollbar-color: #ff6d00 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-cleandark .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-cleandark .list-body { - margin-top: 8px; -} - -/* =============== -THEME - Clean Light -=================*/ -/* Please note Clean Light theme elements also contain references to some cleandark theme elements so if unable to find code you're looking for under CleanDark it might be here. This should probably be cleaned up*/ - -.board-color-cleanlight { - background: #E0E0E0; -} - -.board-color-cleanlight .board-header-btn { - color: rgba(10, 10, 20, 0.85) !important; -} - -.board-color-cleanlight .board-header-btn i { - color: rgba(10, 10, 20, 0.85) !important; -} - -.board-color-cleanlight .board-header-btns a { - color: rgba(10, 10, 20, 0.85) !important; -} - -.board-color-cleanlight .header-user-bar-name { - color: rgba(10, 10, 20, 0.85) !important; -} - -.board-color-cleanlight#header ul li, -.board-color-cleanlight#header-quick-access ul li { - color: rgba(10, 10, 20, 0.5) !important; - font-size: 16px; - font-weight: 400; - line-height: 24px; -} - -.board-color-cleanlight#header ul li:hover, -.board-color-cleanlight#header-quick-access ul li:hover { - background: rgba(190, 190, 190, 1) !important; - border-radius: 8px; - color: rgba(10, 10, 20, 0.5) !important; -} - -.board-color-cleanlight #header-main-bar h1 { - font-size: 16px; - font-weight: 500; - line-height: 24px !important; - color: rgba(10, 10, 20, 1) !important; -} - -.board-color-cleanlight#header ul li.current, -.board-color-cleanlight#header-quick-access ul li.current { - color: rgba(10, 10, 20, 0.85) !important; -} - -.board-color-cleanlight .swimlane-header { - font-size: 16px; - font-weight: 500; - line-height: 24px; - color: rgba(10, 10, 20, 1); -} - -.board-color-cleanlight.board-wrapper { - background: #FFFFFF; -} - -.board-color-cleanlight .fa { - color: rgba(10, 10, 20, 1); -} - -.board-color-cleandark .fa { - color: #FFFFFF; -} - -/*fdsfdsfdsfdsfsdddddddddd */ - -.board-color-cleanlight .list, -.board-color-cleandark .list { - background: none; - border-left: none; -} - -.board-color-cleanlight .list .list-header, -.board-color-cleandark .list .list-header { - border-bottom: none; - display: flex; - justify-content: space-between; - align-items: center; - font-size: 16px; - background: none; -} - -.board-color-cleanlight .list .list-header div:has(.list-header-name), -.board-color-cleandark .list .list-header div:has(.list-header-name) { - display: contents; -} - -.board-color-cleanlight .list .list-header-name { - color: rgba(10, 10, 20, 1); -} - -.board-color-cleandark .list .list-header-name { - color: #FFFFFF; -} - -.board-color-cleanlight .list .list-header .list-header-menu, -.board-color-cleandark .list .list-header .list-header-menu { - display: flex; - gap: 8px; - align-items: center; -} - -.board-color-cleanlight .list .list-header .list-header-menu .js-open-list-menu , -.board-color-cleandark .list .list-header .list-header-menu .js-open-list-menu { - font-size: 16px !important; -} - -.board-color-cleanlight .list .list-header .list-header-menu a, -.board-color-cleandark .list .list-header .list-header-menu a { - margin: 0 !important; -} - -.board-color-cleanlight .list .list-header .list-header-menu .list-header-plus-top, -.board-color-cleandark .list .list-header .list-header-menu .list-header-plus-top { - color: #FFFFFF; - background: #FF6D00; - padding: 8px; - border-radius: 12px; - font-size: 16px !important; -} - -.board-color-cleanlight .list .list-header .list-header-menu .list-header-plus-top:hover, -.board-color-cleandark .list .list-header .list-header-menu .list-header-plus-top:hover { - background: #d25b02; -} - -.board-color-cleanlight .list .list-header .list-header-menu .js-collapse, -.board-color-cleandark .list .list-header .list-header-menu .js-collapse { - display: none; -} - -.board-color-cleanlight .list-header-add, -.board-color-cleandark .list-header-add { - border-radius: 12px; - margin-top: 18px; - padding: 8px; - margin-right: 8px; - display: flex; - align-items: center; - justify-content: center; - margin-left: 10px; -} - -.board-color-cleanlight .list-header-add:hover { - background: rgba(227, 227, 230, 1); - color: rgba(10, 10, 20, 1); - border-radius: 8px; - cursor: pointer; -} - -.board-color-cleandark .list-header-add:hover { - background: rgba(255, 255, 255, 0.1); - color: #FFFFFF; - border-radius: 8px; - cursor: pointer; -} - -.board-color-cleanlight .list-header-add a:hover i { - color: #FFFFFF !important; -} - -.board-color-cleandark .list-header-add { - background: #23232B !important; - color: #FFFFFF !important; -} - -.board-color-cleanlight .card-label, -.board-color-cleandark .card-label { - border-radius: 18px; - margin-top: 6px; - margin-right: 8px; - border: none; - padding: 4px 12px; -} - -.board-color-cleanlight .swimlane, -.board-color-cleandark .swimlane { - background: none; -} - -.board-color-cleanlight .swimlane-height-apply, -.board-color-cleandark .swimlane-height-apply { - border-radius: 12px !important; -} - -.board-color-cleandark .swimlane-height-apply { - background: #FFFFFF !important; - color: #0A0A14 !important; -} - -.board-color-cleanlight .swimlane-height-apply { - background: rgba(23, 23, 28, 1) !important; - color: rgba(255, 255, 255, 0.85) !important; -} - -.board-color-cleandark .swimlane-height-apply:hover { - background: rgba(255, 255, 255, 0.85) !important; -} - -.board-color-cleanlight .swimlane-height-apply:hover { - background: rgba(227, 227, 230, 1) !important; -} - -.board-color-cleanlight .swimlane .swimlane-header-wrap .swimlane-header, -.board-color-cleandark .swimlane .swimlane-header-wrap .swimlane-header, -.board-color-cleanlight .swimlane .swimlane-header-wrap .swimlane-header-menu .fa, -.board-color-cleandark .swimlane .swimlane-header-wrap .swimlane-header-menu .fa { - font-size: 16px !important; -} - -.board-color-cleanlight .swimlane .swimlane-header-wrap { - background-color: #F1F1F3; -} - -.board-color-cleandark .swimlane .swimlane-header-wrap { - background-color: #2E2E39; -} - -.board-color-cleanlight .swimlane .swimlane-header-wrap .swimlane-header-plus-icon, -.board-color-cleandark .swimlane .swimlane-header-wrap .swimlane-header-plus-icon { - margin-left: 14px; -} - -.board-color-cleanlight .swimlane .swimlane-header-wrap .list-composer, -.board-color-cleandark .swimlane .swimlane-header-wrap .list-composer { - display: flex; - gap: 12px; - margin-left: 20px; -} - -.board-color-cleanlight .swimlane .swimlane-header-wrap .swimlane-header .viewer p, -.board-color-cleandark .swimlane .swimlane-header-wrap .swimlane-header .viewer p { - margin-bottom: 0; -} - -.board-color-cleanlight .js-toggle-desktop-drag-handles, -.board-color-cleandark .js-toggle-desktop-drag-handles { - display: none; -} - -.board-color-cleanlight .sidebar { - background: rgba(248, 248, 249, 1) !important; - box-shadow: none; -} - -.board-color-cleanlight .sidebar hr { - background: rgba(23, 23, 28, 0.05); -} - -.board-color-cleanlight .sidebar .tab-item { - border-radius: 16px; - padding: 4px 12px 4px 12px; - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.85); - background: rgba(234, 234, 237, 1); -} - -.board-color-cleanlight .sidebar .tab-item.active { - background: rgba(23, 23, 28, 1); - color: rgba(255, 255, 255, 1); - border: none; - padding: 4px 12px 4px 12px !important; -} - -.board-color-cleanlight .sidebar .tabs-content-container { - border: none; -} - -.board-color-cleanlight .card-details { - background: rgba(248, 248, 249, 1); - border-radius: 20px; - box-shadow: none; -} - -.board-color-cleanlight .card-details-item a { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.5); -} - -.board-color-cleanlight .card-details-header, -.board-color-cleandark .card-details-header { - font-size: 24px !important; - font-weight: 600; - line-height: 28px; - border-bottom: none !important; - padding: 12px 20px !important; -} - -.board-color-cleanlight .card-details-header { - background: rgba(241, 241, 243, 1); - color: rgba(10, 10, 20, 1); -} - -.board-color-cleandark .card-details-header { - background: #2E2E39 !important; - color: rgba(255, 255, 255, 1); -} - -.board-color-cleanlight .card-details-header .card-details-title, -.board-color-cleandark .card-details-header .card-details-title { - font-size: 24px !important; -} - -.board-color-cleanlight .card-details .card-details-item-title, -.board-color-cleandark .card-details .card-details-item-title { - display: flex; - gap: 8px; - align-items: center; - - font-size: 16px; - font-weight: 500; - line-height: 24px; -} - -.board-color-cleanlight .card-details .card-details-item-title { - color: rgba(10, 10, 20, 1); -} - -.board-color-cleandark .card-details .card-details-item-title { - color: rgba(255, 255, 255, 1); -} - -.board-color-cleanlight .add-assignee { - box-shadow: none !important; -} - -.board-color-cleanlight .add-assignee:hover { - background: rgba(227, 227, 230, 1); - border-radius: 8px; -} - -.board-color-cleanlight .add-assignee:hover i { - color: #000000 !important; -} - -.board-color-cleanlight .add-checklist-top { - display: none !important; -} - -.board-color-cleanlight .add-checklist { - padding: 8px; - width: min-content !important; -} - -.board-color-cleanlight .add-checklist:hover { - background: rgba(227, 227, 230, 1) !important; - border-radius: 12px !important; -} - -.board-color-cleanlight .add-checklist:hover i { - color: #000000 !important; -} - -.board-color-cleanlight .card-time.card-label-green { - background: #009B64; - width: min-content; - color: #FFFFFF; - padding-left: 8px; - padding-right: 8px; - border-radius: 8px; - margin-left: 4px; -} - -.board-color-cleanlight .card-details hr { - background: rgba(23, 23, 28, 0.05); -} - -.board-color-cleanlight .card-details-canvas { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.5); -} - -.board-color-cleanlight.pop-over { - border-radius: 12px; - border: none; - background: rgba(241, 241, 243, 1); -} - -.board-color-cleanlight.pop-over .header, -.board-color-cleandark.pop-over .header { - border-radius: 12px 12px 0 0; - border-bottom: none; - background: inherit; - - font-size: 16px; - font-weight: 500; - line-height: 24px; -} - -.board-color-cleanlight.pop-over .header { - color: rgba(10, 10, 20, 1); -} - - -.board-color-cleandark.pop-over .header { - color: rgba(255, 255, 255, 1);; -} - -.board-color-cleanlight.pop-over .pop-over-list, -.board-color-cleanlight.pop-over .content { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.8); -} - -.board-color-cleanlight.pop-over .pop-over-list a:hover { - background: #393947 !important; -} - -.board-color-cleanlight .member { - box-shadow: none !important; -} - -.board-color-cleanlight .add-member:hover { - background: rgba(227, 227, 230, 1); - border-radius: 8px; -} - -.board-color-cleanlight .add-member:hover i { - color: #000000 !important; -} - -.board-color-cleanlight .add-label { - box-shadow: none !important; -} - -.board-color-cleanlight .add-label:hover { - background: rgba(227, 227, 230, 1); - border-radius: 8px; -} - -.board-color-cleanlight .add-label:hover i { - color: #000000 !important; -} - -.board-color-cleanlight.pop-over .content kbd { - background: rgba(180, 180, 180, 1); - border-radius: 8px; -} - -.board-color-cleanlight .full-name { - font-size: 16px; - font-weight: 500; - line-height: 24px; - - color: rgba(10, 10, 20, 0.85) !important; -} - -.board-color-cleanlight .username { - font-size: 16px; - font-weight: 400; - line-height: 24px; - - color: rgba(10, 10, 20, 0.5) !important; -} - -.board-color-cleanlight .attachment-item:hover { - background: rgba(227, 227, 230, 1); -} - -.board-color-cleanlight .checklist { - background: none; - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleanlight .checklist-item { - background: none; -} - -.board-color-cleanlight .checklist-item:hover { - background: rgba(227, 227, 230, 1) !important; -} - -.board-color-cleanlight .add-checklist-item { - width: min-content !important; - padding: 8px; -} - -.board-color-cleanlight .add-checklist-item:hover { - background: rgba(227, 227, 230, 1) !important; - border-radius: 12px !important; -} - -.board-color-cleanlight .add-checklist-item:hover i { - color: #000000 !important; -} - -.board-color-cleanlight .add-attachment { - background: rgba(248, 248, 249, 1) !important; - border-radius: 12px; - border-color: rgba(197, 197, 200, 1); -} - -.board-color-cleanlight .add-attachment:hover { - background: rgba(227, 227, 230, 1) !important; -} - -.board-color-cleanlight .add-attachment:hover i { - color: #000000 !important; -} - -.board-color-cleanlight .attachment-actions i, -.board-color-cleanlight .attachment-actions a { - font-size: 1em !important; -} - -.board-color-cleanlight .activity-desc { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.5); -} - -.board-color-cleanlight .activity-desc .activity-member { - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleanlight .activity-checklist, -.board-color-cleanlight .activity-comment { - background: none !important; - color: rgba(10, 10, 20, 0.85); - border: 1px solid rgba(0, 155, 100, 1); - border-radius: 12px !important; -} - -.board-color-cleanlight button[type=submit].primary, -.board-color-cleanlight input[type=submit].primary { - font-size: 16px; - font-weight: 400; - line-height: 24px; - border-radius: 12px; - padding: 6px 12px 6px 12px; - background: rgba(23, 23, 28, 1); - color: rgba(255, 255, 255, 0.85); -} - -.board-color-cleanlight input.primary { - font-size: 16px; - font-weight: 400; - line-height: 24px; - border-radius: 12px; - padding: 6px 12px 6px 12px; - background: rgba(23, 23, 28, 1) !important; - color: rgba(255, 255, 255, 0.85) !important; -} - -.board-color-cleanlight input.primary:hover { - background: #444455 !important; -} - -.board-color-cleanlight textarea { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.85); - background: rgba(234, 234, 237, 1); - border: none !important; - border-radius: 12px !important; -} - -.board-color-cleanlight textarea::placeholder { - color: rgba(10, 10, 20, 0.5) !important; -} - -.board-color-cleanlight textarea:focus, -.board-color-cleandark textarea:focus { - border: none !important; - box-shadow: none; -} - -.board-color-cleanlight input { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.85) !important; - background: rgba(234, 234, 237, 1) !important; - border-radius: 12px !important; - border: none !important; -} - -.board-color-cleanlight input::placeholder { - color: rgba(10, 10, 20, 0.5) !important; -} - -.board-color-cleanlight input:focus, -.board-color-cleandark input:focus { - border: none !important; - box-shadow: none !important; -} - -.board-color-cleanlight select { - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(10, 10, 20, 0.85); - background: rgba(234, 234, 237, 1); - border-radius: 12px; - border: none; -} - -.board-color-cleanlight button.primary { - padding: 6px 12px 6px 12px; - border-radius: 12px; - border: none; - background: rgba(23, 23, 28, 1); - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 0.85); -} - -.board-color-cleanlight button.primary:hover { - background: #444455; -} - -.board-color-cleanlight button.negate { - padding: 6px 12px 6px 12px; - border-radius: 12px; - border: none; - background: #cc003a; - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: #FFFFFF; -} - -.board-color-cleanlight button.negate:hover { - background: rgba(204, 0, 58, 0.77); -} - -.board-color-cleanlight .card-details .checklist-item { - display: flex; - align-items: center; - gap: 4px; -} - -.board-color-cleanlight .card-details .check-box.materialCheckBox { - border-radius: 4px; - border: none; - background: rgba(234, 234, 237, 1); - height: 24px; - width: 24px; -} - -.board-color-cleanlight .card-details .check-box.materialCheckBox.is-checked { - border-bottom: 2px solid #000000; - border-right: 2px solid #000000; - width: 11px; - height: 19px; - border-radius: 0; - background: none; -} - -.board-color-cleanlight .sidebar-list-item-description { - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleanlight .sidebar .sidebar-content h3, -.board-color-cleanlight .sidebar .sidebar-content h2, -.board-color-cleanlight .sidebar .sidebar-content h1 { - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleanlight #cards span { - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleanlight #cards .materialCheckBox { - border-radius: 4px; - border: none; - background: rgba(234, 234, 237, 1); - height: 18px; - width: 18px; -} - -.board-color-cleanlight #cards .materialCheckBox.is-checked { - border-bottom: 2px solid #000000; - border-right: 2px solid #000000; - width: 5px; - height: 13px; - border-radius: 0; - background: none; - margin-left: 3px; - margin-top: 3px; -} - -.board-color-cleanlight .allBoards { - white-space: nowrap; -} - -.board-color-cleanlight#header-quick-access, -.board-color-cleandark#header-quick-access { - padding: 10px 20px; - padding-top: 12px !important; - gap: 20px; -} - -.board-color-cleandark#header-quick-access { - background: #2E2E39 !important; -} - -.board-color-cleanlight#header-quick-access { - background: #F1F1F3 !important; - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleanlight#header-quick-access ul.header-quick-access-list li a .viewer, -.board-color-cleandark#header-quick-access ul.header-quick-access-list li a .viewer { - max-width: 400px; - text-overflow: ellipsis; - overflow: hidden; - display: inline-flex; - align-items: center; -} - -.board-color-cleanlight#header-quick-access ul.header-quick-access-list li a .viewer p, -.board-color-cleandark#header-quick-access ul.header-quick-access-list li a .viewer p { - margin-bottom: 0; - overflow: hidden; - text-overflow: ellipsis; -} - -.board-color-cleanlight#header-quick-access ul.header-quick-access-list li { - display: inline-flex; - align-items: center; - padding-bottom: 4px; - padding-top: 4px; - margin-right: 10px; -} - -.board-color-cleanlight#header-quick-access ul.header-quick-access-list { - display: flex; - align-items: center; -} - -.board-color-cleanlight #header-main-bar, -.board-color-cleanlight#header { - background: #F1F1F3 !important; - color: rgba(10, 10, 20, 0.85) !important; -} - -.board-color-cleandark #header-main-bar, -.board-color-cleandark#header { - background: #2E2E39 !important; - color: #FFFFFF; -} - -.board-color-cleanlight .list-body .open-minicard-composer, -.board-color-cleandark .list-body .open-minicard-composer { - display: none !important; -} - -.board-color-cleanlight .minicard, -.board-color-cleandark .minicard { - border-radius: 12px; - font-size: 16px; - font-weight: 400; - line-height: 24px; - padding: 12px; -} - -.board-color-cleanlight .minicard { - background: rgba(248, 248, 249, 1); - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleandark .minicard { - color: #FFFFFF; - background: #23232B; -} - -.board-color-cleanlight .minicard .minicard-details-menu, -.board-color-cleandark .minicard .minicard-details-menu { - font-size: 16px !important; -} - -.board-color-cleanlight .minicard .date, -.board-color-cleandark .minicard .date, -.board-color-cleanlight .minicard .end-date, -.board-color-cleandark .minicard .end-date { - font-size: 16px; - font-weight: 400; - line-height: 24px; - margin-bottom: 10px; -} - -.board-color-cleanlight .minicard .date a, -.board-color-cleandark .minicard .date a, -.board-color-cleanlight .minicard .end-date, -.board-color-cleandark .minicard .end-date, -.board-color-cleanlight .card-details .card-date, -.board-color-cleandark .card-details .card-date { - padding: 4px 8px 4px 8px; - font-size: 16px; - font-weight: 400; - line-height: 24px; - color: rgba(255, 255, 255, 1); -} - -.board-color-cleanlight .minicard .end-date, -.board-color-cleandark .minicard .end-date, -.board-color-cleanlight .minicard .due-date, -.board-color-cleandark .minicard .due-date, -.board-color-cleanlight .card-details .card-date, -.board-color-cleandark .card-details .card-date { - border-radius: 8px; -} - -.board-color-cleanlight .minicard .end-date, -.board-color-cleanlight .minicard .due-date, -.board-color-cleanlight .card-details .card-date { - background: rgba(227, 227, 230, 1); - color: rgba(10, 10, 20, 1) !important; -} - -.board-color-cleandark .minicard .end-date, -.board-color-cleandark .minicard .due-date, -.board-color-cleandark .card-details .card-date { - background: #444455; -} - -.board-color-cleandark .minicard .end-date:hover, -.board-color-cleandark .minicard .due-date:hover, -.board-color-cleandark .card-details .card-date:hover { - background: rgba(68, 68, 85, 0.73); -} - -.board-color-cleanlight .minicard .end-date:hover, -.board-color-cleanlight .minicard .due-date:hover, -.board-color-cleanlight .card-details .card-date:hover { - background: rgba(207, 207, 210, 1); -} - -.board-color-cleanlight .minicard .date .current, -.board-color-cleandark .minicard .date .current, -.board-color-cleanlight .minicard .current, -.board-color-cleandark .minicard .current, -.board-color-cleanlight .card-details .current, -.board-color-cleandark .card-details .current { - background: #009B64; - border-radius: 8px; - color: rgba(255, 255, 255, 1) !important; -} - -.board-color-cleandark .minicard .date .current:hover, -.board-color-cleanlight .minicard .date .current:hover, -.board-color-cleandark .minicard .current:hover, -.board-color-cleanlight .minicard .current:hover, -.board-color-cleandark .card-details .current:hover, -.board-color-cleanlight .card-details .current:hover { - background: rgba(0, 155, 100, 0.73); - color: rgba(255, 255, 255, 1) !important; -} - -.board-color-cleanlight .minicard .date .due, -.board-color-cleandark .minicard .date .due, -.board-color-cleanlight .minicard .due, -.board-color-cleandark .minicard .due, -.board-color-cleanlight .card-details .due, -.board-color-cleandark .card-details .due { - background: #CC003A; - border-radius: 8px; - color: rgba(255, 255, 255, 1) !important; -} - -.board-color-cleanlight .card-details .due:hover, -.board-color-cleanlight .minicard .date .due:hover, -.board-color-cleanlight .minicard .due:hover, -.board-color-cleandark .minicard .due:hover, -.board-color-cleandark .minicard .date .due:hover, -.board-color-cleandark .card-details .due:hover { - background: rgba(204, 0, 58, 0.73); - color: rgba(255, 255, 255, 1) !important; -} - -.board-color-cleanlight .minicard-assignees, -.board-color-cleandark .minicard-assignees { - border-bottom: none !important; -} - -.board-color-cleanlight .minicard-composer-textarea { - background: #f8f8f9 !important; -} - -.board-color-cleandark .minicard-composer-textarea { - background: #23232B !important; -} - -.board-color-cleanlight .minicard-composer:hover { - background: #f8f8f9 !important; -} - -.board-color-cleandark .minicard-composer:hover { - background: #23232B !important; -} - -.board-color-cleanlight .minicard .badges .badge.is-finished, -.board-color-cleandark .minicard .badges .badge.is-finished { - background: #009B64 !important; - border-radius: 8px; -} - -.board-color-cleanlight .minicard .badges .badge.is-finished .badge-icon { - color: #FFFFFF; -} - -.board-color-cleanlight .card-details-item-customfield:has(.checklist-item), -.board-color-cleandark .card-details-item-customfield:has(.checklist-item) { - display: flex !important; - align-items: center; - gap: 8px; -} - -.board-color-cleanlight .card-details-item-customfield:has(.checklist-item) div, -.board-color-cleandark .card-details-item-customfield:has(.checklist-item) div { - padding-right: 0 !important; -} - -.board-color-cleanlight .card-details .card-details-items .card-details-item.custom-fields, -.board-color-cleanlight .card-details .card-details-items .card-details-item.custom-fields { - margin-left: auto; - flex-grow: 0; - border-radius: 12px; -} - -.board-color-cleanlight .card-details-item-customfield:has(.checklist-item) h3, -.board-color-cleandark .card-details-item-customfield:has(.checklist-item) h3 { - width: min-content !important; - display: flex; - align-items: center; - gap: 8px; - margin: 0 !important; -} - -.board-color-cleanlight .new-description .fa, -.board-color-cleandark .new-description .fa { - display: none; -} - -.board-color-cleanlight .card-details-left .viewer p { - color: rgba(10, 10, 20, 0.85); -} - -.board-color-cleandark .card-details-left .viewer p { - color: #FFFFFF; -} - -.board-color-cleanlight .new-comment .fa, -.board-color-cleandark .new-comment .fa { - display: none; -} - -.board-color-cleanlight .pop-over-list li > a, -.board-color-cleandark .pop-over-list li > a { - font-weight: 500; -} - -.board-color-cleanlight .pop-over-list li > a i, -.board-color-cleandark .pop-over-list li > a i { - margin-right: 6px !important; -} - -.board-color-cleanlight .pop-over .quiet { - margin-left: 100px !important; -} - -.board-color-cleandark .minicard:hover:not(.minicard-composer), -.board-color-cleandark .is-selected .minicard, .draggable-hover-card .minicard { - background: #23232B; -} - -/* Transparent modern scrollbar - cleanlight*/ -.board-color-cleanlight .board-canvas { - scrollbar-color: #0a0a14d1 #e4e4e400; -} - - -/* Apply scrollbar to sidebar content*/ -.board-color-cleanlight .sidebar .sidebar-content { - scrollbar-color: #0a0a14d1 #e4e4e400; -} - -/* Remove margins in between columns/fix spacing */ - -.board-color-cleanlight .list { - border-left: none; - padding-bottom: 8px; -} - -.board-color-cleanlight .list-body { - margin-top: 8px; -} - -/* === END CleanDark/Light THEME === */ diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index 06cb0d549..a59b58c26 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -12,9 +12,8 @@ template(name="boardHeaderBar") if currentBoard if currentUser with currentBoard - if currentUser.isBoardAdmin - a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title) - i.fa.fa-pencil-square-o + a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title) + i.fa.fa-pencil-square-o a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}" title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}") diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index 01859ead5..7611e705a 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -1,12 +1,42 @@ import { ReactiveCache } from '/imports/reactiveCache'; import { TAPi18n } from '/imports/i18n'; -import dragscroll from '@wekanteam/dragscroll'; /* const DOWNCLS = 'fa-sort-down'; const UPCLS = 'fa-sort-up'; */ const sortCardsBy = new ReactiveVar(''); +Template.boardMenuPopup.events({ + 'click .js-rename-board': Popup.open('boardChangeTitle'), + 'click .js-custom-fields'() { + Sidebar.setView('customFields'); + Popup.back(); + }, + 'click .js-open-archives'() { + Sidebar.setView('archives'); + Popup.back(); + }, + 'click .js-change-board-color': Popup.open('boardChangeColor'), + 'click .js-change-language': Popup.open('changeLanguage'), + 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() { + const currentBoard = Utils.getCurrentBoard(); + currentBoard.archive(); + // XXX We should have some kind of notification on top of the page to + // confirm that the board was successfully archived. + FlowRouter.go('home'); + }), + 'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() { + const currentBoard = Utils.getCurrentBoard(); + Popup.back(); + Boards.remove(currentBoard._id); + FlowRouter.go('home'); + }), + 'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'), + 'click .js-import-board': Popup.open('chooseBoardSource'), + 'click .js-subtask-settings': Popup.open('boardSubtaskSettings'), + 'click .js-card-settings': Popup.open('boardCardSettings'), + 'click .js-minicard-settings': Popup.open('boardMinicardSettings'), +}); Template.boardChangeTitlePopup.events({ submit(event, templateInstance) { diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js index 69a29b3c2..23a9ce8b2 100644 --- a/client/components/boards/boardsList.js +++ b/client/components/boards/boardsList.js @@ -151,8 +151,8 @@ BlazeComponent.extendComponent({ } const currUser = ReactiveCache.getCurrentUser(); - let orgIdsUserBelongs = currUser?.orgIdsUserBelongs() || ''; - if (orgIdsUserBelongs) { + let orgIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.orgIdsUserBelongs() : ''; + if (orgIdsUserBelongs && orgIdsUserBelongs != '') { let orgsIds = orgIdsUserBelongs.split(','); // for(let i = 0; i < orgsIds.length; i++){ // query.$and[2].$or.push({'orgs.orgId': orgsIds[i]}); @@ -162,8 +162,8 @@ BlazeComponent.extendComponent({ query.$and[2].$or.push({ 'orgs.orgId': { $in: orgsIds } }); } - let teamIdsUserBelongs = currUser?.teamIdsUserBelongs() || ''; - if (teamIdsUserBelongs) { + let teamIdsUserBelongs = currUser !== undefined && currUser.teams !== 'undefined' ? currUser.teamIdsUserBelongs() : ''; + if (teamIdsUserBelongs && teamIdsUserBelongs != '') { let teamsIds = teamIdsUserBelongs.split(','); // for(let i = 0; i < teamsIds.length; i++){ // query.$or[2].$or.push({'teams.teamId': teamsIds[i]}); @@ -199,12 +199,15 @@ BlazeComponent.extendComponent({ }, boardMembers(boardId) { + let boardMembers = []; /* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214 const lists = ReactiveCache.getBoard(boardId) - const boardMembers = lists?.members.map(member => member.userId); - return boardMembers; + let members = lists.members + members.forEach(member => { + boardMembers.push(member.userId); + }); */ - return []; + return boardMembers; }, isStarred() { diff --git a/client/components/cards/attachments.jade b/client/components/cards/attachments.jade index 5e1d41da1..594452c2b 100644 --- a/client/components/cards/attachments.jade +++ b/client/components/cards/attachments.jade @@ -51,9 +51,8 @@ template(name="attachmentGallery") .attachment-gallery - if canModifyCard - a.attachment-item.add-attachment.js-add-attachment - i.fa.fa-plus.icon + a.attachment-item.add-attachment.js-add-attachment + i.fa.fa-plus.icon each attachments @@ -117,6 +116,8 @@ template(name="attachmentActionsPopup") | {{_ 'remove-background-image'}} else | {{_ 'add-background-image'}} + p.attachment-storage + | {{versions.original.storage}} if $neq versions.original.storage "fs" a.js-move-storage-fs diff --git a/client/components/cards/attachments.js b/client/components/cards/attachments.js index 391841602..48b100cfe 100644 --- a/client/components/cards/attachments.js +++ b/client/components/cards/attachments.js @@ -39,7 +39,7 @@ Template.attachmentGallery.events({ 'click .js-rename': Popup.open('attachmentRename'), 'click .js-confirm-delete': Popup.afterConfirm('attachmentDelete', function() { Attachments.remove(this._id); - Popup.back(); + Popup.back(2); }), }); @@ -501,7 +501,7 @@ BlazeComponent.extendComponent({ if (name === DOMPurify.sanitize(name)) { Meteor.call('renameAttachment', this.data()._id, name); } - Popup.back(); + Popup.back(2); }, } ] diff --git a/client/components/cards/cardCustomFields.jade b/client/components/cards/cardCustomFields.jade index cefeaac88..e8f69ab1b 100644 --- a/client/components/cards/cardCustomFields.jade +++ b/client/components/cards/cardCustomFields.jade @@ -79,14 +79,13 @@ template(name="cardCustomField-currency") template(name="cardCustomField-date") if canModifyCard - a.js-edit-date(title="{{showTitle}} {{_ 'predicate-week'}} {{#if showWeekOfYear}}{{showWeek}}{{/if}}" class="{{classes}}") + a.js-edit-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}") if value div.card-date time(datetime="{{showISODate}}") | {{showDate}} - if showWeekOfYear - b - | {{showWeek}} + b + | {{showWeek}} else | {{_ 'edit'}} else @@ -94,9 +93,8 @@ template(name="cardCustomField-date") div.card-date time(datetime="{{showISODate}}") | {{showDate}} - if showWeekOfYear - b - | {{showWeek}} + b + | {{showWeek}} template(name="cardCustomField-dropdown") if canModifyCard diff --git a/client/components/cards/cardCustomFields.js b/client/components/cards/cardCustomFields.js index 23647ce53..14d675683 100644 --- a/client/components/cards/cardCustomFields.js +++ b/client/components/cards/cardCustomFields.js @@ -148,10 +148,6 @@ CardCustomField.register('cardCustomField'); return this.date.get().week().toString(); } - showWeekOfYear() { - return ReactiveCache.getCurrentUser().isShowWeekOfYear(); - } - showDate() { // this will start working once mquandalle:moment // is updated to at least moment.js 2.10.5 diff --git a/client/components/cards/cardDate.jade b/client/components/cards/cardDate.jade index 202b8f6f0..caaab219c 100644 --- a/client/components/cards/cardDate.jade +++ b/client/components/cards/cardDate.jade @@ -1,23 +1,20 @@ template(name="dateBadge") if canModifyCard - a.js-edit-date.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{#if showWeekOfYear}}{{showWeek}}{{/if}}" class="{{classes}}") + a.js-edit-date.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}") time(datetime="{{showISODate}}") | {{showDate}} - if showWeekOfYear - b - | {{showWeek}} - else - a.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{#if showWeekOfYear}}{{showWeek}}{{/if}}" class="{{classes}}") - time(datetime="{{showISODate}}") - | {{showDate}} - if showWeekOfYear - b - | {{showWeek}} - -template(name="dateCustomField") - a(title="{{showTitle}} {{_ 'predicate-week'}} {{#if showWeekOfYear}}{{showWeek}}{{/if}}" class="{{classes}}") - time(datetime="{{showISODate}}") - | {{showDate}} - if showWeekOfYear b | {{showWeek}} + else + a.card-date(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}") + time(datetime="{{showISODate}}") + | {{showDate}} + b + | {{showWeek}} + +template(name="dateCustomField") + a(title="{{showTitle}} {{_ 'predicate-week'}} {{showWeek}}" class="{{classes}}") + time(datetime="{{showISODate}}") + | {{showDate}} + b + | {{showWeek}} diff --git a/client/components/cards/cardDate.js b/client/components/cards/cardDate.js index 5d255614d..22cc91d78 100644 --- a/client/components/cards/cardDate.js +++ b/client/components/cards/cardDate.js @@ -11,7 +11,7 @@ import { DatePicker } from '/client/lib/datepicker'; } _storeDate(date) { - this.card.setReceived(moment(date).format('YYYY-MM-DD HH:mm')); + this.card.setReceived(date); } _deleteDate() { @@ -37,7 +37,7 @@ import { DatePicker } from '/client/lib/datepicker'; } _storeDate(date) { - this.card.setStart(moment(date).format('YYYY-MM-DD HH:mm')); + this.card.setStart(date); } _deleteDate() { @@ -60,7 +60,7 @@ import { DatePicker } from '/client/lib/datepicker'; } _storeDate(date) { - this.card.setDue(moment(date).format('YYYY-MM-DD HH:mm')); + this.card.setDue(date); } _deleteDate() { @@ -83,7 +83,7 @@ import { DatePicker } from '/client/lib/datepicker'; } _storeDate(date) { - this.card.setEnd(moment(date).format('YYYY-MM-DD HH:mm')); + this.card.setEnd(date); } _deleteDate() { @@ -110,10 +110,6 @@ const CardDate = BlazeComponent.extendComponent({ return this.date.get().week().toString(); }, - showWeekOfYear() { - return ReactiveCache.getCurrentUser().isShowWeekOfYear(); - }, - showDate() { // this will start working once mquandalle:moment // is updated to at least moment.js 2.10.5 @@ -287,10 +283,6 @@ class CardCustomFieldDate extends CardDate { return this.date.get().week().toString(); } - showWeekOfYear() { - return ReactiveCache.getCurrentUser().isShowWeekOfYear(); - } - showDate() { // this will start working once mquandalle:moment // is updated to at least moment.js 2.10.5 @@ -322,19 +314,19 @@ CardCustomFieldDate.register('cardCustomFieldDate'); (class extends CardStartDate { showDate() { - return this.date.get().format('YYYY-MM-DD HH:mm'); + return this.date.get().format('L'); } }.register('minicardStartDate')); (class extends CardDueDate { showDate() { - return this.date.get().format('YYYY-MM-DD HH:mm'); + return this.date.get().format('L'); } }.register('minicardDueDate')); (class extends CardEndDate { showDate() { - return this.date.get().format('YYYY-MM-DD HH:mm'); + return this.date.get().format('L'); } }.register('minicardEndDate')); diff --git a/client/components/cards/cardDetails.css b/client/components/cards/cardDetails.css index c04dddffb..286d6d883 100644 --- a/client/components/cards/cardDetails.css +++ b/client/components/cards/cardDetails.css @@ -5,7 +5,7 @@ float: left; height: 30px; width: 30px; - margin: .3vh; + margin: 0 4px 4px 0; cursor: pointer; user-select: none; z-index: 1; @@ -272,7 +272,7 @@ box-sizing: border-box; top: 97px; left: 0px; - height: calc(100% - 100px); + height: calc(100% - 20px); width: calc(100% - 20px); float: left; } diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 6ca69c754..8cfaf181d 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -5,7 +5,7 @@ template(name="cardDetails") +attachmentViewer - section.card-details.js-card-details.nodragscroll(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}' class='{{#unless isVerticalScrollbars}}no-scrollbars{{/unless}}'): .card-details-canvas + section.card-details.js-card-details(class='{{#if cardMaximized}}card-details-maximized{{/if}}' class='{{#if isPopup}}card-details-popup{{/if}}'): .card-details-canvas .card-details-header(class='{{#if colorClass}}card-details-{{colorClass}}{{/if}}') +inlinedForm(classNames="js-card-details-title") +editCardTitleForm @@ -13,12 +13,11 @@ template(name="cardDetails") unless isMiniScreen unless isPopup a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}") - if canModifyCard - if cardMaximized - a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}") - else - a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}") - if canModifyCard + if cardMaximized + a.fa.fa-window-minimize.minimize-card-details.js-minimize-card-details(title="{{_ 'minimize-card'}}") + else + a.fa.fa-window-maximize.maximize-card-details.js-maximize-card-details(title="{{_ 'maximize-card'}}") + if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}") a.fa.fa-link.card-copy-button.js-copy-link( id="cardURL_copy" @@ -30,7 +29,7 @@ template(name="cardDetails") else unless isPopup a.fa.fa-times-thin.close-card-details.js-close-card-details(title="{{_ 'close-card'}}") - if canModifyCard + if currentUser.isBoardMember a.fa.fa-navicon.card-details-menu-mobile-web.js-open-card-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}") a.fa.fa-link.card-copy-mobile-button.js-copy-link( id="cardURL_copy" @@ -525,12 +524,11 @@ template(name="cardDetails") a.fa.fa-times-thin.js-close-inlined-form else if currentBoard.allowsDescriptionText - a.js-open-inlined-form(title="{{_ 'edit'}}" value=title) + a.js-open-inlined-form.right(title="{{_ 'edit'}}" value=title) i.fa.fa-pencil-square-o - a.js-open-inlined-form(title="{{_ 'edit'}}" value=title) - if getDescription - +viewer - = getDescription + if getDescription + +viewer + = getDescription if (hasUnsavedValue 'cardDescription' _id) p.quiet | {{_ 'unsaved-description'}} @@ -549,7 +547,7 @@ template(name="cardDetails") .card-checklist-attachmentGallery.card-checklists if currentBoard.allowsChecklists hr - +checklists(cardId = _id card = this) + +checklists(cardId = _id) if currentBoard.allowsSubtasks hr +subtasks(cardId = _id) @@ -569,34 +567,25 @@ template(name="cardDetails") +attachmentGallery hr - unless currentUser.isNoComments - .comment-title - h3.card-details-item-title - i.fa.fa-comment-o - | {{_ 'comments'}} - - if currentBoard.allowsComments - if currentUser.isBoardMember - unless currentUser.isNoComments - +commentForm - +comments - hr - .card-details-right unless currentUser.isNoComments .activity-title h3.card-details-item-title i.fa.fa-history - | {{ _ 'activities'}} + | {{ _ 'activity'}} if currentUser.isBoardMember - .material-toggle-switch(title="{{_ 'show-activities'}}") - if showActivities - input.toggle-switch(type="checkbox" id="toggleShowActivitiesCard" checked="checked") + .material-toggle-switch(title="{{_ 'hide-system-messages'}}") + //span.toggle-switch-title + if hiddenSystemMessages + input.toggle-switch(type="checkbox" id="toggleButton" checked="checked") else - input.toggle-switch(type="checkbox" id="toggleShowActivitiesCard") - label.toggle-label(for="toggleShowActivitiesCard") - + input.toggle-switch(type="checkbox" id="toggleButton") + label.toggle-label(for="toggleButton") + if currentBoard.allowsComments + if currentUser.isBoardMember + unless currentUser.isNoComments + +commentForm unless currentUser.isNoComments if isLoaded.get if isLinkedCard diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 9d022b2cd..0351ee94f 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -63,6 +63,10 @@ BlazeComponent.extendComponent({ return card.findWatcher(Meteor.userId()); }, + hiddenSystemMessages() { + return ReactiveCache.getCurrentUser().hasHiddenSystemMessages(); + }, + customFieldsGrid() { return ReactiveCache.getCurrentUser().hasCustomFieldsGrid(); }, @@ -114,11 +118,6 @@ BlazeComponent.extendComponent({ ); }, - isVerticalScrollbars() { - const user = ReactiveCache.getCurrentUser(); - return user && user.isVerticalScrollbars(); - }, - /** returns if the list id is the current list id * @param listId list id to check * @return is the list id the current list id ? @@ -378,11 +377,8 @@ BlazeComponent.extendComponent({ Session.set('cardDetailsIsDragging', false); Session.set('cardDetailsIsMouseDown', false); }, - 'click #toggleShowActivitiesCard'() { - this.data().toggleShowActivities(); - }, - 'click #toggleHideCheckedChecklistItems'() { - this.data().toggleHideCheckedChecklistItems(); + 'click #toggleButton'() { + Meteor.call('toggleSystemMessages'); }, 'click #toggleCustomFieldsGridButton'() { Meteor.call('toggleCustomFieldsGrid'); @@ -850,15 +846,13 @@ BlazeComponent.extendComponent({ 'click .js-palette-color'() { this.currentColor.set(this.currentData().color); }, - 'click .js-submit'(event) { - event.preventDefault(); + 'click .js-submit'() { this.currentCard.setColor(this.currentColor.get()); - Popup.back(); + Popup.close(); }, - 'click .js-remove-color'(event) { - event.preventDefault(); + 'click .js-remove-color'() { this.currentCard.setColor(null); - Popup.back(); + Popup.close(); }, }, ]; diff --git a/client/components/cards/checklists.css b/client/components/cards/checklists.css index 6b8c7e8f9..6d8a346f8 100644 --- a/client/components/cards/checklists.css +++ b/client/components/cards/checklists.css @@ -8,6 +8,20 @@ textarea.js-edit-checklist-item { resize: none; height: 34px; } +.card-details .text-show-at-minicard { + width: 350px; + text-align: left; +} +.minicard .text-show-at-minicard { + display: none; +} +.text-some-space { + width: 20px; +} +.text-hide-checked-items { + width: 400px; + text-align: left; +} .delete-text, .js-delete-checklist-item, .js-convert-checklist-item-to-card { @@ -26,6 +40,8 @@ textarea.js-edit-checklist-item { display: flex; justify-content: space-between; } + + .checklist-progress-bar-container { display: flex; flex-direction: row; @@ -45,9 +61,6 @@ textarea.js-edit-checklist-item { border-radius: 16px; height: 100%; } -.checklist-title { - padding: 10px; -} .checklist-title .checkbox { float: left; width: 30px; diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade index e943e338f..41f55292b 100644 --- a/client/components/cards/checklists.jade +++ b/client/components/cards/checklists.jade @@ -9,19 +9,10 @@ template(name="checklists") else a.add-checklist-top.js-open-inlined-form(title="{{_ 'add-checklist'}}") i.fa.fa-plus - if currentUser.isBoardMember - .material-toggle-switch(title="{{_ 'hide-finished-checklist'}}") - //span.toggle-switch-title - if card.hideFinishedChecklistIfItemsAreHidden - input.toggle-switch(type="checkbox" id="toggleHideFinishedChecklist" checked="checked") - else - input.toggle-switch(type="checkbox" id="toggleHideFinishedChecklist") - label.toggle-label(for="toggleHideFinishedChecklist") .card-checklist-items each checklist in checklists - if checklist.showChecklist card.hideFinishedChecklistIfItemsAreHidden - +checklistDetail(checklist = checklist card = card) + +checklistDetail(checklist=checklist) if canModifyCard +inlinedForm(autoclose=false classNames="js-add-checklist" cardId = cardId) @@ -31,7 +22,7 @@ template(name="checklists") i.fa.fa-plus template(name="checklistDetail") - .js-checklist.checklist.nodragscroll + .js-checklist.checklist +inlinedForm(classNames="js-edit-checklist-title" checklist = checklist) +editChecklistItemForm(checklist = checklist) else @@ -56,7 +47,7 @@ template(name="checklistDetail") .checklist-progress-text {{finishedPercent}}% .checklist-progress-bar .checklist-progress(style="width:{{finishedPercent}}%") - +checklistItems(checklist = checklist card = card) + +checklistItems(checklist = checklist) template(name="checklistDeletePopup") p {{_ 'confirm-checklist-delete-popup'}} @@ -73,12 +64,6 @@ template(name="addChecklistItemForm") .material-toggle-switch(title="{{_ 'newlineBecomesNewChecklistItem'}}") input.toggle-switch(type="checkbox" id="toggleNewlineBecomesNewChecklistItem") label.toggle-label(for="toggleNewlineBecomesNewChecklistItem") - | {{_ 'newLineNewItem'}} - if $eq position 'top' - .material-toggle-switch(title="{{_ 'newlineBecomesNewChecklistItemOriginOrder'}}") - input.toggle-switch(type="checkbox" id="toggleNewlineBecomesNewChecklistItemOriginOrder") - label.toggle-label(for="toggleNewlineBecomesNewChecklistItemOriginOrder") - | {{_ 'originOrder'}} template(name="editChecklistItemForm") a.fa.fa-copy(title="{{_ 'copy-text-to-clipboard'}}") @@ -102,7 +87,7 @@ template(name="checklistItems") if checklist.items.length if canModifyCard +inlinedForm(autoclose=false classNames="js-add-checklist-item" checklist = checklist position="top") - +addChecklistItemForm(checklist=checklist showNewlineBecomesNewChecklistItem=true position="top") + +addChecklistItemForm(checklist=checklist showNewlineBecomesNewChecklistItem=true) else a.add-checklist-item.js-open-inlined-form(title="{{_ 'add-checklist-item'}}") i.fa.fa-plus @@ -111,7 +96,7 @@ template(name="checklistItems") +inlinedForm(classNames="js-edit-checklist-item" item = item checklist = checklist) +editChecklistItemForm(type = 'item' item = item checklist = checklist) else - +checklistItemDetail(item = item checklist = checklist card = card) + +checklistItemDetail(item = item checklist = checklist) if canModifyCard +inlinedForm(autoclose=false classNames="js-add-checklist-item" checklist = checklist) +addChecklistItemForm(checklist=checklist showNewlineBecomesNewChecklistItem=true) @@ -120,7 +105,7 @@ template(name="checklistItems") i.fa.fa-plus template(name='checklistItemDetail') - .js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if checklist.hideCheckedChecklistItems}} invisible{{/if}}{{/if}}{{#if checklist.hideAllChecklistItems}} is-checked invisible{{/if}}" + .js-checklist-item.checklist-item(class="{{#if item.isFinished }}is-checked{{#if hideCheckedItems}} invisible{{/if}}{{/if}}" role="checkbox" aria-checked="{{#if item.isFinished }}true{{else}}false{{/if}}" tabindex="0") if canModifyCard .check-box-container @@ -137,6 +122,27 @@ template(name='checklistItemDetail') = item.title template(name="checklistActionsPopup") + if currentUser.isBoardMember + span.text-show-at-minicard + | {{_ 'show-at-minicard'}} + .material-toggle-switch(title="{{_ 'show-checklist-at-minicard'}}") + if showAtMinicard + input.toggle-switch(type="checkbox" id="toggleShowChecklistAtMinicardButton" checked="checked") + else + input.toggle-switch(type="checkbox" id="toggleShowChecklistAtMinicardButton") + label.toggle-label(for="toggleShowChecklistAtMinicardButton") + hr + span.text-hide-checked-items + | {{_ 'hide-checked-items'}} + .material-toggle-switch(title="{{_ 'hide-checked-items'}}") + //span.toggle-switch-title + //.check-square-icon.i.fa.fa-check-square-o + if hideCheckedItems + input.toggle-switch(type="checkbox" id="toggleHideCheckedItemsButton" checked="checked") + else + input.toggle-switch(type="checkbox" id="toggleHideCheckedItemsButton") + label.toggle-label(for="toggleHideCheckedItemsButton") + hr ul.pop-over-list li a.js-delete-checklist.delete-checklist @@ -148,24 +154,6 @@ template(name="checklistActionsPopup") a.js-copy-checklist.copy-checklist i.fa.fa-copy | {{_ "copyChecklist"}} ... - a.js-hide-checked-checklist-items - i.fa.fa-eye-slash - | {{_ "hideCheckedChecklistItems"}} ... - .material-toggle-switch(title="{{_ 'hide-checked-items'}}") - if checklist.hideCheckedChecklistItems - input.toggle-switch(type="checkbox" id="toggleHideCheckedChecklistItems_{{checklist._id}}" checked="checked") - else - input.toggle-switch(type="checkbox" id="toggleHideCheckedChecklistItems_{{checklist._id}}") - label.toggle-label(for="toggleHideCheckedChecklistItems_{{checklist._id}}") - a.js-hide-all-checklist-items - i.fa.fa-ban - | {{_ "hideAllChecklistItems"}} ... - .material-toggle-switch(title="{{_ 'hideAllChecklistItems'}}") - if checklist.hideAllChecklistItems - input.toggle-switch(type="checkbox" id="toggleHideAllChecklistItems_{{checklist._id}}" checked="checked") - else - input.toggle-switch(type="checkbox" id="toggleHideAllChecklistItems_{{checklist._id}}") - label.toggle-label(for="toggleHideAllChecklistItems_{{checklist._id}}") template(name="copyChecklistPopup") +copyAndMoveChecklist diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 6762eab02..20e94466a 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -119,7 +119,6 @@ BlazeComponent.extendComponent({ event.preventDefault(); const textarea = this.find('textarea.js-add-checklist-item'); const newlineBecomesNewChecklistItem = this.find('input#toggleNewlineBecomesNewChecklistItem'); - const newlineBecomesNewChecklistItemOriginOrder = this.find('input#toggleNewlineBecomesNewChecklistItemOriginOrder'); const title = textarea.value.trim(); const checklist = this.currentData().checklist; @@ -128,28 +127,22 @@ BlazeComponent.extendComponent({ if (newlineBecomesNewChecklistItem.checked) { checklistItems = title.split('\n').map(_value => _value.trim()); if (this.currentData().position === 'top') { - if (newlineBecomesNewChecklistItemOriginOrder.checked === false) { - checklistItems = checklistItems.reverse(); - } + checklistItems = checklistItems.reverse(); } } - let addIndex; - let sortIndex; - if (this.currentData().position === 'top') { - sortIndex = Utils.calculateIndexData(null, checklist.firstItem()).base; - addIndex = -1; - } else { - sortIndex = Utils.calculateIndexData(checklist.lastItem(), null).base; - addIndex = 1; - } for (let checklistItem of checklistItems) { + let sortIndex; + if (this.currentData().position === 'top') { + sortIndex = Utils.calculateIndexData(null, checklist.firstItem()).base; + } else { + sortIndex = Utils.calculateIndexData(checklist.lastItem(), null).base; + } ChecklistItems.insert({ title: checklistItem, checklistId: checklist._id, cardId: checklist.cardId, sort: sortIndex, }); - sortIndex += addIndex; } } // We keep the form opened, empty it. @@ -208,8 +201,12 @@ BlazeComponent.extendComponent({ }, events() { + const events = { + }; + return [ { + ...events, 'click .js-open-checklist-details-menu': Popup.open('checklistActions'), 'submit .js-add-checklist': this.addChecklist, 'submit .js-edit-checklist-title': this.editChecklist, @@ -220,10 +217,6 @@ BlazeComponent.extendComponent({ 'focus .js-add-checklist-item': this.focusChecklistItem, // add and delete checklist / checklist-item 'click .js-open-inlined-form': this.closeAllInlinedForms, - 'click #toggleHideFinishedChecklist'(event) { - event.preventDefault(); - this.data().card.toggleHideFinishedChecklist(); - }, keydown: this.pressKey, }, ]; @@ -278,6 +271,16 @@ Template.checklists.helpers({ const ret = card.checklists(); return ret; }, + showAtMinicard() { + const card = ReactiveCache.getCard(this.cardId); + const ret = card.checklists({'showAtMinicard':1}); + return ret; + }, + hideCheckedItems() { + const currentUser = ReactiveCache.getCurrentUser(); + if (currentUser) return currentUser.hasHideCheckedItems(); + return false; + }, }); BlazeComponent.extendComponent({ @@ -300,9 +303,26 @@ BlazeComponent.extendComponent({ }).register('addChecklistItemForm'); BlazeComponent.extendComponent({ + toggleItem() { + const checklist = this.currentData().checklist; + const item = this.currentData().item; + if (checklist && item && item._id) { + item.toggleItem(); + } + }, events() { return [ { + 'click .js-checklist-item .check-box-container': this.toggleItem, + 'click #toggleShowChecklistAtMinicardButton'() { + const checklist = this.checklist; + if (checklist && checklist._id) { + Meteor.call('toggleShowChecklistAtMinicard', checklist._id); + } + }, + 'click #toggleHideCheckedItemsButton'() { + Meteor.call('toggleHideCheckedItems'); + }, 'click .js-delete-checklist': Popup.afterConfirm('checklistDelete', function () { Popup.back(2); const checklist = this.checklist; @@ -312,16 +332,6 @@ BlazeComponent.extendComponent({ }), 'click .js-move-checklist': Popup.open('moveChecklist'), 'click .js-copy-checklist': Popup.open('copyChecklist'), - 'click .js-hide-checked-checklist-items'(event) { - event.preventDefault(); - this.data().checklist.toggleHideCheckedChecklistItems(); - Popup.back(); - }, - 'click .js-hide-all-checklist-items'(event) { - event.preventDefault(); - this.data().checklist.toggleHideAllChecklistItems(); - Popup.back(); - }, } ] } @@ -347,6 +357,11 @@ BlazeComponent.extendComponent({ }).register('editChecklistItemForm'); Template.checklistItemDetail.helpers({ + hideCheckedItems() { + const user = ReactiveCache.getCurrentUser(); + if (user) return user.hasHideCheckedItems(); + return false; + }, }); BlazeComponent.extendComponent({ diff --git a/client/components/cards/labels.jade b/client/components/cards/labels.jade index 8d12dc488..d67ba76aa 100644 --- a/client/components/cards/labels.jade +++ b/client/components/cards/labels.jade @@ -37,4 +37,5 @@ template(name="cardLabelsPopup") = name if(isLabelSelected ../_id) i.card-label-selectable-icon.fa.fa-check - a.quiet-button.full.js-add-label {{_ 'label-create'}} + if currentUser.isBoardAdmin + a.quiet-button.full.js-add-label {{_ 'label-create'}} diff --git a/client/components/cards/minicard.css b/client/components/cards/minicard.css index e4b3ca438..4997e7528 100644 --- a/client/components/cards/minicard.css +++ b/client/components/cards/minicard.css @@ -1,3 +1,12 @@ +.minicard .checklists-title, +.minicard .add-checklist, +.minicard .add-checklist-item, +.minicard .checklist-details-menu { + display: none; +} +.minicard .checklist-progress-bar-container { + width: 190px; /* TODO: Add adjustable width https://github.com/wekan/wekan/pull/4964 */ +} .minicard-wrapper { cursor: pointer; position: relative; @@ -47,12 +56,10 @@ float: right; font-size: 18px; padding-right: 30px; - padding-left: 5px; } .minicard-details-menu { float: right; font-size: 18px; - padding-left: 5px; } @media print { .minicard-details-menu, @@ -92,7 +99,7 @@ background-size: contain; height: 145px; user-select: none; - margin: 6px -8px 6px -8px; + margin: -6px -8px 6px -8px; border-radius: top 2px; } .minicard .minicard-labels { @@ -129,6 +136,14 @@ max-width: 100%; margin-right: 4px; } +/* +.minicard .checklists-title, +.minicard .add-checklist, +.minicard .add-checklist-item, +.minicard .checklist-details-menu { + display: none; +} +*/ .minicard .handle { width: 20px; height: 20px; @@ -158,6 +173,7 @@ .minicard .minicard-title .viewer { display: block; word-wrap: break-word; + max-width: 230px; } } .minicard .dates { diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index 7630c85cd..aa28443db 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -1,15 +1,14 @@ template(name="minicard") - .minicard.nodragscroll( + .minicard( class="{{#if isLinkedCard}}linked-card{{/if}}" class="{{#if isLinkedBoard}}linked-board{{/if}}" class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}") - if canModifyCard - if isTouchScreenOrShowDesktopDragHandles - a.fa.fa-navicon.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}") - .handle - .fa.fa-arrows - else - a.fa.fa-navicon.minicard-details-menu.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}") + if isTouchScreenOrShowDesktopDragHandles + a.fa.fa-navicon.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}") + .handle + .fa.fa-arrows + else + a.fa.fa-navicon.minicard-details-menu.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}") .dates if getReceived unless getStart @@ -112,6 +111,12 @@ template(name="minicard") +viewer = trueValue + .card-checklist-attachmentGalleries + .card-checklist-attachmentGallery.card-checklists + if currentBoard.allowsChecklists + //hr + //+checklists(cardId=_id showAtMinicard=true) + if showAssignee if getAssignees .minicard-assignees.js-minicard-assignees @@ -124,12 +129,12 @@ template(name="minicard") each getMembers +userAvatar(userId=this) - if showCreatorOnMinicard + if showCreator .minicard-creator +userAvatar(userId=this.userId noRemove=true) .badges - if canModifyCard + unless currentUser.isNoComments if comments.length .badge(title="{{_ 'card-comments-title' comments.length }}") span.badge-icon.fa.fa-comment-o.badge-comment.badge-text @@ -184,11 +189,12 @@ template(name="editCardSortOrderPopup") template(name="minicardDetailsActionsPopup") ul.pop-over-list - if canModifyCard + if currentUser.isBoardAdmin li a.js-move-card i.fa.fa-arrow-right | {{_ 'moveCardPopup-title'}} + unless currentUser.isWorker li a.js-copy-card i.fa.fa-copy diff --git a/client/components/cards/minicard.js b/client/components/cards/minicard.js index d9b5a3806..079c72155 100644 --- a/client/components/cards/minicard.js +++ b/client/components/cards/minicard.js @@ -37,12 +37,16 @@ BlazeComponent.extendComponent({ return ret; }, - showCreatorOnMinicard() { + showCreator() { // cache "board" to reduce the mini-mongodb access const board = this.data().board(); let ret = false; if (board) { - ret = board.allowsCreatorOnMinicard ?? false; + ret = + board.allowsCreator === null || + board.allowsCreator === undefined || + board.allowsCreator + ; } return ret; }, @@ -88,6 +92,11 @@ BlazeComponent.extendComponent({ events() { return [ { + 'click .minicard-checklists'() { + // Prevents clicking checklist at minicard from opening card details, + // while still allowing checking checlist items. + event.preventDefault(); + }, 'click .js-linked-link'() { if (this.data().isLinkedCard()) Utils.goCardId(this.data().linkedId); else if (this.data().isLinkedBoard()) diff --git a/client/components/lists/list.css b/client/components/lists/list.css index b94a87f24..4b26f0c05 100644 --- a/client/components/lists/list.css +++ b/client/components/lists/list.css @@ -7,16 +7,18 @@ border-left: 1px solid #ccc; padding: 0; float: left; -} -[id^="swimlane-"] .list:first-child { - min-width: 20px; -} -.list.list-auto-width { - flex: 1; + min-width: 100px; /* TODO(mark-i-m): hardcoded? */ + /*max-width: 270px;*/ + /* Reverted incomplete change list width: */ + /* https://github.com/wekan/wekan/issues/4558 */ + /* Orinal width: 270px. Changes not saved yet: */ + /*resize: both; - List width and height resizeable */ + /* overflow: auto; - List width and height resizeable */ } .list:first-child { + min-width: 20px; + margin-left: 5px; border-left: none; - flex: none; } .card-details + .list { border-left: none; @@ -35,9 +37,6 @@ box-shadow: none; height: 100px; } -.list.list-collapsed { - flex: none; -} .list.list-composer .open-list-composer, .list .list-composer .open-list-composer { color: #8c8c8c; @@ -49,7 +48,7 @@ } .list-header-add { flex: 0 0 auto; - padding: 12px; + padding: 20px 12px 4px; position: relative; min-height: 20px; } @@ -82,20 +81,6 @@ overflow: hidden; text-overflow: ellipsis; word-wrap: break-word; -} -.list-rotated { - width: 10px; - height: 250px; - margin-top: -90px; - margin-left: -110px; - margin-right: 0; - transform: rotate(90deg); - position: relative; - text-overflow: ellipsis; - white-space: nowrap; -} -.list-header .list-rotated { - } .list-header .list-header-watch-icon { padding-left: 10px; @@ -114,23 +99,6 @@ color: #a6a6a6; margin-right: 15px; } -.list-header .list-header-collapse-right { - color: #a6a6a6; -} -.list-header .list-header-collapse-left { - color: #a6a6a6; - margin-right: 15px; -} -.list-header .list-header-uncollapse-left { - color: #a6a6a6; -} -.list-header .list-header-uncollapse-right { - color: #a6a6a6; -} -.list-header .list-header-collapse { - color: #a6a6a6; - margin-right: 15px; -} .list-header .highlight { color: #ce1414; } @@ -252,11 +220,11 @@ padding: 15px 19px; } .list-header { - /*Updated padding values for mobile devices, this should fix text grouping issue*/ - padding: 20px 0px 20px 0px; + padding: 0 12px 0px; border-bottom: 0px solid #e4e4e4; - min-height: 30px; + height: 60px; margin-top: 10px; + display: flex; align-items: center; } .list-header .list-header-left-icon { @@ -329,6 +297,7 @@ } .list-header-white { border-bottom: 6px solid #fff; + border: 1px solid #eee; } .list-header-green { border-bottom: 6px solid #3cb500; @@ -361,7 +330,7 @@ border-bottom: 6px solid #51e898; } .list-header-silver { - border-bottom: 6px solid #e4e4e4; + border-bottom: 6px solid unset; } .list-header-peachpuff { border-bottom: 6px solid #ffdab9; diff --git a/client/components/lists/list.jade b/client/components/lists/list.jade index e39efcad0..748c53538 100644 --- a/client/components/lists/list.jade +++ b/client/components/lists/list.jade @@ -1,7 +1,6 @@ template(name='list') .list.js-list(id="js-list-{{_id}}" - style="{{#unless collapsed}}min-width:{{listWidth}}px;max-width:{{listConstraint}}px;{{/unless}}" - class="{{#if collapsed}}list-collapsed{{/if}} {{#if autoWidth}}list-auto-width{{/if}}") + style="width:{{listWidth}}px;") +listHeader +listBody diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 90c23fa52..a451c6b5b 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -196,22 +196,10 @@ BlazeComponent.extendComponent({ }, listWidth() { - const user = ReactiveCache.getCurrentUser(); + const user = Meteor.user(); const list = Template.currentData(); return user.getListWidth(list.boardId, list._id); }, - - listConstraint() { - const user = ReactiveCache.getCurrentUser(); - const list = Template.currentData(); - return user.getListConstraint(list.boardId, list._id); - }, - - autoWidth() { - const user = ReactiveCache.getCurrentUser(); - const list = Template.currentData(); - return user.isAutoWidth(list.boardId); - }, }).register('list'); Template.miniList.events({ diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade index 662b5f187..3d319f1ca 100644 --- a/client/components/lists/listBody.jade +++ b/client/components/lists/listBody.jade @@ -1,38 +1,37 @@ template(name="listBody") - unless collapsed - .list-body(class="{{#unless isVerticalScrollbars}}no-scrollbars{{/unless}}") - .minicards.clearfix.js-minicards(class="{{#if reachedWipLimit}}js-list-full{{/if}}") - if cards.length - +inlinedForm(autoclose=false position="top") - +addCardForm(listId=_id position="top") - ul.sidebar-list - each customFieldsSum - li + .list-body + .minicards.clearfix.js-minicards(class="{{#if reachedWipLimit}}js-list-full{{/if}}") + if cards.length + +inlinedForm(autoclose=false position="top") + +addCardForm(listId=_id position="top") + ul.sidebar-list + each customFieldsSum + li + +viewer + = name + if $eq customFieldsSum.type "number" +viewer - = name - if $eq customFieldsSum.type "number" - +viewer - = value - if $eq customFieldsSum.type "currency" - +viewer - = formattedCurrencyCustomFieldValue(value) - each (cardsWithLimit (idOrNull ../../_id)) - a.minicard-wrapper.js-minicard(href=originRelativeUrl - class="{{#if cardIsSelected}}is-selected{{/if}}" - class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}") - if MultiSelection.isActive - .materialCheckBox.multi-selection-checkbox.js-toggle-multi-selection( - class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}") - +minicard(this) - if (showSpinner (idOrNull ../../_id)) - +spinnerList + = value + if $eq customFieldsSum.type "currency" + +viewer + = formattedCurrencyCustomFieldValue(value) + each (cardsWithLimit (idOrNull ../../_id)) + a.minicard-wrapper.js-minicard(href=originRelativeUrl + class="{{#if cardIsSelected}}is-selected{{/if}}" + class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}") + if MultiSelection.isActive + .materialCheckBox.multi-selection-checkbox.js-toggle-multi-selection( + class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}") + +minicard(this) + if (showSpinner (idOrNull ../../_id)) + +spinnerList - if canSeeAddCard - +inlinedForm(autoclose=false position="bottom") - +addCardForm(listId=_id position="bottom") - else - a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}") - i.fa.fa-plus + if canSeeAddCard + +inlinedForm(autoclose=false position="bottom") + +addCardForm(listId=_id position="bottom") + else + a.open-minicard-composer.js-card-composer.js-open-inlined-form(title="{{_ 'add-card-to-bottom-of-list'}}") + i.fa.fa-plus template(name="spinnerList") .sk-spinner.sk-spinner-list( diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js index 05fabd4a2..f68599c83 100644 --- a/client/components/lists/listBody.js +++ b/client/components/lists/listBody.js @@ -231,11 +231,6 @@ BlazeComponent.extendComponent({ ); }, - isVerticalScrollbars() { - const user = ReactiveCache.getCurrentUser(); - return user && user.isVerticalScrollbars(); - }, - cardDetailsPopup(event) { if (!Popup.isOpen()) { Popup.open("cardDetails")(event); diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade index 075b6282d..d11d4a529 100644 --- a/client/components/lists/listHeader.jade +++ b/client/components/lists/listHeader.jade @@ -1,5 +1,5 @@ template(name="listHeader") - .list-header.js-list-header.nodragscroll( + .list-header.js-list-header( class="{{#if limitToShowCardsCount}}list-header-card-count{{/if}}" class=colorClass) +inlinedForm @@ -8,40 +8,19 @@ template(name="listHeader") if isMiniScreen if currentList a.list-header-left-icon.fa.fa-angle-left.js-unselect-list - else - if collapsed - a.js-collapse(title="{{_ 'uncollapse'}}") - i.fa.fa-arrow-left.list-header-uncollapse-left - i.fa.fa-arrow-right.list-header-uncollapse-right - if showCardsCountForList cards.length - br - span.cardCount {{cardsCount}} - if isMiniScreen - h2.list-header-name( - title="{{ moment modifiedAt 'LLL' }}" - class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}") - +viewer - = title - if wipLimit.enabled - | ( - span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}} - |/#{wipLimit.value}) - if showCardsCountForList cards.length - span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}} - else - div(class="{{#if collapsed}}list-rotated{{/if}}") - h2.list-header-name( - title="{{ moment modifiedAt 'LLL' }}" - class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}") - +viewer - = title - if wipLimit.enabled - | ( - span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}} - |/#{wipLimit.value}) - unless collapsed - if showCardsCountForList cards.length - span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}} + h2.list-header-name( + title="{{ moment modifiedAt 'LLL' }}" + class="{{#if currentUser.isBoardMember}}{{#unless currentUser.isCommentOnly}}{{#unless currentUser.isWorker}}js-open-inlined-form is-editable{{/unless}}{{/unless}}{{/if}}") + +viewer + = title + if wipLimit.enabled + | ( + span(class="{{#if exceededWipLimit}}highlight{{/if}}") {{cards.length}} + |/#{wipLimit.value}) + + if showCardsCountForList cards.length + span.cardCount {{cardsCount}} {{cardsCountForListIsOne cards.length}} + if isMiniScreen if currentList if isWatching @@ -57,20 +36,16 @@ template(name="listHeader") else if currentUser.isBoardMember if isWatching i.list-header-watch-icon.fa.fa-eye - unless collapsed - div.list-header-menu - unless currentUser.isCommentOnly - //if isBoardAdmin - // a.fa.js-list-star.list-header-plus-top(class="fa-star{{#unless starred}}-o{{/unless}}") - if canSeeAddCard - a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}") - a.js-collapse(title="{{_ 'collapse'}}") - i.fa.fa-arrow-right.list-header-collapse-right - i.fa.fa-arrow-left.list-header-collapse-left - a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}") - if currentUser.isBoardAdmin - if isTouchScreenOrShowDesktopDragHandles - a.list-header-handle.handle.fa.fa-arrows.js-list-handle + div.list-header-menu + unless currentUser.isCommentOnly + //if isBoardAdmin + // a.fa.js-list-star.list-header-plus-top(class="fa-star{{#unless starred}}-o{{/unless}}") + if canSeeAddCard + a.js-add-card.fa.fa-plus.list-header-plus-top(title="{{_ 'add-card-to-top-of-list'}}") + a.fa.fa-navicon.js-open-list-menu(title="{{_ 'listActionPopup-title'}}") + if currentUser.isBoardAdmin + if isTouchScreenOrShowDesktopDragHandles + a.list-header-handle.handle.fa.fa-arrows.js-list-handle template(name="editListTitleForm") .list-composer @@ -191,14 +166,8 @@ template(name="setListWidthPopup") label {{_ 'set-list-width-value'}} p input.list-width-value(type="number" value="{{ listWidthValue }}" min="100") - input.list-constraint-value(type="number" value="{{ listConstraintValue }}" min="100") input.list-width-apply(type="submit" value="{{_ 'apply'}}") input.list-width-error - br - a.js-auto-width-board( - title="{{#if isAutoWidth}}{{_ 'click-to-disable-auto-width'}}{{else}}{{_ 'click-to-enable-auto-width'}}{{/if}}") - i.fa(class="fa-solid fa-{{#if isAutoWidth}}compress{{else}}expand{{/if}}") - span {{_ 'auto-list-width'}} template(name="listWidthErrorPopup") .list-width-invalid diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 5a3e212d8..71381e17e 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -1,6 +1,5 @@ import { ReactiveCache } from '/imports/reactiveCache'; import { TAPi18n } from '/imports/i18n'; -import dragscroll from '@wekanteam/dragscroll'; let listsColors; Meteor.startup(() => { @@ -32,17 +31,6 @@ BlazeComponent.extendComponent({ return !status; } }, - collapsed(check = undefined) { - const list = Template.currentData(); - const status = list.isCollapsed(); - if (check === undefined) { - // just check - return status; - } else { - list.collapse(!status); - return !status; - } - }, editTitle(event) { event.preventDefault(); const newTitle = this.childComponents('inlinedForm')[0] @@ -116,10 +104,6 @@ BlazeComponent.extendComponent({ event.preventDefault(); this.starred(!this.starred()); }, - 'click .js-collapse'(event) { - event.preventDefault(); - this.collapsed(!this.collapsed()); - }, 'click .js-open-list-menu': Popup.open('listAction'), 'click .js-add-card.list-header-plus-top'(event) { const listDom = $(event.target).parents( @@ -156,7 +140,7 @@ Template.listActionPopup.helpers({ isWatching() { return this.findWatcher(Meteor.userId()); - } + }, }); Template.listActionPopup.events({ @@ -348,20 +332,14 @@ BlazeComponent.extendComponent({ .val(), 10, ); - const constraint = parseInt( - Template.instance() - .$('.list-constraint-value') - .val(), - 10, - ); // FIXME(mark-i-m): where do we put constants? - if (width < 100 || !width || constraint < 100 || !constraint) { + if (width < 100 || !width) { Template.instance() .$('.list-width-error') .click(); } else { - Meteor.call('applyListWidth', board, list._id, width, constraint); + Meteor.call('applyListWidth', board, list._id, width); Popup.back(); } }, @@ -369,28 +347,12 @@ BlazeComponent.extendComponent({ listWidthValue() { const list = Template.currentData(); const board = list.boardId; - return ReactiveCache.getCurrentUser().getListWidth(board, list._id); - }, - - listConstraintValue() { - const list = Template.currentData(); - const board = list.boardId; - return ReactiveCache.getCurrentUser().getListConstraint(board, list._id); - }, - - isAutoWidth() { - const boardId = Utils.getCurrentBoardId(); - const user = ReactiveCache.getCurrentUser(); - return user && user.isAutoWidth(boardId); + return Meteor.user().getListWidth(board, list._id); }, events() { return [ { - 'click .js-auto-width-board'() { - dragscroll.reset(); - ReactiveCache.getCurrentUser().toggleAutoWidth(Utils.getCurrentBoardId()); - }, 'click .list-width-apply': this.applyListWidth, 'click .list-width-error': Popup.open('listWidthError'), }, diff --git a/client/components/main/accessibility.css b/client/components/main/accessibility.css deleted file mode 100644 index 1929848b9..000000000 --- a/client/components/main/accessibility.css +++ /dev/null @@ -1,74 +0,0 @@ -.my-cards-board-wrapper { - border-radius: 0 0 4px 4px; - min-width: 400px; - margin-bottom: 2rem; - margin-right: auto; - margin-left: auto; - border-width: 2px; - border-style: solid; - border-color: #a2a2a2; -} -.my-cards-board-title { - font-size: 1.4rem; - font-weight: bold; - padding: 0.5rem; - background-color: #808080; - color: #fff; -} -.my-cards-swimlane-title { - font-size: 1.1rem; - font-weight: bold; - padding: 0.5rem; - padding-bottom: 0.4rem; - margin-top: 0; - margin-bottom: 0.5rem; - text-align: center; -} -.swimlane-default-color { - background-color: #d3d3d3; -} -.my-cards-list-title { - font-weight: bold; - font-size: 1.1rem; - text-align: center; - margin-bottom: 0.7rem; -} -.my-cards-list-wrapper { - margin: 1rem; - border-radius: 5px; - display: inline-grid; - min-width: 250px; - max-width: 350px; -} -.my-cards-card-wrapper { - margin-top: 0; - margin-bottom: 10px; -} -.my-cards-dueat-list-wrapper { - max-width: 500px; - margin-right: auto; - margin-left: auto; -} -.my-cards-board-table thead { - border-bottom: 3px solid #4d4d4d; - background-color: transparent; -} -.my-cards-board-table th, -.my-cards-board-table td { - border: 0; -} -.my-cards-board-table tr { - border-bottom: 2px solid #a2a2a2; -} -.my-cards-card-title-table { - font-weight: bold; - padding-left: 2px; - max-width: 243px; -} -.my-cards-board-badge { - width: 36px; - height: 24px; - float: left; - border-radius: 5px; - margin-right: 5px; -} diff --git a/client/components/main/accessibility.jade b/client/components/main/accessibility.jade deleted file mode 100644 index 7c798d771..000000000 --- a/client/components/main/accessibility.jade +++ /dev/null @@ -1,8 +0,0 @@ -template(name="accessibilityHeaderBar") - if currentUser - h1 - | {{_ 'accessibility-title'}} - -template(name="accessibility") - if currentUser - | {{_ 'accessibility-content'}} diff --git a/client/components/main/accessibility.js b/client/components/main/accessibility.js deleted file mode 100644 index 38d8f6591..000000000 --- a/client/components/main/accessibility.js +++ /dev/null @@ -1,11 +0,0 @@ -import { ReactiveCache } from '/imports/reactiveCache'; -import { TAPi18n } from '/imports/i18n'; - -BlazeComponent.extendComponent({ - onCreated() { - this.error = new ReactiveVar(''); - this.loading = new ReactiveVar(false); - - Meteor.subscribe('setting'); - }, -}).register('accessibility'); diff --git a/client/components/main/editor.css b/client/components/main/editor.css index ac832de59..80ce1d310 100644 --- a/client/components/main/editor.css +++ b/client/components/main/editor.css @@ -1,16 +1,16 @@ .new-comment a.fa.fa-brands.fa-markdown, .inlined-form a.fa.fa-brands.fa-markdown { float: right; - position: absolute; - top: -10px; - right: 60px; + position: relative; + top: 20px; + right: 56px; } .new-comment a.fa.fa-copy, .inlined-form a.fa.fa-copy { float: right; position: relative; - top: -10px; - right: 5px; + top: 20px; + right: 6px; } .js-inlined-form.viewer.btn-sm { position: absolute; diff --git a/client/components/main/layouts.css b/client/components/main/layouts.css index 2b8c65c06..640d2dae1 100644 --- a/client/components/main/layouts.css +++ b/client/components/main/layouts.css @@ -446,12 +446,6 @@ a:not(.disabled).is-active i.fa { padding: 0; padding-top: 15px; } -.no-scrollbars { - scrollbar-width: none; -} -.no-scrollbars::-webkit-scrollbar { - display: none !important; -} @media screen and (max-width: 800px) { #content { margin: 1px 0px 0px 0px; @@ -476,7 +470,6 @@ a:not(.disabled).is-active i.fa { .select-authentication { width: 100%; } -.textBelowCustomLoginLogo, .auth-layout { display: flex; flex-direction: column; diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade index 988eb068a..109ef4507 100644 --- a/client/components/main/layouts.jade +++ b/client/components/main/layouts.jade @@ -37,13 +37,10 @@ template(name="userFormsLayout") else img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto") br - if currentSetting.textBelowCustomLoginLogo - hr - section.textBelowCustomLoginLogo - +viewer - | {{currentSetting.textBelowCustomLoginLogo}} - hr - section.auth-layout + if currentSetting.textBelowCustomLoginLogo + +viewer + | {{currentSetting.textBelowCustomLoginLogo}} + br section.auth-dialog if isLoading +loader diff --git a/client/components/settings/adminReports.jade b/client/components/settings/adminReports.jade index 1d6e35b16..5fc99f0b5 100644 --- a/client/components/settings/adminReports.jade +++ b/client/components/settings/adminReports.jade @@ -58,20 +58,18 @@ template(name="rulesReport") h1 {{_ 'rulesReportTitle'}} if resultsCount table - thead - tr - th Rule Title - th Board Title - th actionType - th activityType + tr + th Rule Title + th Board Title + th actionType + th activityType each rule in results - tbody - tr - td {{ rule.title }} - td {{ rule.boardTitle }} - td {{ rule.action.actionType }} - td {{ rule.trigger.activityType }} + tr + td {{ rule.title }} + td {{ rule.boardTitle }} + td {{ rule.action.actionType }} + td {{ rule.trigger.activityType }} else div {{_ 'no-results' }} @@ -79,24 +77,22 @@ template(name="filesReport") h1 {{_ 'filesReportTitle'}} if resultsCount table - thead - tr - th Filename - th.right Size (kB) - th MIME Type - th Attachment ID - th Board ID - th Card ID + tr + th Filename + th.right Size (kB) + th MIME Type + th Attachment ID + th Board ID + th Card ID each att in results - tbody - tr - td {{ att.name }} - td.right {{ fileSize att.size }} - td {{ att.type }} - td {{ att._id }} - td {{ att.meta.boardId }} - td {{ att.meta.cardId }} + tr + td {{ att.name }} + td.right {{ fileSize att.size }} + td {{ att.type }} + td {{ att._id }} + td {{ att.meta.boardId }} + td {{ att.meta.cardId }} else div {{_ 'no-results' }} @@ -104,24 +100,22 @@ template(name="cardsReport") h1 {{_ 'cardsReportTitle'}} if resultsCount table.table - thead - tr - th Card Title - th Board - th Swimlane - th List - th Members - th Assignees + tr + th Card Title + th Board + th Swimlane + th List + th Members + th Assignees each card in results - tbody - tr - td {{abbreviate card.title }} - td {{abbreviate card.board.title }} - td {{abbreviate card.swimlane.title }} - td {{abbreviate card.list.title }} - td {{userNames card.members }} - td {{userNames card.assignees }} + tr + td {{abbreviate card.title }} + td {{abbreviate card.board.title }} + td {{abbreviate card.swimlane.title }} + td {{abbreviate card.list.title }} + td {{userNames card.members }} + td {{userNames card.assignees }} else div {{_ 'no-results' }} @@ -129,25 +123,22 @@ template(name="boardsReport") h1 {{_ 'boardsReportTitle'}} if resultsCount table.table - thead - tr - th Title - th Id - th Permission - th Archived? - th Members - th Organizations - th Teams + tr + th Title + th Id + th Permission + th Archived? + th Members + th Organizations + th Teams + each board in results - tbody - tr - td {{abbreviate board.title }} - td {{abbreviate board._id }} - td {{ board.permission }} - td - = yesOrNo(board.archived) - td {{userNames board.members }} - td {{orgs board.orgs }} - td {{teams board.teams }} + tr + td {{abbreviate board.title }} + td {{abbreviate board._id }} + td {{ board.permission }} + td + = yesOrNo(board.archived) + td {{userNames board.members }} else div {{_ 'no-results' }} diff --git a/client/components/settings/adminReports.js b/client/components/settings/adminReports.js index 23a438347..ef364fb1b 100644 --- a/client/components/settings/adminReports.js +++ b/client/components/settings/adminReports.js @@ -170,27 +170,8 @@ class AdminReport extends BlazeComponent { .join(", "); return ret; } - teams(memberTeams) { - const ret = (memberTeams || []) - .map(_memberTeam => { - const _ret = ReactiveCache.getTeam(_memberTeam.teamId)?.teamDisplayName || _memberTeam.teamId; - return _ret; - }) - .join(", "); - return ret; - } - orgs(orgs) { - const ret = (orgs || []) - .map(_orgs => { - const _ret = ReactiveCache.getOrg(_orgs.orgId)?.orgDisplayName || _orgs.orgId; - return _ret; - }) - .join(", "); - return ret; - } }.register('boardsReport')); - (class extends AdminReport { collection = Cards; diff --git a/client/components/settings/peopleBody.jade b/client/components/settings/peopleBody.jade index 5f56a6142..2e4fe5021 100644 --- a/client/components/settings/peopleBody.jade +++ b/client/components/settings/peopleBody.jade @@ -73,7 +73,7 @@ template(name="people") template(name="orgGeneral") table - thead + tbody tr th {{_ 'displayName'}} th {{_ 'description'}} @@ -84,14 +84,12 @@ template(name="orgGeneral") th {{_ 'active'}} th +newOrgRow - tbody - tr each org in orgList +orgRow(orgId=org._id) template(name="teamGeneral") table - thead + tbody tr th {{_ 'displayName'}} th {{_ 'description'}} @@ -101,8 +99,6 @@ template(name="teamGeneral") th {{_ 'active'}} th +newTeamRow - tbody - tr each team in teamList +teamRow(teamId=team._id) @@ -110,7 +106,7 @@ template(name="peopleGeneral") #divAddOrRemoveTeamContainer +modifyTeamsUsers table - thead + tbody tr th +selectAllUser @@ -128,8 +124,6 @@ template(name="peopleGeneral") th {{_ 'teams'}} th +newUserRow - tbody - tr each user in peopleList +peopleRow(userId=user._id) @@ -500,9 +494,9 @@ template(name="modifyTeamsUsers") | {{_ 'r-action'}} .form-group.flex input.wekan-form-control#addAction(type="radio" name="action" value="true" checked="checked") - label(for=addAction) {{_ 'add'}} + span {{_ 'add'}} input.wekan-form-control#deleteAction(type="radio" name="action" value="false") - label(for=deleteAction) {{_ 'delete'}} + span {{_ 'delete'}} div.buttonsContainer input.primary.wide#addTeamBtn(type="submit" value="{{_ 'save'}}") input.primary.wide#cancelBtn(type="submit" value="{{_ 'cancel'}}") diff --git a/client/components/settings/settingBody.css b/client/components/settings/settingBody.css index 83a1a309d..11abe1d6d 100644 --- a/client/components/settings/settingBody.css +++ b/client/components/settings/settingBody.css @@ -7,13 +7,11 @@ display: -moz-flex; display: -ms-flexbox; display: flex; - height: 100%; } .setting-content { color: #727479; background: #dedede; width: 100%; - height: 100%; position: absolute; } .setting-content .content-title { @@ -58,8 +56,6 @@ -moz-user-select: text; -ms-user-select: text; user-select: text; - max-height: 100%; - overflow: auto; } .setting-content .content-body .main-body ul li { padding: 0.5rem 0.5rem; @@ -72,31 +68,26 @@ padding: 0 0.5rem; } .setting-content .content-body .main-body ul li .admin-announcement, -.setting-content .content-body .main-body ul li .admin-accessibility, .setting-content .content-body .main-body ul li .invite-people, .setting-content .content-body .main-body ul li .layout { padding-left: 20px; } .setting-content .content-body .main-body ul li .admin-announcement li, -.setting-content .content-body .main-body ul li .admin-accessibility li, .setting-content .content-body .main-body ul li .invite-people li, .setting-content .content-body .main-body ul li .layout li { min-width: 500px; } .setting-content .content-body .main-body ul li .admin-announcement li ul.no-margin-bottom, -.setting-content .content-body .main-body ul li .admin-accessibility li ul.no-margin-bottom, .setting-content .content-body .main-body ul li .invite-people li ul.no-margin-bottom, .setting-content .content-body .main-body ul li .layout li ul.no-margin-bottom { margin-bottom: 0; } .setting-content .content-body .main-body ul li .admin-announcement li .bg-white a, -.setting-content .content-body .main-body ul li .admin-accessibility li .bg-white a, .setting-content .content-body .main-body ul li .invite-people li .bg-white a, .setting-content .content-body .main-body ul li .layout li .bg-white a { background: #f7f7f7; } .setting-content .content-body .main-body ul li .admin-announcement li .bg-white a.is-checked, -.setting-content .content-body .main-body ul li .admin-accessibility li .bg-white a.is-checked, .setting-content .content-body .main-body ul li .invite-people li .bg-white a.is-checked, .setting-content .content-body .main-body ul li .layout li .bg-white a.is-checked { background: #fff; diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 3e6ec2af6..2a8a282e2 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -30,10 +30,6 @@ template(name="setting") a.js-setting-menu(data-id="announcement-setting") i.fa.fa-bullhorn | {{_ 'admin-announcement'}} - //li - // a.js-setting-menu(data-id="accessibility-setting") - // i.fa.fa-universal-access - // | {{_ 'accessibility'}} li a.js-setting-menu(data-id="layout-setting") i.fa.fa-object-group @@ -56,8 +52,6 @@ template(name="setting") +tableVisibilityModeSettings else if announcementSetting.get +announcementSettings - else if accessibilitySetting.get - +accessibilitySettings else if layoutSetting.get +layoutSettings else if webhookSetting.get @@ -143,32 +137,34 @@ template(name='tableVisibilityModeSettings') .title {{_ 'tableVisibilityMode-allowPrivateOnly'}} .form-group.flex input.wekan-form-control#accounts-allowPrivateOnly(type="radio" name="allowPrivateOnly" value="true" checked="{{#if allowPrivateOnly}}checked{{/if}}") - label {{_ 'yes'}} + span {{_ 'yes'}} input.wekan-form-control#accounts-allowPrivateOnly(type="radio" name="allowPrivateOnly" value="false" checked="{{#unless allowPrivateOnly}}checked{{/unless}}") - label {{_ 'no'}} + span {{_ 'no'}} button.js-tableVisibilityMode-save.primary {{_ 'save'}} template(name='accountSettings') ul#account-setting.setting-detail + li + button.js-all-hide-system-messages.primary {{_ 'hide-system-messages-of-all-users'}} li.accounts-form .title {{_ 'accounts-allowEmailChange'}} .form-group.flex input.wekan-form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="true" checked="{{#if allowEmailChange}}checked{{/if}}") - label {{_ 'yes'}} + span {{_ 'yes'}} input.wekan-form-control#accounts-allowEmailChange(type="radio" name="allowEmailChange" value="false" checked="{{#unless allowEmailChange}}checked{{/unless}}") - label {{_ 'no'}} + span {{_ 'no'}} .title {{_ 'accounts-allowUserNameChange'}} .form-group.flex input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="true" checked="{{#if allowUserNameChange}}checked{{/if}}") - label {{_ 'yes'}} + span {{_ 'yes'}} input.wekan-form-control#accounts-allowUserNameChange(type="radio" name="allowUserNameChange" value="false" checked="{{#unless allowUserNameChange}}checked{{/unless}}") - label {{_ 'no'}} + span {{_ 'no'}} .title {{_ 'accounts-allowUserDelete'}} .form-group.flex input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="true" checked="{{#if allowUserDelete}}checked{{/if}}") - label {{_ 'yes'}} + span {{_ 'yes'}} input.wekan-form-control#accounts-allowUserDelete(type="radio" name="allowUserDelete" value="false" checked="{{#unless allowUserDelete}}checked{{/unless}}") - label {{_ 'no'}} + span {{_ 'no'}} button.js-accounts-save.primary {{_ 'save'}} template(name='announcementSettings') @@ -187,33 +183,8 @@ template(name='announcementSettings') li button.js-announcement-save.primary {{_ 'save'}} -template(name='accessibilitySettings') - ul#accessibility-setting.setting-detail - li - a.flex.js-toggle-accessibility - .materialCheckBox(class="{{#if currentAccessibility.enabled}}is-checked{{/if}}") - - span {{_ 'admin-accessibility-active'}} - li - .title {{_ 'accessibility-title'}} - .form-group - input.wekan-form-control#accessibility-title(type="text", placeholder="" value="{{currentSetting.accessibilityTitle}}") - li - .accessibility-content(class="{{#if currentAccessibility.enabled}}{{else}}hide{{/if}}") - ul - li - .title {{_ 'admin-accessibility-title'}} - textarea#admin-accessibility.wekan-form-control= currentAccessibility.accessibilityTitle - li - .title {{_ 'admin-accessibility-content'}} - textarea#admin-accessibility.wekan-form-control= currentAccessibility.accessibilityContent - li - button.js-accessibility-save.primary {{_ 'save'}} - template(name='layoutSettings') ul#layout-setting.setting-detail - li - button.js-all-boards-hide-activities.primary {{_ 'hide-activities-of-all-boards'}} li.layout-form .title {{_ 'oidc-button-text'}} .form-group @@ -230,9 +201,9 @@ template(name='layoutSettings') .title {{_ 'display-authentication-method'}} .form-group.flex input.wekan-form-control#display-authentication-method(type="radio" name="displayAuthenticationMethod" value="true" checked="{{#if currentSetting.displayAuthenticationMethod}}checked{{/if}}") - label {{_ 'yes'}} + span {{_ 'yes'}} input.wekan-form-control#display-authentication-method(type="radio" name="displayAuthenticationMethod" value="false" checked="{{#unless currentSetting.displayAuthenticationMethod}}checked{{/unless}}") - label {{_ 'no'}} + span {{_ 'no'}} li.layout-form .title {{_ 'default-authentication-method'}} +selectAuthenticationMethod(authenticationMethod=currentSetting.defaultAuthenticationMethod) @@ -247,9 +218,9 @@ template(name='layoutSettings') .title {{_ 'hide-logo'}} .form-group.flex input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="true" checked="{{#if currentSetting.hideLogo}}checked{{/if}}") - label {{_ 'yes'}} + span {{_ 'yes'}} input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}") - label {{_ 'no'}} + span {{_ 'no'}} li.layout-form .title {{_ 'custom-login-logo-image-url'}} .form-group @@ -286,16 +257,16 @@ template(name='layoutSettings') .title {{_ 'hide-card-counter-list'}} .form-group.flex input.wekan-form-control#hide-card-counter-list(type="radio" name="hideCardCounterList" value="true" checked="{{#if currentSetting.hideCardCounterList}}checked{{/if}}") - label {{_ 'yes'}} + span {{_ 'yes'}} input.wekan-form-control#hide-card-counter-list(type="radio" name="hideCardCounterList" value="false" checked="{{#unless currentSetting.hideCardCounterList}}checked{{/unless}}") - label {{_ 'no'}} + span {{_ 'no'}} li.layout-form .title {{_ 'hide-board-member-list'}} .form-group.flex input.wekan-form-control#hide-board-member-list(type="radio" name="hideBoardMemberList" value="true" checked="{{#if currentSetting.hideBoardMemberList}}checked{{/if}}") - label {{_ 'yes'}} + span {{_ 'yes'}} input.wekan-form-control#hide-board-member-list(type="radio" name="hideBoardMemberList" value="false" checked="{{#unless currentSetting.hideBoardMemberList}}checked{{/unless}}") - label {{_ 'no'}} + span {{_ 'no'}} li button.js-save-layout.primary {{_ 'save'}} diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js index be8322af3..8cb782933 100644 --- a/client/components/settings/settingBody.js +++ b/client/components/settings/settingBody.js @@ -89,9 +89,6 @@ BlazeComponent.extendComponent({ toggleHideBoardMemberList() { $('#hide-board-member-list').toggleClass('is-checked'); }, - toggleAccessibilityPageEnabled() { - $('#accessibility-page-enabled').toggleClass('is-checked'); - }, toggleDisplayAuthenticationMethod() { $('#display-authentication-method').toggleClass('is-checked'); }, @@ -242,15 +239,7 @@ BlazeComponent.extendComponent({ const displayAuthenticationMethod = $('input[name=displayAuthenticationMethod]:checked').val() === 'true'; const defaultAuthenticationMethod = $('#defaultAuthenticationMethod').val(); -/* - const accessibilityPageEnabled = $('input[name=accessibilityPageEnabled]:checked').val() === 'true'; - const accessibilityTitle = $('#accessibility-title') - .val() - .trim(); - const accessibilityContent = $('#accessibility-content') - .val() - .trim(); -*/ + const spinnerName = $('#spinnerName').val(); try { @@ -276,11 +265,6 @@ BlazeComponent.extendComponent({ legalNotice, }, }); -/* - accessibilityPageEnabled, - accessibilityTitle, - accessibilityContent, -*/ } catch (e) { return; } finally { @@ -317,7 +301,6 @@ BlazeComponent.extendComponent({ 'click a.js-toggle-hide-logo': this.toggleHideLogo, 'click a.js-toggle-hide-card-counter-list': this.toggleHideCardCounterList, 'click a.js-toggle-hide-board-member-list': this.toggleHideBoardMemberList, - 'click a.js-toggle-accessibility-page-enabled': this.toggleAccessibilityPageEnabled, 'click button.js-save-layout': this.saveLayout, 'click a.js-toggle-display-authentication-method': this .toggleDisplayAuthenticationMethod, @@ -353,12 +336,12 @@ BlazeComponent.extendComponent({ allowUserDelete() { return AccountSettings.findOne('accounts-allowUserDelete').booleanValue; }, - allBoardsHideActivities() { - Meteor.call('setAllBoardsHideActivities', (err, ret) => { + allHideSystemMessages() { + Meteor.call('setAllUsersHideSystemMessages', (err, ret) => { if (!err && ret) { if (ret === true) { const message = `${TAPi18n.__( - 'now-activities-of-all-boards-are-hidden', + 'now-system-messages-of-all-users-are-hidden', )}`; alert(message); } @@ -376,7 +359,7 @@ BlazeComponent.extendComponent({ 'click button.js-accounts-save': this.saveAccountsChange, }, { - 'click button.js-all-boards-hide-activities': this.allBoardsHideActivities, + 'click button.js-all-hide-system-messages': this.allHideSystemMessages, }, ]; }, @@ -393,12 +376,12 @@ BlazeComponent.extendComponent({ allowPrivateOnly() { return TableVisibilityModeSettings.findOne('tableVisibilityMode-allowPrivateOnly').booleanValue; }, - allBoardsHideActivities() { - Meteor.call('setAllBoardsHideActivities', (err, ret) => { + allHideSystemMessages() { + Meteor.call('setAllUsersHideSystemMessages', (err, ret) => { if (!err && ret) { if (ret === true) { const message = `${TAPi18n.__( - 'now-activities-of-all-boards-are-hidden', + 'now-system-messages-of-all-users-are-hidden', )}`; alert(message); } @@ -416,7 +399,7 @@ BlazeComponent.extendComponent({ 'click button.js-tableVisibilityMode-save': this.saveTableVisibilityChange, }, { - 'click button.js-all-boards-hide-activities': this.allBoardsHideActivities, + 'click button.js-all-hide-system-messages': this.allHideSystemMessages, }, ]; }, diff --git a/client/components/settings/translationBody.jade b/client/components/settings/translationBody.jade index 46d41d011..073207bde 100644 --- a/client/components/settings/translationBody.jade +++ b/client/components/settings/translationBody.jade @@ -34,14 +34,13 @@ template(name="translation") template(name="translationGeneral") table - thead + tbody tr th {{_ 'language'}} th {{_ 'text'}} th {{_ 'translation-text'}} th +newTranslationRow - tbody each translation in translationList +translationRow(translationId=translation._id) diff --git a/client/components/sidebar/sidebar.css b/client/components/sidebar/sidebar.css index 7877be8e8..4d0488b95 100644 --- a/client/components/sidebar/sidebar.css +++ b/client/components/sidebar/sidebar.css @@ -3,31 +3,34 @@ top: 0; bottom: 0; right: 0; - overflow-y: scroll; } -.sidebar { +.sidebar .sidebar-shadow { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; background: #f7f7f7; box-shadow: -10px 0px 5px -10px #b3b3b3; + z-index: 10; } .sidebar-xmark { position: absolute; - right: 0px; - top: 0px; + right: 10px; + top: 5px; font-size: 25px; - padding: 10px; -} -.sidebar-xmark:hover { - background: rgba(0,0,0,0.15); -} -.sidebar-actions { - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - padding: 10px 10px 0px 10px; } .sidebar .sidebar-content { - padding: 0 12px; + padding: 12px; + margin-bottom: 1.6em; + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + overflow-x: hidden; + overflow-y: auto; + width: 90%; } .sidebar .sidebar-content .hide-btn { display: none; @@ -103,23 +106,21 @@ margin-right: 10px; } .sidebar .sidebar-shortcuts { + position: absolute; + margin-left: 40%; + padding: 0; top: 7px; - font-size: 1em; + font-size: 0.8em; line-height: 1.6em; color: #999; } -.sidebar .sidebar-shortcuts .sidebar-btn { - margin-left: 3px; - margin-right: 3px; -} .board-sidebar { - display: none; - width: 30vw; - z-index: 100; + width: 548px; + right: -548px; transition: top 0.1s, right 0.1s, width 0.1s; } .board-sidebar.is-open { - display: block; + right: 0; } .board-widget h4 { margin: 5px 0; diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 3bfb44011..7fdf006ba 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -1,61 +1,36 @@ template(name="sidebar") - .board-sidebar.sidebar(class="{{#if isOpen}}is-open{{/if}} {{#unless isVerticalScrollbars}}no-scrollbars{{/unless}}") + .board-sidebar.sidebar(class="{{#if isOpen}}is-open{{/if}}") //a.sidebar-tongue.js-toggle-sidebar( // class="{{#if isTongueHidden}}is-hidden{{/if}}", // title="{{showTongueTitle}}") // i.fa.fa-navicon - .sidebar-actions - .sidebar-shortcuts - a.sidebar-btn.js-shortcuts(title="{{_ 'keyboard-shortcuts' }}") - i.fa.fa-keyboard-o - span {{_ 'keyboard-shortcuts' }} - a.sidebar-btn.js-keyboard-shortcuts-toggle( - title="{{#if isKeyboardShortcuts}}{{_ 'keyboard-shortcuts-enabled'}}{{else}}{{_ 'keyboard-shortcuts-disabled'}}{{/if}}") - i.fa(class="fa-solid fa-{{#if isKeyboardShortcuts}}check-square-o{{else}}ban{{/if}}") + .sidebar-shadow a.sidebar-xmark.js-close-sidebar ✕ - .sidebar-content.js-board-sidebar-content - //a.hide-btn.js-hide-sidebar - // i.fa.fa-navicon - unless isDefaultView - h2 - a.fa.fa-chevron-left.js-back-home - = getViewTitle - if isOpen - +Template.dynamic(template=getViewTemplate) + .sidebar-content.js-board-sidebar-content + //a.hide-btn.js-hide-sidebar + // i.fa.fa-navicon + unless isDefaultView + h2 + a.fa.fa-chevron-left.js-back-home + = getViewTitle + if isOpen + +Template.dynamic(template=getViewTemplate) template(name='homeSidebar') hr +membersWidget hr +labelsWidget - hr ul#cards.label-text-hidden a.flex.js-toggle-minicard-label-text(title="{{_ 'hide-minicard-label-text'}}") span {{_ 'hide-minicard-label-text'}} b   .materialCheckBox(class="{{#if hiddenMinicardLabelText}}is-checked{{/if}}") - ul#cards.vertical-scrollbars-toggle - a.flex.js-vertical-scrollbars-toggle(title="{{_ 'enable-vertical-scrollbars'}}") - span {{_ 'enable-vertical-scrollbars'}} - b   - .materialCheckBox(class="{{#if isVerticalScrollbars}}is-checked{{/if}}") - ul#cards.show-week-of-year-toggle - a.flex.js-show-week-of-year-toggle(title="{{_ 'show-week-of-year'}}") - span {{_ 'show-week-of-year'}} - b   - .materialCheckBox(class="{{#if isShowWeekOfYear}}is-checked{{/if}}") hr unless currentUser.isNoComments - h3.activity-title + h3 i.fa.fa-comments-o | {{_ 'activities'}} - - .material-toggle-switch(title="{{_ 'show-activities'}}") - if showActivities - input.toggle-switch(type="checkbox" id="toggleShowActivitiesBoard" checked="checked") - else - input.toggle-switch(type="checkbox" id="toggleShowActivitiesBoard") - label.toggle-label(for="toggleShowActivitiesBoard") +activities(mode="board") template(name="membersWidget") @@ -65,6 +40,11 @@ template(name="membersWidget") a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}") i.board-header-btn-icon.fa.fa-cog | {{_ 'boardMenuPopup-title'}} + .board-widget.board-widget-members + .sidebar-shortcuts + a.board-header-btn.js-shortcuts(title="{{_ 'keyboard-shortcuts' }}") + i.fa.fa-keyboard-o + span {{_ 'keyboard-shortcuts' }} hr h3 i.fa.fa-users @@ -195,7 +175,7 @@ template(name="boardInfoOnMyBoardsPopup") template(name="boardCardSettingsPopup") form.board-card-settings - h3 {{_ 'show-on-card'}}, {{_ 'show-on-minicard'}} + h3 {{_ 'show-on-card'}} div.check-div a.flex.js-field-has-receiveddate(class="{{#if allowsReceivedDate}}is-checked{{/if}}") .materialCheckBox(class="{{#if allowsReceivedDate}}is-checked{{/if}}") @@ -226,18 +206,14 @@ template(name="boardCardSettingsPopup") span i.fa.fa-users | {{_ 'members'}} + div.check-div a.flex.js-field-has-creator(class="{{#if allowsCreator}}is-checked{{/if}}") .materialCheckBox(class="{{#if allowsCreator}}is-checked{{/if}}") span i.fa.fa-user | {{_ 'creator'}} - div.check-div - a.flex.js-field-has-creator-on-minicard(class="{{#if allowsCreatorOnMinicard}}is-checked{{/if}}") - .materialCheckBox(class="{{#if allowsCreatorOnMinicard}}is-checked{{/if}}") - span - i.fa.fa-user - | {{_ 'creator-on-minicard'}} + div.check-div a.flex.js-field-has-assignee(class="{{#if allowsAssignee}}is-checked{{/if}}") .materialCheckBox(class="{{#if allowsAssignee}}is-checked{{/if}}") @@ -262,12 +238,6 @@ template(name="boardCardSettingsPopup") span i.fa.fa-sort | {{_ 'card-sorting-by-number'}} - div.check-div - a.flex.js-field-has-card-sorting-by-number-on-minicard(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}") - .materialCheckBox(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}") - span - i.fa.fa-sort - | {{_ 'card-sorting-by-number-on-minicard'}} div.check-div a.flex.js-field-has-card-show-lists(class="{{#if allowsShowLists}}is-checked{{/if}}") .materialCheckBox(class="{{#if allowsShowLists}}is-checked{{/if}}") @@ -301,12 +271,6 @@ template(name="boardCardSettingsPopup") i.fa.fa-align-left | {{_ 'description'}} | {{_ 'custom-field-text'}} - div.check-div - a.flex.js-field-has-description-text-on-minicard(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}") - .materialCheckBox(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}") - span - i.fa.fa-align-left - | {{_ 'description-on-minicard'}} div.check-div a.flex.js-field-has-checklists(class="{{#if allowsChecklists}}is-checked{{/if}}") .materialCheckBox(class="{{#if allowsChecklists}}is-checked{{/if}}") @@ -325,19 +289,6 @@ template(name="boardCardSettingsPopup") span i.fa.fa-paperclip | {{_ 'attachments'}} - div.check-div - a.flex.js-field-has-badge-attachment-on-minicard(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}") - .materialCheckBox(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}") - span - i.fa.fa-paperclip - | {{_ 'badge-attachment-on-minicard'}} - div.check-div - a.flex.js-field-has-cover-attachment-on-minicard(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}") - .materialCheckBox(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}") - span - i.fa.fa-book - i.fa.fa-picture-o - | {{_ 'cover-attachment-on-minicard'}} //div.check-div // a.flex.js-field-has-comments(class="{{#if allowsComments}}is-checked{{/if}}") // .materialCheckBox(class="{{#if allowsComments}}is-checked{{/if}}") @@ -351,6 +302,35 @@ template(name="boardCardSettingsPopup") // i.fa.fa-history // | {{_ 'activities'}} +template(name="boardMinicardSettingsPopup") + form.board-minicard-settings + h3 {{_ 'show-on-minicard'}} + div.check-div + a.flex.js-field-has-description-text-on-minicard(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsDescriptionTextOnMinicard}}is-checked{{/if}}") + span + i.fa.fa-align-left + | {{_ 'description-on-minicard'}} + div.check-div + a.flex.js-field-has-cover-attachment-on-minicard(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsCoverAttachmentOnMinicard}}is-checked{{/if}}") + span + i.fa.fa-book + i.fa.fa-picture-o + | {{_ 'cover-attachment-on-minicard'}} + div.check-div + a.flex.js-field-has-badge-attachment-on-minicard(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsBadgeAttachmentOnMinicard}}is-checked{{/if}}") + span + i.fa.fa-paperclip + | {{_ 'badge-attachment-on-minicard'}} + div.check-div + a.flex.js-field-has-card-sorting-by-number-on-minicard(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}") + .materialCheckBox(class="{{#if allowsCardSortingByNumberOnMinicard}}is-checked{{/if}}") + span + i.fa.fa-sort + | {{_ 'card-sorting-by-number-on-minicard'}} + template(name="boardSubtaskSettingsPopup") form.board-subtask-settings h3 {{_ 'show-parent-in-minicard'}} @@ -493,6 +473,10 @@ template(name="boardMenuPopup") a.js-card-settings i.fa.fa-id-card-o | {{_ 'card-settings'}} + li + a.js-minicard-settings + i.fa.fa-id-card-o + | {{_ 'minicard-settings'}} li a.js-subtask-settings i.fa.fa-sitemap diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 28b7408fc..1594525b6 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -105,16 +105,6 @@ BlazeComponent.extendComponent({ else return `${TAPi18n.__('sidebar-open')}`; }, - isKeyboardShortcuts() { - const user = ReactiveCache.getCurrentUser(); - return user && user.isKeyboardShortcuts(); - }, - - isVerticalScrollbars() { - const user = ReactiveCache.getCurrentUser(); - return user && user.isVerticalScrollbars(); - }, - events() { return [ { @@ -136,15 +126,6 @@ BlazeComponent.extendComponent({ 'click .js-shortcuts'() { FlowRouter.go('shortcuts'); }, - 'click .js-keyboard-shortcuts-toggle'() { - ReactiveCache.getCurrentUser().toggleKeyboardShortcuts(); - }, - 'click .js-vertical-scrollbars-toggle'() { - ReactiveCache.getCurrentUser().toggleVerticalScrollbars(); - }, - 'click .js-show-week-of-year-toggle'() { - ReactiveCache.getCurrentUser().toggleShowWeekOfYear(); - }, 'click .js-close-sidebar'() { Sidebar.toggle() }, @@ -155,7 +136,7 @@ BlazeComponent.extendComponent({ Blaze.registerHelper('Sidebar', () => Sidebar); -BlazeComponent.extendComponent({ +Template.homeSidebar.helpers({ hiddenMinicardLabelText() { currentUser = ReactiveCache.getCurrentUser(); if (currentUser) { @@ -166,28 +147,7 @@ BlazeComponent.extendComponent({ return false; } }, - isVerticalScrollbars() { - const user = ReactiveCache.getCurrentUser(); - return user && user.isVerticalScrollbars(); - }, - isShowWeekOfYear() { - const user = ReactiveCache.getCurrentUser(); - return user && user.isShowWeekOfYear(); - }, - showActivities() { - let ret = Utils.getCurrentBoard().showActivities ?? false; - return ret; - }, - events() { - return [ - { - 'click #toggleShowActivitiesBoard'() { - Utils.getCurrentBoard().toggleShowActivities(); - }, - }, - ]; - }, -}).register('homeSidebar'); +}); Template.boardInfoOnMyBoardsPopup.helpers({ hideCardCounterList() { @@ -276,6 +236,7 @@ Template.boardMenuPopup.events({ 'click .js-import-board': Popup.open('chooseBoardSource'), 'click .js-subtask-settings': Popup.open('boardSubtaskSettings'), 'click .js-card-settings': Popup.open('boardCardSettings'), + 'click .js-minicard-settings': Popup.open('boardMinicardSettings'), 'click .js-export-board': Popup.open('exportBoard'), }); @@ -953,11 +914,11 @@ BlazeComponent.extendComponent({ }, allowsCreator() { - return this.currentBoard.allowsCreator ?? false; - }, - - allowsCreatorOnMinicard() { - return this.currentBoard.allowsCreatorOnMinicard ?? false; + return ( + this.currentBoard.allowsCreator === null || + this.currentBoard.allowsCreator === undefined || + this.currentBoard.allowsCreator + ); }, allowsMembers() { @@ -1023,22 +984,6 @@ BlazeComponent.extendComponent({ ); }, - allowsDescriptionTextOnMinicard() { - return this.currentBoard.allowsDescriptionTextOnMinicard; - }, - - allowsCoverAttachmentOnMinicard() { - return this.currentBoard.allowsCoverAttachmentOnMinicard; - }, - - allowsBadgeAttachmentOnMinicard() { - return this.currentBoard.allowsBadgeAttachmentOnMinicard; - }, - - allowsCardSortingByNumberOnMinicard() { - return this.currentBoard.allowsCardSortingByNumberOnMinicard; - }, - boards() { const ret = ReactiveCache.getBoards( { @@ -1161,19 +1106,6 @@ BlazeComponent.extendComponent({ this.currentBoard.allowsCreator, ); }, - 'click .js-field-has-creator-on-minicard'(evt) { - evt.preventDefault(); - this.currentBoard.allowsCreatorOnMinicard = !this.currentBoard.allowsCreatorOnMinicard; - this.currentBoard.setAllowsCreatorOnMinicard(this.currentBoard.allowsCreatorOnMinicard); - $(`.js-field-has-creator-on-minicard ${MCB}`).toggleClass( - CKCLS, - this.currentBoard.allowsCreatorOnMinicard, - ); - $('.js-field-has-creator-on-minicard').toggleClass( - CKCLS, - this.currentBoard.allowsCreatorOnMinicard, - ); - }, 'click .js-field-has-members'(evt) { evt.preventDefault(); this.currentBoard.allowsMembers = !this.currentBoard.allowsMembers; @@ -1309,22 +1241,6 @@ BlazeComponent.extendComponent({ this.currentBoard.allowsCardNumber, ); }, - 'click .js-field-has-description-text-on-minicard'(evt) { - evt.preventDefault(); - this.currentBoard.allowsDescriptionTextOnMinicard = !this.currentBoard - .allowsDescriptionTextOnMinicard; - this.currentBoard.setallowsDescriptionTextOnMinicard( - this.currentBoard.allowsDescriptionTextOnMinicard, - ); - $(`.js-field-has-description-text-on-minicard ${MCB}`).toggleClass( - CKCLS, - this.currentBoard.allowsDescriptionTextOnMinicard, - ); - $('.js-field-has-description-text-on-minicard').toggleClass( - CKCLS, - this.currentBoard.allowsDescriptionTextOnMinicard, - ); - }, 'click .js-field-has-description-text'(evt) { evt.preventDefault(); this.currentBoard.allowsDescriptionText = !this.currentBoard @@ -1402,6 +1318,74 @@ BlazeComponent.extendComponent({ this.currentBoard.allowsActivities, ); }, + }, + ]; + }, +}).register('boardCardSettingsPopup'); + + +BlazeComponent.extendComponent({ + onCreated() { + this.currentBoard = Utils.getCurrentBoard(); + }, + + allowsDescriptionTextOnMinicard() { + return this.currentBoard.allowsDescriptionTextOnMinicard; + }, + + allowsCoverAttachmentOnMinicard() { + return this.currentBoard.allowsCoverAttachmentOnMinicard; + }, + + allowsBadgeAttachmentOnMinicard() { + return this.currentBoard.allowsBadgeAttachmentOnMinicard; + }, + + allowsCardSortingByNumberOnMinicard() { + return this.currentBoard.allowsCardSortingByNumberOnMinicard; + }, + + lists() { + return ReactiveCache.getLists( + { + boardId: this.currentBoard._id, + archived: false, + }, + { + sort: ['title'], + }, + ); + }, + + hasLists() { + return this.lists().length > 0; + }, + + isListSelected() { + return ( + this.currentBoard.dateSettingsDefaultBoardId === this.currentData()._id + ); + }, + + events() { + return [ + { + 'click .js-field-has-description-text-on-minicard'(evt) { + evt.preventDefault(); + this.currentBoard.allowsDescriptionTextOnMinicard = !this.currentBoard + .allowsDescriptionTextOnMinicard; + this.currentBoard.setallowsDescriptionTextOnMinicard( + this.currentBoard.allowsDescriptionTextOnMinicard, + ); + $(`.js-field-has-description-text-on-minicard ${MCB}`).toggleClass( + CKCLS, + this.currentBoard.allowsDescriptionTextOnMinicard, + ); + $('.js-field-has-description-text-on-minicard').toggleClass( + CKCLS, + this.currentBoard.allowsDescriptionTextOnMinicard, + ); + }, 'click .js-field-has-cover-attachment-on-minicard'(evt) { evt.preventDefault(); this.currentBoard.allowsCoverAttachmentOnMinicard = !this.currentBoard @@ -1453,7 +1437,7 @@ BlazeComponent.extendComponent({ }, ]; }, -}).register('boardCardSettingsPopup'); +}).register('boardMinicardSettingsPopup'); BlazeComponent.extendComponent({ onCreated() { diff --git a/client/components/swimlanes/swimlaneHeader.jade b/client/components/swimlanes/swimlaneHeader.jade index d14686163..edc6ad56a 100644 --- a/client/components/swimlanes/swimlaneHeader.jade +++ b/client/components/swimlanes/swimlaneHeader.jade @@ -24,17 +24,9 @@ template(name="swimlaneFixedHeader") | {{isTitleDefault title}} .swimlane-header-menu unless currentUser.isCommentOnly - a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}") + if currentUser.isBoardAdmin + a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}") a.fa.fa-navicon.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}") - //// TODO: Collapse Swimlane: make button working, etc. - //unless collapsed - // a.js-collapse-swimlane(title="{{_ 'collapse'}}") - // i.fa.fa-arrow-down.swimlane-header-collapse-down - // i.fa.fa-arrow-up.swimlane-header-collapse-up - //if collapsed - // a.js-collapse-swimlane(title="{{_ 'uncollapse'}}") - // i.fa.fa-arrow-up.swimlane-header-collapse-up - // i.fa.fa-arrow-down.swimlane-header-collapse-down unless isTouchScreen if isShowDesktopDragHandles a.swimlane-header-handle.handle.fa.fa-arrows.js-swimlane-header-handle diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js index 17988f454..afc90846e 100644 --- a/client/components/swimlanes/swimlaneHeader.js +++ b/client/components/swimlanes/swimlaneHeader.js @@ -18,25 +18,10 @@ BlazeComponent.extendComponent({ swimlane.rename(newTitle.trim()); } }, - collapsed(check = undefined) { - const swimlane = Template.currentData(); - const status = swimlane.isCollapsed(); - if (check === undefined) { - // just check - return status; - } else { - swimlane.collapse(!status); - return !status; - } - }, events() { return [ { - 'click .js-collapse-swimlane'(event) { - event.preventDefault(); - this.collapsed(!this.collapsed()); - }, 'click .js-open-swimlane-menu': Popup.open('swimlaneAction'), 'click .js-open-add-swimlane-menu': Popup.open('swimlaneAdd'), submit: this.editTitle, @@ -143,7 +128,7 @@ BlazeComponent.extendComponent({ Swimlanes.insert({ title, boardId: Session.get('currentBoard'), - sort: sortValue.base || 0, + sort: sortValue.base, type: swimlaneType, }); @@ -224,7 +209,7 @@ BlazeComponent.extendComponent({ swimlaneHeightValue() { const swimlane = this.currentData(); const board = swimlane.boardId; - return ReactiveCache.getCurrentUser().getSwimlaneHeight(board, swimlane._id); + return Meteor.user().getSwimlaneHeight(board, swimlane._id); }, events() { diff --git a/client/components/swimlanes/swimlanes.css b/client/components/swimlanes/swimlanes.css index 373de8ab3..3270f801f 100644 --- a/client/components/swimlanes/swimlanes.css +++ b/client/components/swimlanes/swimlanes.css @@ -1,3 +1,43 @@ +/* +// Minimize swimlanes start https://www.w3schools.com/howto/howto_js_accordion.asp + +.accordion + cursor: pointer + width: 30px + height: 20px + border: none + outline: none + font-size: 18px + transition: 0.4s + padding-top: 0px + margin-top: 0px + +.accordion:after + // Unicode triagle right: + content: '\25B6' + color: #777 + font-weight: bold + float: left + +.active:after + // Unicode triangle down: + content: '\25BC' + +.panel + width: 100% + max-height: 0 + overflow: hidden + transition: max-height 0.2s ease-out + margin: 0px + padding: 0px + +// Minimize swimlanes end https://www.w3schools.com/howto/howto_js_accordion.asp +*/ +@media screen and (min-width: 801px) { + .swimlane.ui-sortable { + width: max-content; + } +} [class=swimlane] { position: sticky; left: 0; @@ -6,30 +46,7 @@ background: #dedede; display: flex; flex-direction: row; - overflow: auto; - max-height: 100%; -} -.swimlane-header-menu .swimlane-header-collapse-down { - font-size: 50%; - color: #a6a6a6; - position: absolute; - top: 5px; - left: 100px; -} -.swimlane-header-menu .swimlane-header-collapse-up { - font-size: 50%; - color: #a6a6a6; - position: absolute; - bottom: 5px; - left: 100px; -} -.swimlane-header-menu .swimlane-header-uncollapse-up { - font-size: 50%; - color: #a6a6a6; -} -.swimlane-header-menu .swimlane-header-uncollapse-down { - font-size: 50%; - color: #a6a6a6; + overflow: 0; } .swimlane.placeholder { background-color: rgba(0,0,0,0.2); @@ -153,7 +170,7 @@ color: #4d4d4d !important; } .swimlane-silver { - background: #ccc !important; + background: unset !important; color: #4d4d4d !important; } .swimlane-peachpuff { diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade index 0afe02dbe..c44b3958a 100644 --- a/client/components/swimlanes/swimlanes.jade +++ b/client/components/swimlanes/swimlanes.jade @@ -1,8 +1,8 @@ template(name="swimlane") - .swimlane.nodragscroll + .swimlane +swimlaneHeader unless collapseSwimlane - .swimlane.js-lists.js-swimlane.dragscroll(id="swimlane-{{_id}}" + .swimlane.js-lists.js-swimlane(id="swimlane-{{_id}}" style="height:{{swimlaneHeight}};") if isMiniScreen if currentListIsInThisSwimlane _id @@ -24,7 +24,7 @@ template(name="swimlane") +cardDetails(currentCard) template(name="listsGroup") - .swimlane.list-group.js-lists.dragscroll + .swimlane.list-group.js-lists if isMiniScreen if currentList +list(currentList) @@ -46,8 +46,8 @@ template(name="listsGroup") template(name="addListForm") unless currentUser.isWorker - unless currentUser.isCommentOnly - .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") + .list.list-composer.js-list-composer(class="{{#if isMiniScreen}}mini-list{{/if}}") + if currentUser.isBoardAdmin .list-header-add +inlinedForm(autoclose=false) input.list-name-input.full-line(type="text" placeholder="{{_ 'add-list'}}" diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 09ff81db3..fb190c157 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -225,7 +225,7 @@ BlazeComponent.extendComponent({ }, swimlaneHeight() { - const user = ReactiveCache.getCurrentUser(); + const user = Meteor.user(); const swimlane = Template.currentData(); const height = user.getSwimlaneHeight(swimlane.boardId, swimlane._id); return height == -1 ? "auto" : (height + "px"); @@ -288,7 +288,7 @@ BlazeComponent.extendComponent({ Template.swimlane.helpers({ canSeeAddList() { - return ReactiveCache.getCurrentUser().isBoardAdmin(); + return Meteor.user().isBoardAdmin(); }, }); diff --git a/client/components/users/userAvatar.css b/client/components/users/userAvatar.css index b65a98bd9..a26ed10e4 100644 --- a/client/components/users/userAvatar.css +++ b/client/components/users/userAvatar.css @@ -5,7 +5,6 @@ float: left; height: 30px; width: 30px; - margin: .3vh; cursor: pointer; user-select: none; z-index: 1; diff --git a/client/components/users/userAvatar.jade b/client/components/users/userAvatar.jade index e6c51ef5e..db123f282 100644 --- a/client/components/users/userAvatar.jade +++ b/client/components/users/userAvatar.jade @@ -26,9 +26,9 @@ template(name="orgAvatar") template(name="boardOrgRow") tr if orgData.orgIsActive - td {{ orgData.orgDisplayName }} - else td {{ orgData.orgDisplayName }} + else + td {{ orgData.orgDisplayName }} td if currentUser.isBoardAdmin a.member.orgOrTeamMember.add-member.js-manage-board-removeOrg(title="{{_ 'remove-from-board'}}") @@ -39,9 +39,9 @@ template(name="boardOrgRow") template(name="boardTeamRow") tr if teamData.teamIsActive - td {{ teamData.teamDisplayName }} - else td {{ teamData.teamDisplayName }} + else + td {{ teamData.teamDisplayName }} td if currentUser.isBoardAdmin a.member.orgOrTeamMember.add-member.js-manage-board-removeTeam(title="{{_ 'remove-from-board'}}") diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade index 14fa948d7..ae14b0dd9 100644 --- a/client/components/users/userHeader.jade +++ b/client/components/users/userHeader.jade @@ -77,10 +77,6 @@ template(name="memberMenuPopup") a.js-change-language i.fa.fa-flag | {{_ 'changeLanguagePopup-title'}} - //li - // a.js-support - // i.fa.fa-question-circle - // | {{_ 'support'}} unless isSandstorm hr ul.pop-over-list @@ -143,12 +139,6 @@ template(name="editProfilePopup") div input#deleteButton.primary.wide(type="button" value="{{_ 'delete'}}") - -template(name="supportPopup") - ul.pop-over-list - li - | Support popup text will be editable later. - template(name="changePasswordPopup") +atForm(state='changePwd') @@ -163,6 +153,12 @@ template(name="changeLanguagePopup") template(name="changeSettingsPopup") ul.pop-over-list + //li + // a.js-toggle-system-messages + // i.fa.fa-comments-o + // | {{_ 'hide-system-messages'}} + // if hiddenSystemMessages + // i.fa.fa-check //li // a.js-toggle-desktop-drag-handles // i.fa.fa-arrows diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js index 117921277..22fd808b4 100644 --- a/client/components/users/userHeader.js +++ b/client/components/users/userHeader.js @@ -77,7 +77,6 @@ Template.memberMenuPopup.events({ 'click .js-change-avatar': Popup.open('changeAvatar'), 'click .js-change-password': Popup.open('changePassword'), 'click .js-change-language': Popup.open('changeLanguage'), - 'click .js-support': Popup.open('support'), 'click .js-logout'(event) { event.preventDefault(); @@ -284,6 +283,16 @@ Template.changeLanguagePopup.events({ }); Template.changeSettingsPopup.helpers({ + hiddenSystemMessages() { + const currentUser = ReactiveCache.getCurrentUser(); + if (currentUser) { + return (currentUser.profile || {}).hasHiddenSystemMessages; + } else if (window.localStorage.getItem('hasHiddenSystemMessages')) { + return true; + } else { + return false; + } + }, rescueCardDescription() { const currentUser = ReactiveCache.getCurrentUser(); if (currentUser) { @@ -316,7 +325,7 @@ Template.changeSettingsPopup.helpers({ }); }, startDayOfWeek() { - currentUser = ReactiveCache.getCurrentUser(); + currentUser = Meteor.user(); if (currentUser) { return currentUser.getStartDayOfWeek(); } else { @@ -334,7 +343,7 @@ Template.changeSettingsPopup.events({ return ret; }, 'click .js-toggle-desktop-drag-handles'() { - const currentUser = ReactiveCache.getCurrentUser(); + currentUser = Meteor.user(); if (currentUser) { Meteor.call('toggleDesktopDragHandles'); } else if (window.localStorage.getItem('showDesktopDragHandles')) { @@ -343,6 +352,16 @@ Template.changeSettingsPopup.events({ window.localStorage.setItem('showDesktopDragHandles', 'true'); } }, + 'click .js-toggle-system-messages'() { + currentUser = Meteor.user(); + if (currentUser) { + Meteor.call('toggleSystemMessages'); + } else if (window.localStorage.getItem('hasHiddenSystemMessages')) { + window.localStorage.removeItem('hasHiddenSystemMessages'); + } else { + window.localStorage.setItem('hasHiddenSystemMessages', 'true'); + } + }, 'click .js-rescue-card-description'() { Meteor.call('toggleRescueCardDescription') }, @@ -356,7 +375,7 @@ Template.changeSettingsPopup.events({ templateInstance.$('#start-day-of-week').val(), 10, ); - const currentUser = ReactiveCache.getCurrentUser(); + const currentUser = Meteor.user(); if (isNaN(minLimit) || minLimit < -1) { minLimit = -1; } diff --git a/client/config/blazeHelpers.js b/client/config/blazeHelpers.js index 10e558b37..5ac27f3bf 100644 --- a/client/config/blazeHelpers.js +++ b/client/config/blazeHelpers.js @@ -47,7 +47,7 @@ Blaze.registerHelper('isTouchScreenOrShowDesktopDragHandles', () => Blaze.registerHelper('moment', (...args) => { args.pop(); // hash const [date, format] = args; - return moment(date).format(format ?? 'LLLL'); + return moment(date).format(format); }); Blaze.registerHelper('canModifyCard', () => diff --git a/client/lib/datepicker.js b/client/lib/datepicker.js index f298a752d..6fe612ec3 100644 --- a/client/lib/datepicker.js +++ b/client/lib/datepicker.js @@ -6,11 +6,10 @@ import moment from 'moment/min/moment-with-locales'; function adjustedTimeFormat() { return moment .localeData() - .longDateFormat('LT'); + .longDateFormat('LT') + .replace(/HH/i, 'H'); } -// .replace(/HH/i, 'H'); - export class DatePicker extends BlazeComponent { template() { return 'datepicker'; diff --git a/client/lib/escapeActions.js b/client/lib/escapeActions.js index 986611326..1bf32a7d9 100644 --- a/client/lib/escapeActions.js +++ b/client/lib/escapeActions.js @@ -123,7 +123,6 @@ EscapeActions = { // the shortcut sould work on textarea and inputs as well. Mousetrap.bindGlobal('esc', () => { EscapeActions.executeLowest(); - Sidebar.hide(); }); // On a left click on the document, we try to exectute one escape action (eg, diff --git a/client/lib/exportHTML.js b/client/lib/exportHTML.js index 04b2c7892..1d00ccea5 100644 --- a/client/lib/exportHTML.js +++ b/client/lib/exportHTML.js @@ -57,9 +57,6 @@ window.ExportHtml = Popup => { Array.from( document.querySelectorAll('#header-main-bar .board-header-btns'), ).forEach(elem => elem.remove()); - Array.from( - document.querySelectorAll('.js-pop-over, .pop-over'), - ).forEach(elem => elem.remove()); Array.from(document.querySelectorAll('.list-composer')).forEach(elem => elem.remove(), ); @@ -155,50 +152,6 @@ window.ExportHtml = Popup => { ); }; - const getWebFonts = () => { - fontUrls = []; - - for (let sheet of document.styleSheets) { - // Get the base URL of the stylesheet - let baseUrl = sheet.href ? new URL(sheet.href).origin : window.location.origin; - - try { - for (let rule of sheet.cssRules) { - if (rule.type === CSSRule.FONT_FACE_RULE) { - let src = rule.style.getPropertyValue('src'); - let urlMatch = src.match(/url\(["']?(.+?)["']?\)/); - if (urlMatch) { - let fontUrl = urlMatch[1]; - - // Resolve the URL relative to the stylesheet's base URL - let resolvedUrl = new URL(fontUrl, baseUrl); - fontUrls.push(resolvedUrl.href); // Using .href to get the absolute URL - } - } - } - } catch (e) { - console.log('Access to stylesheet blocked:', e); - } - } - - return fontUrls; - }; - - const downloadFonts = async(elements, zip) => { - await asyncForEach(elements, async elem => { - const response = await fetch(elem); - const responseBody = await response.blob(); - const filename = elem.split('/') - .pop() - .split('?') - .shift() - .split('#') - .shift(); - const fileFullPath = `webfonts/${filename}`; - zip.file(fileFullPath, responseBody); - }); - } - const downloadCardCovers = async (elements, zip, boardSlug) => { await asyncForEach(elements, async elem => { const response = await fetch( @@ -241,7 +194,6 @@ window.ExportHtml = Popup => { await downloadStylesheets(getStylesheetList(), zip); await downloadSrcAttached(getSrcAttached(), zip, boardSlug); await downloadCardCovers(getCardCovers(), zip, boardSlug); - await downloadFonts(getWebFonts(), zip); addBoardHTMLToZip(boardSlug, zip); diff --git a/client/lib/filter.js b/client/lib/filter.js index 66ed01a36..e74c95478 100644 --- a/client/lib/filter.js +++ b/client/lib/filter.js @@ -237,6 +237,7 @@ class SetFilter { if (this._indexOfVal(val) === -1) { this._selectedElements.push(val); this._dep.changed(); + showFilterSidebar(); } } diff --git a/client/lib/keyboard.js b/client/lib/keyboard.js index f817e9aa3..3c06f8ce5 100644 --- a/client/lib/keyboard.js +++ b/client/lib/keyboard.js @@ -3,46 +3,6 @@ import { ReactiveCache } from '/imports/reactiveCache'; // XXX There is no reason to define these shortcuts globally, they should be // attached to a template (most of them will go in the `board` template). -window.addEventListener('keydown', (e) => { - // Only handle event if coming from body - if (e.target !== document.body) return; - - // Only handle event if it's in another language - if (String.fromCharCode(e.which).toLowerCase() === e.key) return; - - // Trigger the corresponding action - Mousetrap.handleKey(String.fromCharCode(e.which).toLowerCase(), [], {type: "keypress"}); -}); - -// Overwrite the stopCallback to allow for more keyboard shortcut customizations -Mousetrap.stopCallback = (event, element) => { - // Are shortcuts enabled for the user? - if (ReactiveCache.getCurrentUser() && !ReactiveCache.getCurrentUser().isKeyboardShortcuts()) - return true; - - // Always handle escape - if (event.keyCode === 27) - return false; - - // Make sure there are no selected characters - if (window.getSelection().type === "Range") - return true; - - // Decide what the current element is - const currentElement = event.target || document.activeElement; - - // If the current element is editable, we don't want to trigger an event - if (currentElement.isContentEditable) - return true; - - // Make sure we are not in an input element - if (currentElement instanceof HTMLInputElement || currentElement instanceof HTMLSelectElement || currentElement instanceof HTMLTextAreaElement) - return true; - - // We can trigger events! - return false; -} - function getHoveredCardId() { const card = $('.js-minicard:hover').get(0); if (!card) return null; @@ -73,14 +33,6 @@ Mousetrap.bind('q', () => { } }); -Mousetrap.bind('a', () => { - const currentBoardId = Session.get('currentBoard'); - const currentUserId = Meteor.userId(); - if (currentBoardId && currentUserId) { - Filter.assignees.toggle(currentUserId); - } -}); - Mousetrap.bind('x', () => { if (Filter.isActive()) { Filter.reset(); @@ -133,7 +85,7 @@ Mousetrap.bind(numbArray, (evt, key) => { const cardIds = MultiSelection.getSelectedCardIds(); for (const cardId of cardIds) { - card = Cards.findOne(cardId); + card = ReactiveCache.getCard(cardId); if(num <= board.labels.length) { card.removeLabel(labels[num-1]["_id"]); @@ -157,7 +109,7 @@ Mousetrap.bind(numArray, (evt, key) => { const cardIds = MultiSelection.getSelectedCardIds(); for (const cardId of cardIds) { - card = Cards.findOne(cardId); + card = ReactiveCache.getCard(cardId); if(num <= board.labels.length) { card.addLabel(labels[num-1]["_id"]); @@ -171,7 +123,7 @@ Mousetrap.bind(numArray, (evt, key) => { return; } if (ReactiveCache.getCurrentUser().isBoardMember()) { - const card = Cards.findOne(cardId); + const card = ReactiveCache.getCard(cardId); if(num <= board.labels.length) { card.toggleLabel(labels[num-1]["_id"]); @@ -179,57 +131,6 @@ Mousetrap.bind(numArray, (evt, key) => { } }); -Mousetrap.bind(_.range(1, 10).map(x => `ctrl+alt+${x}`), (evt, key) => { - // Make sure the current user is defined - if (!ReactiveCache.getCurrentUser()) - return; - - // Make sure the current user is a board member - if (!ReactiveCache.getCurrentUser().isBoardMember()) - return; - - const memberIndex = parseInt(key.split("+").pop()) - 1; - const currentBoard = Utils.getCurrentBoard(); - const validBoardMembers = currentBoard.memberUsers().filter(member => member.isBoardMember()); - - if (memberIndex >= validBoardMembers.length) - return; - - const memberId = validBoardMembers[memberIndex]._id; - - if (MultiSelection.isActive()) { - for (const cardId of MultiSelection.getSelectedCardIds()) - Cards.findOne(cardId).toggleAssignee(memberId); - } else { - const cardId = getSelectedCardId(); - - if (!cardId) - return; - - Cards.findOne(cardId).toggleAssignee(memberId); - } -}); - -Mousetrap.bind('m', evt => { - const cardId = getSelectedCardId(); - if (!cardId) { - return; - } - - const currentUserId = Meteor.userId(); - if (currentUserId === null) { - return; - } - - if (ReactiveCache.getCurrentUser().isBoardMember()) { - const card = Cards.findOne(cardId); - card.toggleAssignee(currentUserId); - // We should prevent scrolling in card when spacebar is clicked - // This should do it according to Mousetrap docs, but it doesn't - evt.preventDefault(); - } -}); - Mousetrap.bind('space', evt => { const cardId = getSelectedCardId(); if (!cardId) { @@ -242,7 +143,7 @@ Mousetrap.bind('space', evt => { } if (ReactiveCache.getCurrentUser().isBoardMember()) { - const card = Cards.findOne(cardId); + const card = ReactiveCache.getCard(cardId); card.toggleMember(currentUserId); // We should prevent scrolling in card when spacebar is clicked // This should do it according to Mousetrap docs, but it doesn't @@ -250,7 +151,7 @@ Mousetrap.bind('space', evt => { } }); -const archiveCard = evt => { +Mousetrap.bind('c', evt => { const cardId = getSelectedCardId(); if (!cardId) { return; @@ -262,40 +163,8 @@ const archiveCard = evt => { } if (Utils.canModifyBoard()) { - const card = Cards.findOne(cardId); + const card = ReactiveCache.getCard(cardId); card.archive(); - // We should prevent scrolling in card when spacebar is clicked - // This should do it according to Mousetrap docs, but it doesn't - evt.preventDefault(); - } -}; - -// Archive card has multiple shortcuts -Mousetrap.bind('c', archiveCard); -Mousetrap.bind('-', archiveCard); - -// Same as above, this time for Persian keyboard. -// https://github.com/wekan/wekan/pull/5589#issuecomment-2516776519 -Mousetrap.bind('÷', archiveCard); - -Mousetrap.bind('n', evt => { - const cardId = getSelectedCardId(); - if (!cardId) { - return; - } - - const currentUserId = Meteor.userId(); - if (currentUserId === null) { - return; - } - - if (Utils.canModifyBoard()) { - // Find the current hovered card - const card = Cards.findOne(cardId); - - // Find the button and click it - $(`#js-list-${card.listId} .list-body .minicards .open-minicard-composer`).click(); - // We should prevent scrolling in card when spacebar is clicked // This should do it according to Mousetrap docs, but it doesn't evt.preventDefault(); @@ -312,14 +181,6 @@ Template.keyboardShortcuts.helpers({ keys: ['q'], action: 'shortcut-filter-my-cards', }, - { - keys: ['a'], - action: 'shortcut-filter-my-assigned-cards', - }, - { - keys: ['n'], - action: 'add-card-to-bottom-of-list', - }, { keys: ['f'], action: 'shortcut-toggle-filterbar', @@ -346,14 +207,10 @@ Template.keyboardShortcuts.helpers({ }, { keys: ['SPACE'], - action: 'shortcut-add-self', - }, - { - keys: ['m'], action: 'shortcut-assign-self', }, { - keys: ['c', '÷', '-'], + keys: ['c'], action: 'archive-card', }, { @@ -364,9 +221,5 @@ Template.keyboardShortcuts.helpers({ keys: ['shift + number keys 1-9'], action: 'remove-labels-multiselect' }, - { - keys: ['ctrl + alt + number keys 1-9'], - action: 'toggle-assignees' - }, ], }); diff --git a/client/lib/utils.js b/client/lib/utils.js index 15896e5c3..cfc313f62 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -4,11 +4,10 @@ Utils = { setBackgroundImage(url) { const currentBoard = Utils.getCurrentBoard(); if (currentBoard.backgroundImageURL !== undefined) { - $(".board-wrapper").css({"background":"url(" + currentBoard.backgroundImageURL + ")","background-size":"cover"}); + $(".board-wrapper,.board-wrapper .board-canvas").css({"background":"url(" + currentBoard.backgroundImageURL + ")","background-size":"cover"}); $(".swimlane,.swimlane .list,.swimlane .list .list-body,.swimlane .list:first-child .list-body").css({"background-color":"transparent"}); - $(".minicard").css({"opacity": "0.9"}); - } else if (currentBoard["background-color"]) { - currentBoard.setColor(currentBoard["background-color"]); + } else if (currentBoard.color !== undefined) { + currentBoard.setColor(currentBoard.color); } }, /** returns the current board id diff --git a/config/const.js b/config/const.js index 60b602643..21bac0ce4 100644 --- a/config/const.js +++ b/config/const.js @@ -16,8 +16,6 @@ export const ALLOWED_BOARD_COLORS = [ 'modern', 'moderndark', 'exodark', - 'cleandark', - 'cleanlight', ]; export const ALLOWED_COLORS = [ 'white', diff --git a/config/router.js b/config/router.js index 888393cfd..cdbf106c1 100644 --- a/config/router.js +++ b/config/router.js @@ -55,30 +55,6 @@ FlowRouter.route('/public', { }, }); -FlowRouter.route('/accessibility', { - name: 'accessibility', - triggersEnter: [AccountsTemplates.ensureSignedIn], - action() { - Session.set('currentBoard', null); - Session.set('currentList', null); - Session.set('currentCard', null); - Session.set('popupCardId', null); - Session.set('popupCardBoardId', null); - - Filter.reset(); - Session.set('sortBy', ''); - EscapeActions.executeAll(); - - Utils.manageCustomUI(); - Utils.manageMatomo(); - - BlazeLayout.render('defaultLayout', { - headerBar: 'accessibilityHeaderBar', - content: 'accessibility', - }); - }, -}); - FlowRouter.route('/b/:id/:slug', { name: 'board', action(params) { diff --git a/docker-compose.yml b/docker-compose.yml index f2e47e168..69738e6c1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,5 @@ +version: '2' + # Note: Do not add single quotes '' to variables. Having spaces still works without quotes where required. #--------------------------------------------------------------------------------------------------------- # ==== CREATING USERS AND LOGGING IN TO WEKAN ==== @@ -10,13 +12,13 @@ # NOTE: MongoDB has changed from 3.x to 4.x, in that case you need backup/restore with --noIndexRestore # see https://github.com/wekan/wekan/wiki/Backup # 1) Stop Wekan: -# docker compose stop +# docker-compose stop # 2) Remove old Wekan app (wekan-app only, not that wekan-db container that has all your data) # docker rm wekan-app # 3) Get newest docker-compose.yml from https://github.com/wekan/wekan to have correct image, # for example: "image: quay.io/wekan/wekan" or version tag "image: quay.io/wekan/wekan:v4.52" # 4) Start Wekan: -# docker compose up -d +# docker-compose up -d #---------------------------------------------------------------------------------- # ==== OPTIONAL: DEDICATED DOCKER USER ==== # 1) Optionally create a dedicated user for Wekan, for example: @@ -36,14 +38,14 @@ # ---------------------------------------------------------------------------------- # ==== USAGE OF THIS docker-compose.yml ==== # 1) For seeing does Wekan work, try this and check with your web browser: -# docker compose up +# docker-compose up # 2) Stop Wekan and start Wekan in background: -# docker compose stop -# docker compose up -d +# docker-compose stop +# docker-compose up -d # 3) See running Docker containers: # docker ps # 4) Stop Docker containers: -# docker compose stop +# docker-compose stop # ---------------------------------------------------------------------------------- # ===== INSIDE DOCKER CONTAINERS, AND BACKUP/RESTORE ==== # https://github.com/wekan/wekan/wiki/Backup @@ -140,7 +142,7 @@ services: - wekan-tier #------------------------------------------------------------------------------------- # ==== BUILD wekan-app DOCKER CONTAINER FROM SOURCE, if you uncomment these ==== - # ==== and use commands: docker compose up -d --build + # ==== and use commands: docker-compose up -d --build #build: # context: . # dockerfile: Dockerfile @@ -389,8 +391,6 @@ services: #- OAUTH2_CA_CERT=ABCD1234 # Use OAuth2 ADFS additional changes. Also needs OAUTH2_ENABLED=true setting. #- OAUTH2_ADFS_ENABLED=false - # Azure AD B2C. https://github.com/wekan/wekan/issues/5242 - #- OAUTH2_B2C_ENABLED=false # OAuth2 login style: popup or redirect. #- OAUTH2_LOGIN_STYLE=redirect # Application GUID captured during app registration: @@ -442,15 +442,11 @@ services: # OAuth2 login style: popup or redirect. #- OAUTH2_LOGIN_STYLE=redirect #- OAUTH2_CLIENT_ID= - #- OAUTH2_SERVER_URL= + #- OAUTH2_SERVER_URL=/auth #- OAUTH2_AUTH_ENDPOINT=/realms//protocol/openid-connect/auth #- OAUTH2_USERINFO_ENDPOINT=/realms//protocol/openid-connect/userinfo #- OAUTH2_TOKEN_ENDPOINT=/realms//protocol/openid-connect/token #- OAUTH2_SECRET= - #- OAUTH2_ID_MAP=sub - #- OAUTH2_USERNAME_MAP=preferred_username - #- OAUTH2_EMAIL_MAP=email - #- OAUTH2_FULLNAME_MAP=name #----------------------------------------------------------------- # ==== OAUTH2 DOORKEEPER ==== # https://github.com/wekan/wekan/issues/1874 @@ -577,14 +573,10 @@ services: # If the sync of the users should be done in the background #- LDAP_BACKGROUND_SYNC=false # - # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds + # At which interval does the background task sync. # The format must be as specified in: # https://bunkat.github.io/later/parsers.html#text - #- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours - # At which interval does the background task sync in milliseconds. - # Leave this unset, so it uses default, and does not crash. - # https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 - - LDAP_BACKGROUND_SYNC_INTERVAL='' + #- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hour # #- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false # @@ -593,7 +585,7 @@ services: # If using LDAPS: LDAP_ENCRYPTION=ssl #- LDAP_ENCRYPTION=false # - # The certification for the LDAPS server. Certificate needs to be included in this docker compose.yml file. + # The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file. #- LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+G2FIdAgIC...-----END CERTIFICATE----- # # Reject Unauthorized Certificate diff --git a/docker-compose.yml-arm64 b/docker-compose.yml-arm64 index ab0ae56d9..85ea0f555 100644 --- a/docker-compose.yml-arm64 +++ b/docker-compose.yml-arm64 @@ -575,14 +575,10 @@ services: # If the sync of the users should be done in the background #- LDAP_BACKGROUND_SYNC=false # - # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds + # At which interval does the background task sync. # The format must be as specified in: # https://bunkat.github.io/later/parsers.html#text - #- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours - # At which interval does the background task sync in milliseconds. - # Leave this unset, so it uses default, and does not crash. - # https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 - - LDAP_BACKGROUND_SYNC_INTERVAL='' + #- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hour # #- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false # diff --git a/docs/API/New-card-with-Python3-and-REST-API.md b/docs/API/New-card-with-Python3-and-REST-API.md deleted file mode 100644 index 8507875e9..000000000 --- a/docs/API/New-card-with-Python3-and-REST-API.md +++ /dev/null @@ -1,41 +0,0 @@ -Wekan provides a python script to ease the call of the REST API from command line interface. - -# Context - -- [API Login to get Bearer token](REST-API#example-call---as-form-data) -- [API docs and examples for various programming languages](https://wekan.github.io/api/), there is Boards / Export for exporting board with API -- In the right menu, scroll down REST API Docs etc links =====> -- Wekan-Gogs integration with Node.js https://github.com/wekan/wekan-gogs - -# Install - -You need python3. - -Windows -``` -choco install python3 -# REBOOT -pip3 install pip --upgrade -pip3 install json -python3 wekan.py -``` -Debian/Ubuntu -``` -sudo apt-get -y install python3 python3-pip python3-simplejson -sudo pip3 install pip --upgrade -chmod +x wekan.py -./wekan.py -``` - -# Usage - -Copy the api.py script to you machine. [Newest Wekan Python CLI api.py here](https://raw.githubusercontent.com/wekan/wekan/master/api.py). - -Then, in this script, look for and change: -- wekanurl: https://boards.example.com => Your Wekan URL -- username (could be username or username@example.com) -- Only works with password login admin user. Does not work with LDAP, OAuth2 etc. - -Keep in mind your Wekan credentials are potentially accessible in this file. - -Then call it without any argument to see if everything is all right. You should just get usage examples. diff --git a/docs/API/REST-API-Boards.md b/docs/API/REST-API-Boards.md deleted file mode 100644 index 7715a4e18..000000000 --- a/docs/API/REST-API-Boards.md +++ /dev/null @@ -1,56 +0,0 @@ -# Disclaimer - -This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new). - -## Information about boards of user -``` -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - http://localhost:3000/api/users/XQMZgynx9M79qTtQc/boards -``` - -## Add/Remove Board Member and Change Role - -[Add/Remove Board Member and Change Role admin/normal/nocomments/commentonly](REST-API-Role). - -## The admin takes the ownership of ALL boards of the user (archived and not archived) where the user is admin on. - -| URL | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| `/api/users/:id` | `yes` | `PUT` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X PUT \ - http://localhost:3000/api/users/ztKvBTzCqmyJ77on8 \ - -d '{ "action": "takeOwnership" }' -``` - -## Create board - -Required: -- "title":"Board title here" -- "owner":"ABCDE12345" <= User ID in Wekan. Not username or email. - -Optional, and defaults: -- "isAdmin":"true" -- "isActive":"true" -- "isNoComments":"false" -- "isCommentOnly":"false" -- "permission":"private" <== Set to "public" if you want public Wekan board -- "color":"belize" <== Board color: belize, nephritis, pomegranate, pumpkin, wisteria, midnight. - -Wekan logo - -Example: -``` -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards \ - -d '{"title":"Board title here","owner":"ABCDE12345","permission":"private","color":"nephritis"}' -``` - -## In Wekan code - -If you believe that code is the best documentation, be our guest: [models/cards.js](https://github.com/wekan/wekan/blob/main/models/boards.js "Board API code") \ No newline at end of file diff --git a/docs/API/REST-API-Cards.md b/docs/API/REST-API-Cards.md deleted file mode 100644 index fd9706b92..000000000 --- a/docs/API/REST-API-Cards.md +++ /dev/null @@ -1,94 +0,0 @@ -# Disclaimer - -This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new). - -# Retrieve cards by swimlane id - -| API URL / Code Link | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| [/api/boards/:boardId/swimlanes/:swimlaneId/cards](https://github.com/wekan/wekan/blob/c115046a7c86b30ab5deb8762d3ef7a5ea3f4f90/models/cards.js#L487) | `yes` | `GET` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -X GET \ - http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/swimlanes/PgTuf6sFJsaxto5dC/cards -``` -## Result example - -```shell -{ - "_id": "AzEeHS7KAGeYZCcak", - "title": "Create Auth Code", - "description": "Create Auth Code for application.", - "listId": "RPRtDTQMKpShpgqoj" - }, - { -... -``` - -# Add Card to List-Board-Swimlane - -| API URL / Code Link | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| [/api/boards/:boardId/lists/:listId/cards](https://github.com/wekan/wekan/blob/c115046a7c86b30ab5deb8762d3ef7a5ea3f4f90/models/cards.js#L487) | `yes` | `POST` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/lists/PgTuf6sFJsaxto5dC/cards \ - -d '{ "title": "Card title text", "description": "Card description text", "authorId": "The appropriate existing userId", "swimlaneId": "The destination swimlaneId" }' -``` -## Result example -The new card's ID is returned in the format: -```json -{ - "_id": "W9m9YxQKT6zZrKzRW" -} -``` - -# Update a card -You can change (any of) the card's title, list, and description. - -| API URL / Code Link | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| [/api/boards/:boardId/lists/:fromListId/cards/:cardId](https://github.com/wekan/wekan/blob/c115046a7c86b30ab5deb8762d3ef7a5ea3f4f90/models/cards.js#L520) | `yes` | `PUT` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X PUT \ - http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/lists/PgTuf6sFJsaxto5dC/cards/ssrNX9CvXvPxuC5DE \ - -d '{ "title": "New title text", "listId": "New destination listId", "description": "New description text" }' -``` -## Result example -The card's ID is returned in the format: -```json -{ - "_id": "W9m9YxQKT6zZrKzRW" -} -``` -# Delete a card - -| API URL / Code Link | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| [/api/boards/:boardId/lists/:listId/cards/:cardId](https://github.com/wekan/wekan/blob/c115046a7c86b30ab5deb8762d3ef7a5ea3f4f90/models/cards.js#L554) | `yes` | `DELETE` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X DELETE \ - http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/lists/PgTuf6sFJsaxto5dC/cards/ssrNX9CvXvPxuC5DE \ - -d '{ "authorId": "the appropriate existing userId"}' -``` -## Result example -The card's ID is returned in the format: -```json -{ - "_id": "W9m9YxQKT6zZrKzRW" -} -``` - -# In Wekan code - -If you believe that code is the best documentation, be our guest: [models/cards.js](https://github.com/wekan/wekan/blob/main/models/cards.js "Card API code") \ No newline at end of file diff --git a/docs/API/REST-API-Checklists.md b/docs/API/REST-API-Checklists.md deleted file mode 100644 index 3eb93261e..000000000 --- a/docs/API/REST-API-Checklists.md +++ /dev/null @@ -1,148 +0,0 @@ -## In Wekan code - -## 1) Checklists - -wekan/models/checklists.js at bottom: - -``` - JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists', function (req, res) { - Authentication.checkUserId( req.userId); - const paramCardId = req.params.cardId; - const checklists = Checklists.find({ cardId: paramCardId }).map(function (doc) { - return { - _id: doc._id, - title: doc.title, - }; - }); - if (checklists) { - JsonRoutes.sendResult(res, { - code: 200, - data: checklists, - }); - } else { - JsonRoutes.sendResult(res, { - code: 500, - }); - } - }); - - JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId', function (req, res) { - Authentication.checkUserId( req.userId); - const paramChecklistId = req.params.checklistId; - const paramCardId = req.params.cardId; - const checklist = Checklists.findOne({ _id: paramChecklistId, cardId: paramCardId }); - if (checklist) { - checklist.items = ChecklistItems.find({checklistId: checklist._id}).map(function (doc) { - return { - _id: doc._id, - title: doc.title, - isFinished: doc.isFinished, - }; - }); - JsonRoutes.sendResult(res, { - code: 200, - data: checklist, - }); - } else { - JsonRoutes.sendResult(res, { - code: 500, - }); - } - }); - - JsonRoutes.add('POST', '/api/boards/:boardId/cards/:cardId/checklists', function (req, res) { - Authentication.checkUserId( req.userId); - - const paramCardId = req.params.cardId; - const id = Checklists.insert({ - title: req.body.title, - cardId: paramCardId, - sort: 0, - }); - if (id) { - req.body.items.forEach(function (item, idx) { - ChecklistItems.insert({ - cardId: paramCardId, - checklistId: id, - title: item.title, - sort: idx, - }); - }); - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: id, - }, - }); - } else { - JsonRoutes.sendResult(res, { - code: 400, - }); - } - }); - - JsonRoutes.add('DELETE', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId', function (req, res) { - Authentication.checkUserId( req.userId); - const paramChecklistId = req.params.checklistId; - Checklists.remove({ _id: paramChecklistId }); - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: paramChecklistId, - }, - }); - }); -``` - -### 2) Checklist Items - -wekan/models/checklistItems.js at bottom: - -``` -JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) { - Authentication.checkUserId( req.userId); - const paramItemId = req.params.itemId; - const checklistItem = ChecklistItems.findOne({ _id: paramItemId }); - if (checklistItem) { - JsonRoutes.sendResult(res, { - code: 200, - data: checklistItem, - }); - } else { - JsonRoutes.sendResult(res, { - code: 500, - }); - } - }); - - JsonRoutes.add('PUT', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) { - Authentication.checkUserId( req.userId); - - const paramItemId = req.params.itemId; - - if (req.body.hasOwnProperty('isFinished')) { - ChecklistItems.direct.update({_id: paramItemId}, {$set: {isFinished: req.body.isFinished}}); - } - if (req.body.hasOwnProperty('title')) { - ChecklistItems.direct.update({_id: paramItemId}, {$set: {title: req.body.title}}); - } - - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: paramItemId, - }, - }); - }); - - JsonRoutes.add('DELETE', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) { - Authentication.checkUserId( req.userId); - const paramItemId = req.params.itemId; - ChecklistItems.direct.remove({ _id: paramItemId }); - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: paramItemId, - }, - }); -``` diff --git a/docs/API/REST-API-Code.md b/docs/API/REST-API-Code.md deleted file mode 100644 index 03775a284..000000000 --- a/docs/API/REST-API-Code.md +++ /dev/null @@ -1,33 +0,0 @@ -## Using Meteor with REST API - -### 1) Adding API - -``` -meteor add simple:json-routes -``` - -https://atmospherejs.com/simple/json-routes - -https://github.com/wekan/wekan/blob/main/.meteor/packages#L139 - -### 2) API code - -At models directory: - -https://github.com/wekan/wekan/blob/main/models/users.js#L2018 - -### 3) Login to API as JSON - -https://github.com/wekan/wekan/wiki/REST-API#example-call---as-json - -Also see at wiki right menu about REST API. - -### 4) Use Python3 CLI to login to API and do REST API action - -https://github.com/wekan/wekan/blob/main/api.py - -### 4) API Docs - -https://wekan.github.io/api/ - -Building API Docs: https://github.com/wekan/wekan/blob/main/releases/rebuild-docs.sh \ No newline at end of file diff --git a/docs/API/REST-API-Custom-Fields.md b/docs/API/REST-API-Custom-Fields.md deleted file mode 100644 index e52b966a1..000000000 --- a/docs/API/REST-API-Custom-Fields.md +++ /dev/null @@ -1,78 +0,0 @@ -1) Login as Admin user as Form Data to get Bearer token -https://github.com/wekan/wekan/wiki/REST-API#example-call---as-form-data - -2) There needs to be Custom Field added to board -https://wekan.github.io/api/v4.42/#wekan-rest-api-customfields - -3) Custom Field at board and card will have same `_id` -https://wekan.github.io/api/v4.42/#put_board_list_card - -4) When writing Custom Field value to card, like text field, content type needs to be "application/json" and the string needs to be an array: -``` --d '{ "customFields" : [ { "_id" : "oZHkpcaxDHnbkbqGo", "value" : "foobar" } ] }' -``` -5) For other types of Custom Fields, you can look at Custom Field structure from MongoDB database with [nosqlbooster](https://nosqlbooster.com/downloads) that can also login through ssh to server Wekan snap MongoDB port 27019 - - -## In Wekan code (old) - -wekan/models/customFields.js , at bottom - -``` -//CUSTOM FIELD REST API -if (Meteor.isServer) { - JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields', function (req, res) { - Authentication.checkUserId( req.userId); - const paramBoardId = req.params.boardId; - JsonRoutes.sendResult(res, { - code: 200, - data: CustomFields.find({ boardId: paramBoardId }), - }); - }); - - JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) { - Authentication.checkUserId( req.userId); - const paramBoardId = req.params.boardId; - const paramCustomFieldId = req.params.customFieldId; - JsonRoutes.sendResult(res, { - code: 200, - data: CustomFields.findOne({ _id: paramCustomFieldId, boardId: paramBoardId }), - }); - }); - - JsonRoutes.add('POST', '/api/boards/:boardId/custom-fields', function (req, res) { - Authentication.checkUserId( req.userId); - const paramBoardId = req.params.boardId; - const id = CustomFields.direct.insert({ - name: req.body.name, - type: req.body.type, - settings: req.body.settings, - showOnCard: req.body.showOnCard, - boardId: paramBoardId, - }); - - const customField = CustomFields.findOne({_id: id, boardId: paramBoardId }); - customFieldCreation(req.body.authorId, customField); - - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: id, - }, - }); - }); - - JsonRoutes.add('DELETE', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) { - Authentication.checkUserId( req.userId); - const paramBoardId = req.params.boardId; - const id = req.params.customFieldId; - CustomFields.remove({ _id: id, boardId: paramBoardId }); - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: id, - }, - }); - }); -} -``` \ No newline at end of file diff --git a/docs/API/REST-API-Integrations.md b/docs/API/REST-API-Integrations.md deleted file mode 100644 index bdedf3c19..000000000 --- a/docs/API/REST-API-Integrations.md +++ /dev/null @@ -1,191 +0,0 @@ -## In Wekan code - -wekan/models/integrations.js at bottom - -``` - // Get all integrations in board - JsonRoutes.add('GET', '/api/boards/:boardId/integrations', function(req, res) { - try { - const paramBoardId = req.params.boardId; - Authentication.checkBoardAccess(req.userId, paramBoardId); - - const data = Integrations.find({ boardId: paramBoardId }, { fields: { token: 0 } }).map(function(doc) { - return doc; - }); - - JsonRoutes.sendResult(res, {code: 200, data}); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); - - // Get a single integration in board - JsonRoutes.add('GET', '/api/boards/:boardId/integrations/:intId', function(req, res) { - try { - const paramBoardId = req.params.boardId; - const paramIntId = req.params.intId; - Authentication.checkBoardAccess(req.userId, paramBoardId); - - JsonRoutes.sendResult(res, { - code: 200, - data: Integrations.findOne({ _id: paramIntId, boardId: paramBoardId }, { fields: { token: 0 } }), - }); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); - - // Create a new integration - JsonRoutes.add('POST', '/api/boards/:boardId/integrations', function(req, res) { - try { - const paramBoardId = req.params.boardId; - Authentication.checkBoardAccess(req.userId, paramBoardId); - - const id = Integrations.insert({ - userId: req.userId, - boardId: paramBoardId, - url: req.body.url, - }); - - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: id, - }, - }); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); - - // Edit integration data - JsonRoutes.add('PUT', '/api/boards/:boardId/integrations/:intId', function (req, res) { - try { - const paramBoardId = req.params.boardId; - const paramIntId = req.params.intId; - Authentication.checkBoardAccess(req.userId, paramBoardId); - - if (req.body.hasOwnProperty('enabled')) { - const newEnabled = req.body.enabled; - Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, - {$set: {enabled: newEnabled}}); - } - if (req.body.hasOwnProperty('title')) { - const newTitle = req.body.title; - Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, - {$set: {title: newTitle}}); - } - if (req.body.hasOwnProperty('url')) { - const newUrl = req.body.url; - Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, - {$set: {url: newUrl}}); - } - if (req.body.hasOwnProperty('token')) { - const newToken = req.body.token; - Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, - {$set: {token: newToken}}); - } - if (req.body.hasOwnProperty('activities')) { - const newActivities = req.body.activities; - Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, - {$set: {activities: newActivities}}); - } - - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: paramIntId, - }, - }); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); - - // Delete subscribed activities - JsonRoutes.add('DELETE', '/api/boards/:boardId/integrations/:intId/activities', function (req, res) { - try { - const paramBoardId = req.params.boardId; - const paramIntId = req.params.intId; - const newActivities = req.body.activities; - Authentication.checkBoardAccess(req.userId, paramBoardId); - - Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, - {$pullAll: {activities: newActivities}}); - - JsonRoutes.sendResult(res, { - code: 200, - data: Integrations.findOne({_id: paramIntId, boardId: paramBoardId}, { fields: {_id: 1, activities: 1}}), - }); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); - - // Add subscribed activities - JsonRoutes.add('POST', '/api/boards/:boardId/integrations/:intId/activities', function (req, res) { - try { - const paramBoardId = req.params.boardId; - const paramIntId = req.params.intId; - const newActivities = req.body.activities; - Authentication.checkBoardAccess(req.userId, paramBoardId); - - Integrations.direct.update({_id: paramIntId, boardId: paramBoardId}, - {$addToSet: {activities: { $each: newActivities}}}); - - JsonRoutes.sendResult(res, { - code: 200, - data: Integrations.findOne({_id: paramIntId, boardId: paramBoardId}, { fields: {_id: 1, activities: 1}}), - }); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); - - // Delete integration - JsonRoutes.add('DELETE', '/api/boards/:boardId/integrations/:intId', function (req, res) { - try { - const paramBoardId = req.params.boardId; - const paramIntId = req.params.intId; - Authentication.checkBoardAccess(req.userId, paramBoardId); - - Integrations.direct.remove({_id: paramIntId, boardId: paramBoardId}); - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: paramIntId, - }, - }); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); -``` diff --git a/docs/API/REST-API-Lists.md b/docs/API/REST-API-Lists.md deleted file mode 100644 index 23f6999fe..000000000 --- a/docs/API/REST-API-Lists.md +++ /dev/null @@ -1,89 +0,0 @@ -## In Wekan code - -wekan/models/lists.js at bottom: -``` - JsonRoutes.add('GET', '/api/boards/:boardId/lists', function (req, res) { - try { - const paramBoardId = req.params.boardId; - Authentication.checkBoardAccess( req.userId, paramBoardId); - - JsonRoutes.sendResult(res, { - code: 200, - data: Lists.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/lists/:listId', function (req, res) { - try { - const paramBoardId = req.params.boardId; - const paramListId = req.params.listId; - Authentication.checkBoardAccess( req.userId, paramBoardId); - JsonRoutes.sendResult(res, { - code: 200, - data: Lists.findOne({ _id: paramListId, boardId: paramBoardId, archived: false }), - }); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); - - JsonRoutes.add('POST', '/api/boards/:boardId/lists', function (req, res) { - try { - Authentication.checkUserId( req.userId); - const paramBoardId = req.params.boardId; - const id = Lists.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/lists/:listId', function (req, res) { - try { - Authentication.checkUserId( req.userId); - const paramBoardId = req.params.boardId; - const paramListId = req.params.listId; - Lists.remove({ _id: paramListId, boardId: paramBoardId }); - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: paramListId, - }, - }); - } - catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); -``` diff --git a/docs/API/REST-API-Role.md b/docs/API/REST-API-Role.md deleted file mode 100644 index 148c3aed0..000000000 --- a/docs/API/REST-API-Role.md +++ /dev/null @@ -1,82 +0,0 @@ -# Change Role at Web UI - -BoardAdmin can change role of user at right sidebar / click avatar / select role like Admin, Normal, etc. - -# Change Role with API - -- https://wekan.github.io/api/ -- api.py at https://github.com/wekan/wekan -- Login to API https://github.com/wekan/wekan/wiki/REST-API#example-call---as-json - -# Disclaimer - -This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new). - -## Add New Board Member with Role -This example adds with normal role. See examples below for other roles. -``` -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE/add \ - -d '{"action": "add","isAdmin": "false", "isNoComments":"false", "isCommentOnly": "false", "isWorker": "false" }' -``` -like -``` -/api/boards/{boardid}/members/{MEMBERID}/add Body{ "action" : add, "isadmin" : false ........... -``` - -## Remove Member from Board -``` -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE/remove \ - -d '{"action": "remove"}' -``` - -# Change Role of Existing Board Member - -## Admin -``` -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \ - -d '{"isAdmin": "true", "isNoComments":"false", "isCommentOnly": "false", "isWorker": "false"}' -``` -## Normal -``` -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \ - -d '{"isAdmin": "false", "isNoComments":"false", "isCommentOnly": "false", "isWorker": "false"}' -``` -## No Comments -``` -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \ - -d '{"isAdmin": "false", "isNoComments":"true", "isCommentOnly": "false", "isWorker": "false"}' -``` -## Comment Only -``` -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \ - -d '{"isAdmin": "false", "isNoComments":"false", "isCommentOnly": "true", "isWorker": "false"}' -``` -## Worker -- Can: move cards, can assign himself to card, can comment. -- Cannot: anything else including revoke card, change settings, create/delete/edit cards/tags and so on... -``` -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/BOARD-ID-HERE/members/USER-ID-HERE \ - -d '{"isAdmin": "false", "isNoComments":"false", "isCommentOnly": "false", "isWorker": "true"}' -``` - diff --git a/docs/API/REST-API-Swimlanes.md b/docs/API/REST-API-Swimlanes.md deleted file mode 100644 index 930480726..000000000 --- a/docs/API/REST-API-Swimlanes.md +++ /dev/null @@ -1,54 +0,0 @@ -# Disclaimer - -This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new). - -# Retrieve cards by swimlane id - -Please somebody add example by looking this: - -[Issue](https://github.com/wekan/wekan/issues/1934) and [code](https://github.com/wekan/wekan/pull/1944/commits/be42b8d4cbdfa547ca019ab2dc9a590a115cc0e2). Also add to [Cards page](REST-API-Cards) - -# Add Swimlane to Board - -| API URL / Code Link | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| [/api/boards/:boardId/swimlanes](https://github.com/wekan/wekan/blob/main/models/swimlanes.js#L223) | `yes` | `POST` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/swimlanes \ - -d '{ "title": "Swimlane title text" }' -``` -## Result example -The new swimlane's ID is returned in the format: -```json -{ - "_id": "W9m9YxQKT6zZrKzRW" -} -``` - -# Delete a swimlane - -| API URL / Code Link | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| [/api/boards/:boardId/swimlanes/:swimlaneId](https://github.com/wekan/wekan/blob/main/models/swimlanes.js#L257) | `yes` | `DELETE` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X DELETE \ - http://localhost:3000/api/boards/YRgy7Ku6uLFv2pYwZ/lists/PgTuf6sFJsaxto5dC/cards/ssrNX9CvXvPxuC5DE -``` -## Result example -The swimlane's ID is returned in the format: -```json -{ - "_id": "W9m9YxQKT6zZrKzRW" -} -``` - -# In Wekan code - -If you believe that code is the best documentation, be our guest: [models/cards.js](https://github.com/wekan/wekan/blob/main/models/swimlanes.js "Swimlane API code") \ No newline at end of file diff --git a/docs/API/REST-API-User.md b/docs/API/REST-API-User.md deleted file mode 100644 index f128c3025..000000000 --- a/docs/API/REST-API-User.md +++ /dev/null @@ -1,335 +0,0 @@ -# Disclaimer - -This page tries to be as up to date as possible. If you see something wrong here, feel free to update the page and help other people like you, that greatly depends on our APIs. If you don't feel comfortable doing this kind of changes, please contact us by creating an [issue](https://github.com/wekan/wekan/issues/new). - -# User Register -| URL | Requires Auth | HTTP Method | -| :--- | :--- | :--- | -| `/users/register` | `no` | `POST` | - -## Payload - -| Argument | Example | Required | Description | -| :--- | :--- | :--- | :--- | -| `username` | `myusername` | Required | Your username | -| `password` | `my$up3erP@ssw0rd` | Required | Your password | -| `email` | `my@email.com` | Required | Your email | - -* Notes: - * **You will need to provide the `token` for any of the authenticated methods.** - -## Example Call - As Form Data -```bash -curl http://localhost:3000/users/register \ - -d "username=myusername&password=mypassword&email=my@email.com" -``` - - -## Example Call - As JSON -```bash -curl -H "Content-type:application/json" \ - http://localhost:3000/users/register \ - -d '{ "username": "myusername", "password": "mypassword", "email": "my@email.com" }' -``` - - -## Result -```json -{ - "id": "user id", - "token": "string", - "tokenExpires": "ISO encoded date string" -} -``` - -## Result example -```json -{ - "id": "XQMZgynx9M79qTtQc", - "token": "ExMp2s9ML1JNp_l11sIfINPT3wykZ1SsVwg-cnxKdc8", - "tokenExpires": "2017-12-15T00:47:26.303Z" -} -``` - -# User Create -| URL | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| `/api/users` | `yes` | `POST` | - -## Payload - -| Argument | Example | Required | Description | -| :--- | :--- | :--- | :--- | -| `username` | `myusername` | Required | Your username | -| `password` | `my$up3erP@ssw0rd` | Required | Your password | -| `email` | `my@email.com` | Required | Your email | - -* Notes: - * **You will need to provide the `token` for any of the authenticated methods.** - -## Example Call - As Form Data -```bash -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -X POST \ - http://localhost:3000/api/users \ - -d "username=myusername&password=mypassword&email=my@email.com" -``` - -## Example Call - As JSON -```bash -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -H "Content-type:application/json" \ - -X POST \ - http://localhost:3000/api/users \ - -d '{ "username": "myusername", "password": "mypassword", "email": "my@email.com" }' -``` - -## Example of all steps of create user - -1) Login - -``` -curl http://example.com/users/login \ - -d "username=YOUR-USERNAME-HERE&password=YOUR-PASSWORD-HERE" -``` - -As response you get your id and token: - -``` -"id":"YOUR-ID-HERE","token":"YOUR-TOKEN-HERE","tokenExpires":"2017-12-23T21:07:10.395Z"} -``` - -2) Create user. Works both when serf-register enabled and disabled. - -``` -curl -H "Authorization: Bearer YOUR-TOKEN-HERE" \ - -H "Content-type:application/json" \ - -X POST \ - http://example.com/api/users \ - -d '{ "username": "tester", "password": "tester", "email": "tester@example.com", "fromAdmin": "true" }' -``` - -As reply you get new user's id. - -``` -{"id":"NEW-USER-ID-HERE"} -``` - -3) You can get user details with your new user's id: - -``` -curl -H "Authorization: Bearer YOUR-TOKEN-HERE" \ - http://example.com/api/users/NEW-USER-ID-HERE -``` - -## Result - -Returns the id of the created user. - - -```json -{ - "_id": "user id" -} -``` - -## Result example -```json -{ - "_id": "EnhMbvxh65Hr7YvtG" -} -``` - -# User Delete - -> IMPORTANT : Should not be used as long as [this bug](https://github.com/wekan/wekan/issues/1289) exists. - -| URL | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| `/api/users/:id` | `yes` | `DELETE` | - -## Parameters -| Argument | Example | Required | Description | -| :--- | :--- | :--- | :--- | -| `id` | `BsNr28znDkG8aeo7W` | Required | The id of the user to delete. | - -## Example Call -```bash -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - -X DELETE \ - http://localhost:3000/api/users/EnhMbvxh65Hr7YvtG -``` - -## Example Result - -Returns the id of the deleted user. - -```json -{ - "_id": "EnhMbvxh65Hr7YvtG" -} -``` - -# User Information -Retrieves information about a user. - -| URL | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| `/api/users/:id` | `yes` | `GET` | - -* Notes: - * **You will need to provide the `token` for any of the authenticated methods.** - * **Only the admin user (the first user) can call the REST API.** - -## Example Call -```bash -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - http://localhost:3000/api/users/XQMZgynx9M79qTtQc -``` - -## Result example -```json -{ - "_id": "XQMZgynx9M79qTtQc", - "createdAt": "2017-09-13T06:45:53.127Z", - "services": { - "password": { - "bcrypt": "$2a$10$CRZrpT4x.VpG2FdJxR3rN.9m0NbQb0OPsSPBDAZukggxrskMtWA8." - }, - "email": { - "verificationTokens": [ - { - "token": "8rzwpq_So2PVYHVSfrcc5f5QZnuV2wEtu7QRQGwOJx8", - "address": "my@email.com", - "when": "2017-09-13T06:45:53.157Z" - } - ] - }, - "resume": { - "loginTokens": [ - { - "when": "2017-09-13T06:45:53.265Z", - "hashedToken": "CY/PWeDa3fAkl+k94+GWzCtpB5nPcVxLzzzjXs4kI3A=" - }, - { - "when": "2017-09-16T06:06:19.741Z", - "hashedToken": "74MQNXfsgjkItx/gpgPb29Y0MSNAvBrsnSGQmr4YGvQ=" - } - ] - } - }, - "username": "john", - "emails": [ - { - "address": "my@email.com", - "verified": false - } - ], - "isAdmin": true, - "profile": {} -} -``` -# User List -Retrieves the user list. - -| URL | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| `/api/users` | `yes` | `GET` | - -* Notes: - * **You will need to provide the `token` for any of the authenticated methods.** - * **Only the admin user (the first user) can call the REST API.** - -## Example Call -```bash -curl -H "Authorization: Bearer cwUZ3ZsTaE6ni2R3ppSkYd-KrDvxsLcBIkSVfOCfIkA" \ - http://localhost:3000/api/users -``` - -## Result -```json -[ - { - "_id": "user id", - "username": "string" - } -] -``` - -## Result example -```json -[ - { - "_id": "XQMZgynx9M79qTtQc", - "username": "admin" - }, - { - "_id": "vy4WYj7k7NBhf3AFc", - "username": "john" - } -] -``` - -# User Logged-in -Retrieves information about a logged-in user with his auth token. - -| URL | Requires Auth | HTTP Method | -| :--- | :--- | :--- | -| `/api/user` | `yes` | `GET` | - -* Notes: - * **You will need to provide the `token` for any of the authenticated methods.** - -## Example Call -```bash -curl -H "Authorization: Bearer a6DM_gOPRwBdynfXaGBaiiEwTiAuigR_Fj_81QmNpnf" \ - http://localhost:3000/api/user -``` - -## Result example -```json -{ - "_id": "vy4WYj7k7NBhf3AFc", - "createdAt": "2017-09-16T05:51:30.339Z", - "username": "john", - "emails": [ - { - "address": "me@mail.com", - "verified": false - } - ], - "profile": {} -} -``` - -# Disable a user (the user is not allowed to login and his login tokens are purged) - -| URL | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| `/api/users/:id` | `yes` | `PUT` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X PUT \ - http://localhost:3000/api/users/ztKvBTzCqmyJ77on8 \ - -d '{ "action": "disableLogin" }' -``` - -# Enable a user - -| URL | Requires Admin Auth | HTTP Method | -| :--- | :--- | :--- | -| `/api/users/:id` | `yes` | `PUT` | - -```shell -curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ - -H "Content-type:application/json" \ - -X PUT \ - http://localhost:3000/api/users/ztKvBTzCqmyJ77on8 \ - -d '{ "action": "enableLogin" }' -``` - -# In Wekan code - -If you believe that code is the best documentation, be our guest: [models/cards.js](https://github.com/wekan/wekan/blob/main/models/users.js "User API code") diff --git a/docs/API/REST-API.md b/docs/API/REST-API.md deleted file mode 100644 index 9fc4c056c..000000000 --- a/docs/API/REST-API.md +++ /dev/null @@ -1,126 +0,0 @@ -REST API is not complete yet, please add missing functionality with pull requests to devel branch. - -If you are in a hurry, you can use these to have more functionality: -* https://restheart.org -* http://vulcanjs.org - -For workflows see [If-this-then-that issue](https://github.com/wekan/wekan/issues/1160) than mentions Huginn, Flogo etc. - -# Wekan REST API - -The REST API allows you to control and extend Wekan with ease. - -If you are an end-user and not a dev or a tester, [create an issue](https://github.com/wekan/wekan/issues/new) to request new APIs. - -> All API calls in the documentation are made using `curl`. However, you are free to use Java / Python / PHP / Golang / Ruby / Swift / Objective-C / Rust / Scala / C# or any other programming languages. - -## Production Security Concerns -When calling a production Wekan server, ensure it is running via HTTPS and has a valid SSL Certificate. The login method requires you to post your username and password in plaintext, which is why we highly suggest only calling the REST login api over HTTPS. Also, few things to note: - -* Only call via HTTPS -* Implement a timed authorization token expiration strategy -* Ensure the calling user only has permissions for what they are calling and no more - -# Summary - -### Authentication -| HTTP Method | Url | Short Description | -| :--- | :--- | :--- | -| `POST` | `/users/login` | [Authenticate with the REST API.](#login) | - -### Users -| HTTP Method | Url | Short Description | -| :--- | :--- | :--- | -| `POST` | `/users/register` | [Register a new user.](REST-API-User#user-register) | -| `POST` | `/api/users` | [Create a new user.](REST-API-User#user-create) | -| `PUT` | `/api/users/:id` | [Disable an existing user.](REST-API-User#disable-a-user-the-user-is-not-allowed-to-login-and-his-login-tokens-are-purged) | -| `PUT` | `/api/users/:id` | [Enable an existing user.](REST-API-User#enable-a-user) | -| `PUT` | `/api/users/:id` | [Admin takes the ownership.](REST-API-User#the-admin-takes-the-ownership-of-all-boards-of-the-user-archived-and-not-archived-where-the-user-is-admin-on) | -| `DELETE` | `/api/users/:id` | [Delete an existing user.](REST-API-User#user-delete) ([Warning](https://github.com/wekan/wekan/issues/1289))| -| `GET` | `/api/users/:id` | [Gets a user's information.](REST-API-User#user-information) | -| `GET` | `/api/users` | [All of the users.](REST-API-User#user-list) | -| `GET` | `/api/user` | [Gets a logged-in user.](REST-API-User#user-logged-in) | -### Cards -| HTTP Method | Url | Short Description | -| :--- | :--- | :--- | -| `POST` | `/api/boards/:boardId/lists/:listId/cards` | [Add a card to a list, board, and swimlane.](REST-API-Cards#add-card-to-list-board-swimlane) | -| `PUT` | `/api/boards/:boardId/lists/:fromListId/cards/:cardId` | [Update a card.](REST-API-Cards#update-a-card) | -| `DELETE` | `/api/boards/:boardId/lists/:listId/cards/:cardId` | [Delete a card.](REST-API-Cards#update-a-card) | - - ---- - -# Login -| URL | Requires Auth | HTTP Method | -| :--- | :--- | :--- | -| `/users/login` | `no` | `POST` | - -## Payload - -### Authentication with username -| Argument | Example | Required | Description | -| :--- | :--- | :--- | :--- | -| `username` | `myusername` | Required | Your username | -| `password` | `my$up3erP@ssw0rd` | Required | Your password | - -### Authentication with email -| Argument | Example | Required | Description | -| :--- | :--- | :--- | :--- | -| `email` | `my@email.com` | Required | Your email | -| `password` | `my$up3erP@ssw0rd` | Required | Your password | - -* Notes: - * **You will need to provide the `token` for any of the authenticated methods.** - -## Example Call - As Form Data - -DOES NOT WORK ! Please use As JSON example below ! -https://github.com/wekan/wekan/issues/4807 - -```bash -curl http://localhost:3000/users/login \ - -d "username=myusername&password=mypassword" -``` - -```bash -curl http://localhost:3000/users/login \ - -d "email=my@email.com&password=mypassword" -``` - - -## Example Call - As JSON - -THIS WORKS !! Alternatively, look at api.py example at https://github.com/wekan/wekan - -NOTE: Username and password is case sensitive. So type BIG and small letters correctly. - -```bash -curl -H "Content-type:application/json" \ - http://localhost:3000/users/login \ - -d '{ "username": "myusername", "password": "mypassword" }' -``` - -```bash -curl -H "Content-type:application/json" \ - http://localhost:3000/users/login \ - -d '{ "email": "my@email.com", "password": "mypassword" }' -``` - - -## Result -```json -{ - "id": "user id", - "token": "string", - "tokenExpires": "ISO encoded date string" -} -``` - -## Result example -```json -{ - "id": "XQMZgynx9M79qTtQc", - "token": "ExMp2s9ML1JNp_l11sIfINPT3wykZ1SsVwg-cnxKdc8", - "tokenExpires": "2017-12-15T00:47:26.303Z" -} -``` diff --git a/docs/Admin/Impersonate-user.md b/docs/Admin/Impersonate-user.md deleted file mode 100644 index 71a289a73..000000000 --- a/docs/Admin/Impersonate-user.md +++ /dev/null @@ -1,8 +0,0 @@ -Admin Panel / People / Click at right side of usename `...` button that is User Settings / Impersonate user. - -You will be switched to logged in as that user. - -To switch back to your original user, at your webbrowser click `Reload open webpage` round arrow button. - -This feature was added to Wekan v4.39 at https://github.com/wekan/wekan/pull/3280 - diff --git a/docs/Backup/Backup.md b/docs/Backup/Backup.md deleted file mode 100644 index 16c3024b7..000000000 --- a/docs/Backup/Backup.md +++ /dev/null @@ -1,784 +0,0 @@ -[Sandstorm](Sandstorm) - [Sandstorm Backup](Export-from-Wekan-Sandstorm-grain-.zip-file) - -# Upcoming - -[Transferring to Minio and SQLite](https://github.com/wekan/minio-metadata) - -# Backup Docker - -[Also see: Upgrading Synology with Wekan quay images](https://github.com/wekan/wekan/issues/3874#issuecomment-867526249) - -Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/. - -[docker-compose.yml](https://raw.githubusercontent.com/wekan/wekan/master/docker-compose.yml) - -This presumes your Wekan Docker is currently running with: -```bash -docker-compose up -d -``` -Backup to directory dump: -```bash -docker stop wekan-app -docker exec wekan-db rm -rf /data/dump -docker exec wekan-db mongodump -o /data/dump -docker cp wekan-db:/data/dump . -docker start wekan-app -``` -Copy dump directory to other server or to your backup. - -# Restore Docker -```bash -docker stop wekan-app -docker exec wekan-db rm -rf /data/dump -docker cp dump wekan-db:/data/ -docker exec wekan-db mongorestore --drop --dir=/data/dump -docker start wekan-app -``` -# Upgrade Docker Wekan version - -## Newest info - -https://github.com/wekan/wekan/discussions/5367 - -## Old info - -Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/. -```bash -docker-compose stop -docker rm wekan-app -``` -a) For example, if you in docker-compose.yml use `image: wekanteam/wekan` or `image: quay.io/wekan/wekan` for latest development version - -b) Or in docker-compose.yml change version tag, or use version tag like `image: wekanteam/wekan:v5.50` or `image: quay.io/wekan/wekan:v5.50` -```bash -docker-compose up -d -``` - -# Backup Wekan Snap to directory dump -```bash -sudo snap stop wekan.wekan -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu -export PATH="/snap/wekan/current/bin:$PATH" -mongodump --port 27019 -sudo snap get wekan > snap-settings.sh -``` -NOTE for Arch Linux: Use this path instead. [Source](https://github.com/wekan/wekan/issues/3941). -```bash -export LD_LIBRARY_PATH=${LD_LIBRARY_PATH-}:/var/lib/snapd/snap/wekan/current/lib/x86_64-linux-gnu -``` -username is your /home/username -```bash -sudo chown username:username snap-settings.sh -sudo snap start wekan.wekan -``` -Modify snap-settings.sh so that it has commands like: -```bash -sudo snap set wekan root-url='http://localhost' -``` -Set snap-settings.sh executeable: -```bash -chmod +x snap-settings.sh -``` - -# Restore Wekan Snap -```bash -sudo snap stop wekan.wekan -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu -export PATH="$PATH:/snap/wekan/current/bin" -mongorestore --drop --port 27019 -sudo snap start wekan.wekan -./snap-settings.sh -``` -# Upgrade Snap manually immediately (usually it updates automatically) - -```bash -sudo snap refresh -``` - -# Backup Wekan Gantt GPLv2 Snap to directory dump -```bash -sudo snap stop wekan-gantt-gpl.wekan -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan-gantt-gpl/current/lib/x86_64-linux-gnu -export PATH="$PATH:/snap/wekan-gantt-gpl/current/bin" -mongodump --port 27019 -sudo snap get wekan-gantt-gpl > snap-settings.sh -``` -username is your /home/username -```bash -sudo chown username:username snap-settings.sh -sudo snap start wekan-gantt-gpl.wekan -``` -Modify snap-settings.sh so that it has command like: -```bash -sudo snap set wekan-gantt-gpl root-url='http://localhost' -``` -Set snap-settings.sh executeable: -```bash -chmod +x snap-settings.sh -``` - -# Restore Wekan Gantt GPLv2 Snap -```bash -sudo snap stop wekan-gantt-gpl.wekan -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan-gantt-gpl/current/lib/x86_64-linux-gnu -export PATH="$PATH:/snap/wekan-gantt-gpl/current/bin" -mongorestore --drop --port 27019 -sudo snap start wekan-gantt-gpl.wekan -./snap-settings.sh -``` - -# DBGate, Open Source MongoDB GUI - -https://dbgate.org - https://github.com/dbgate/dbgate - -# Using nosqlbooster closed source MongoDB GUI with Wekan Snap to edit MongoDB database - -https://nosqlbooster.com/downloads - -### At server where Wekan Snap is installed, MongoDB is running at localhost port 27019 - -Wekan logo - -### You can tunnel via SSH to server, using password auth or private key auth dropdown selection - -Wekan logo - -# Scheduled backups to local or remote server - -For below scheduled backup scripts, no info from above of this wiki page is required. Backup scripts below have the required settings. - -This does backup of [Wekan+RocketChat snap databases](OAuth2) and php website etc. - -If you need to backup some remote server or cloud, you can use scp, or read [rclone docs](https://rclone.org/docs/) about how to configure saving to some other remote server or cloud. - -The following .sh bash scripts are added as root user to your `/root/` directory. - -Backups are created to subdirectories of `/root/backups/`. - -Cron is used to schedule backups, for example once a day. - -1. To add bash scripts, you change to root user with this command, and your sudo or root password. -```bash -sudo su -``` -2. Use nano editor for editing cron. If you don't have it installed, type: -```bash -apt install nano -``` -3. Then we set text editor to be nano. Otherwise it probably uses vi, that is harder to use. -```bash -export EDITOR=nano -``` -4. Now we start editing cron scheduler. -```bash -crontab -e -``` -For more info how to make cron time, see https://crontab.guru - -In this example, we set backups every day at 04:00, then it runs backup.sh script, and saves output of the backup commands to the bottom of textfile backup.log.txt -```bash -# m h dom mon dow command -0 4 * * * /root/backup.sh >> /root/backup.log.txt 2>&1 -``` -- For changing to `/root` directory, type: `cd /root` -- for editing backup.sh file, type: `nano backup.sh` -- For saving in nano, press Ctrl-o Enter -- For exiting nano, press Ctrl-x Enter -- Set every .sh file as executeable, for example: `chmod +x backup.sh` - -This is content of `backup.sh` script. It runs all the other backup scripts. -If you do not need to backup rocketchat or website, or do not need to use rclone, -you don't need to add those command lines at all. -```bash -cd /root -./backup-wekan.sh -./backup-rocketchat.sh -./backup-website.sh -rclone move backups cloudname:backup.example.com -``` -More about rclone: - -/root/rclone-ls-all.sh , shows directory contests at cloud: -```bash -rclone lsd cloudname: -``` -In this example, cron does run backup scripts as root. -This is if you edit cron with command `crontab -e` as root user, -so it edits the cron of root user. - -If mongodump command works as normal user for you, you could instead -run backups as normal user, by exiting root user with `exit` and -then as normal user editing cron with `crontab -e`. -You can also list current cron with command `crontab -l`. - -If you like to backup Wekan snap settings with this command, then it -only works with sudo at front, or as a root user without sudo at front. -```bash -sudo snap get wekan > snap-settings.txt -``` - -This below is backup script for backing up Wekan. - -/root/backup-wekan.sh -```bash -#!/bin/bash - -makeDump() -{ - - # Backups will be created below this directory. - backupdir="/root/backups/wekan" - - # Gets the version of the snap. - version=$(snap list | grep wekan | awk -F ' ' '{print $3}') - - # Gets current time to variable "now" - now=$(date +'%Y-%m-%d_%H.%M.%S') - - # Creates new backup directory like BACKUPDIR/BACKUPVERSIO-TIMENOW - mkdir -p $backupdir/$version-$now - - # Targets the dump file. - #dump=$"/snap/wekan/$version/bin/mongodump" - - # Changes to backup directory - cd $backupdir/$version-$now - - # Backup Caddy settings - snap get wekan > snap-settings.txt - - # Show text that database backup is in progress - printf "\nThe database backup is in progress.\n\n" - - # Backup to current directory, creates subdirectory called "dump" - # with database dump files - mongodump --port 27019 - - # Change diretory (=cd) to parent directory - cd .. - - # Show text "Makes the tar.gz archive file" - printf "\nMakes the tar.gz archive file.\n" - - # Creates tar.gz archive file. This works similarly like creating .zip file. - tar -zcvf $version-$now.tar.gz $version-$now - - # Delete temporary files that have already been - # compressed to above tar.gz file - rm -rf $version-$now - - # Shows text "Backup done." - printf "\nBackup done.\n" - - # Show where backup archive file is. - echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz" -} - -# Checks is the user is sudo/root -if [ "$UID" -ne "0" ] -then - echo "This program must be launched with sudo/root." - exit 1 -fi - -# Starts -makeDump -```bash -/root/backup-rocketchat.sh -```bash -#!/bin/bash - -makeDump() -{ - - backupdir="/root/backups/rocketchat" - - # Gets the version of the snap. - version=$(snap list | grep wekan | awk -F ' ' '{print $3}') - - # Prepares. - now=$(date +'%Y-%m-%d_%H.%M.%S') - mkdir -p $backupdir/$version-$now - - # Targets the dump file. - dump=$"/snap/wekan/$version/bin/mongodump" - - # Makes the backup. - cd $backupdir/$version-$now - printf "\nThe database backup is in progress.\n\n" - $dump --port 27017 - - # Makes the tar.gz file. - cd .. - printf "\nMakes the tar.gz file.\n" - tar -zcvf $version-$now.tar.gz $version-$now - - # Cleanups - rm -rf $version-$now - - # End. - printf "\nBackup done.\n" - echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz" -} - -# Checks is the user is sudo/root -if [ "$UID" -ne "0" ] -then - echo "This program must be launched with sudo/root." - exit 1 -fi - -# Starts -makeDump -``` -/root/backup-website.sh -```bash -#!/bin/bash - -makeDump() -{ - - backupdir="/root/backups/example.com" - - # Gets the version of the snap. - version=$(snap list | grep wekan | awk -F ' ' '{print $3}') - - # Prepares. - now=$(date +'%Y-%m-%d_%H.%M.%S') - mkdir -p $backupdir/$version-$now - - # Makes the backup. - cd $backupdir/$version-$now - printf "\nThe file backup is in progress.\n\n" - - # Makes the tar.gz file. - cd .. - printf "\nMakes the tar.gz file.\n" - cp -pR /var/snap/wekan/common/example.com $version-$now - tar -zcvf $version-$now.tar.gz $version-$now - - # Cleanups - rm -rf $version-$now - - # End. - printf "\nBackup done.\n" - echo "Backup is archived to .tar.gz file at $backupdir/${version}-${now}.tar.gz" -} - -# Checks is the user is sudo/root -if [ "$UID" -ne "0" ] -then - echo "This program must be launched with sudo/root." - exit 1 -fi - -# Starts -makeDump -``` -/var/snap/wekan/common/Caddyfile -```bash -chat.example.com { - proxy / localhost:3000 { - websocket - transparent - } -} - -https://boards.example.com { - proxy / localhost:3001 { - websocket - transparent - } -} - -example.com { - root /var/snap/wekan/common/example.com - fastcgi / /var/run/php/php7.0-fpm.sock php -} - -matomo.example.com { - root /var/snap/wekan/common/matomo.example.com - fastcgi / /var/run/php/php7.0-fpm.sock php -} - -# Example CloudFlare free wildcard SSL Origin Certificate, there is example.com.pem at certificates directory with private key at to and cert at bottom. -http://example.com https://example.com { - tls { - load /var/snap/wekan/common/certificates - alpn http/1.1 - } - root /var/snap/wekan/common/example.com - browse -} - -static.example.com { - root /var/snap/wekan/common/static.example.com -} -``` - -## Related talk about MongoDB backup - -Related talk, search for "mongodb" this page: -https://fosdem.org/2020/schedule/events/ - -There is this: - -Percona Backup for MongoDB: Status and Plans - -Open Source solution for consistent backups of multi-shard MongoDB - -- [Slides](https://fosdem.org/2020/schedule/event/perconamongodb/attachments/slides/3768/export/events/attachments/perconamongodb/slides/3768/Percona_Backup_for_MongoDB.pdf) -- [Video webm](https://video.fosdem.org/2020/UD2.119/perconamongodb.webm) -- [Same Video mp4](https://video.fosdem.org/2020/UD2.119/perconamongodb.mp4) - -## Related Sandstorm issue - -[Creating a backup while the grain is running could cause corruption](https://github.com/sandstorm-io/sandstorm/issues/3186). - -## Combining old and new Wekan version data - -Note: Do mongodump/mongorestore only when Wekan is stopped: wekan.wekan (Snap) or wekan-app (Docker). - -1. From new Wekan export all boards to Wekan JSON. -2. Backup new Wekan with mongodump. -3. Backup old Wekan with mongodump. -4. Restore old Wekan data to new Wekan with mongorestore. -5. Restore new Wekan JSON exported boards by importing them. - -## Rescuing board that does not load - -Wekan web UI Import/Export JSON does not have all content currently. To upgrade from old Wekan version, use mongodump/mongorestore to newest Wekan, like described below. - -To import big JSON file, on Linux you can use xclip to copy textfile to clipboard: -```bash -sudo apt-get install xclip -cat board.json | xclip -se c -``` -Then paste to webbrowser Wekan Add Board / Import / From previous export. - -You can [save all MongoDB database content as JSON files](Export-from-Wekan-Sandstorm-grain-.zip-file). Files are base64 encoded in JSON files. - -Export board to Wekan JSON, and import as Wekan JSON can make some part of board to load, but you should check is some data missing. - -With Wekan Snap, you can use [nosqlbooster GUI](https://nosqlbooster.com/downloads) to login through SSH to Wekan server localhost port 27019 and browse data. - -You could use [daff](https://github.com/paulfitz/daff) to compare tables. - -## Using Snap Mongo commands on your bash CLI - -Add to your `~/.bashrc` -```bash -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu -export PATH="$PATH:/snap/wekan/current/bin" -``` -Then you can backup: -```bash -mongodump --port 27019 -``` -And restore: -```bash -mongorestore --drop --port 27019 -``` - -## MongoDB shell on Wekan Snap - -mongoshell.sh -```bash -#/bin/bash -export LC_ALL=C -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu -version=$(snap list | grep wekan | awk -F ' ' '{print $3}') -mongo=$"/snap/wekan/$version/bin/mongo" -$mongo --port 27019 -``` - -*** - -# Snap backup-restore v2 - -Originally from https://github.com/wekan/wekan-snap/issues/62#issuecomment-470622601 - -## Backup - -wekan-backup.sh -```bash -#!/bin/bash -export LC_ALL=C -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu - -version=$(snap list | grep wekan | awk -F ' ' '{print $3}') -now=$(date +"%Y%m%d-%H%M%S") -parent_dir="/data/backups/wekan" -backup_dir="${parent_dir}/${now}" -log_file="${parent_dir}/backup-progress.log.${now}" - -error () { - printf "%s: %s\n" "$(basename "${BASH_SOURCE}")" "${1}" >&2 - exit 1 -} - -trap 'error "An unexpected error occurred."' ERR - -take_backup () { - mkdir -p "${backup_dir}" - - cd "${backup_dir}" - - /snap/wekan/$version/bin/mongodump --quiet --port 27019 - - cd .. - - tar -zcf "${now}.tar.gz" "${now}" - - rm -rf "${now}" -} - -printf "\n=======================================================================" -printf "\nWekan Backup" -printf "\n=======================================================================" -printf "\nBackup in progress..." - -take_backup 2> "${log_file}" - -if [[ -s "${log_file}" ]] -then - printf "\nBackup failure! Check ${log_file} for more information." - printf "\n=======================================================================\n\n" -else - rm "${log_file}" - printf "...SUCCESS!\n" - printf "Backup created at ${backup_dir}.tar.gz" - printf "\n=======================================================================\n\n" -fi -``` -wekan-restore.sh -```bash -#!/bin/bash -export LC_ALL=C -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu - -makesRestore() -{ - file=$1 - - ext=$"$(basename $file)" - parentDir=$"${file:0:${#file}-${#ext}}" - cd "${parentDir}" - - printf "\nMakes the untar of the archive.\n" - - tar -zxvf "${file}" - file="${file:0:${#file}-7}" - - version=$(snap list | grep wekan | awk -F ' ' '{print $3}') - - restore=$"/snap/wekan/${version}/bin/mongorestore" - - printf "\nThe database restore is in progress.\n\n" - - ## Only if you get errors about existing indexes, use this below instead: - ## $restore --quiet --drop --noIndexRestore -d wekan --port 27019 "${file}/dump/wekan" - - $restore --quiet --drop -d wekan --port 27019 "${file}/dump/wekan" - - rm -rf "${file}" - - printf "\nRestore done.\n" -} - -makesRestore $1 -``` - -*** - -# Snap backup-restore v1 - -## Backup script for MongoDB Data, if running Snap MongoDB at port 27019 - -```bash -#!/bin/bash - -makeDump() -{ - # Gets the version of the snap. - version=$(snap list | grep wekan | awk -F ' ' '{print $3}') - - # Prepares. - now=$(date +'%Y-%m-%d_%H.%M.%S') - mkdir -p /var/backups/wekan/$version-$now - - # Targets the dump file. - dump=$"/snap/wekan/$version/bin/mongodump" - - # Makes the backup. - cd /var/backups/wekan/$version-$now - printf "\nThe database backup is in progress.\n\n" - $dump --port 27019 - - # Makes the tar.gz file. - cd .. - printf "\nMakes the tar.gz file.\n" - tar -zcvf $version-$now.tar.gz $version-$now - - # Cleanups - rm -rf $version-$now - - # End. - printf "\nBackup done.\n" - echo "Backup is archived to .tar.gz file at /var/backups/wekan/${version}-${now}.tar.gz" -} - -# Checks is the user is sudo/root -if [ "$UID" -ne "0" ] -then - echo "This program must be launched with sudo/root." - exit 1 -fi - - -# Starts -makeDump - -``` - -## Restore script for MongoDB Data, if running Snap MongoDB at port 27019 with a tar.gz archive. - -```bash -#!/bin/bash - -makesRestore() -{ - # Prepares the folder used for the backup. - file=$1 - if [[ "$file" != *tar.gz* ]] - then - echo "The backup archive must be a tar.gz." - exit -1 - fi - - # Goes into the parent directory. - ext=$"$(basename $file)" - parentDir=$"${file:0:${#file}-${#ext}}" - cd $parentDir - - # Untar the archive. - printf "\nMakes the untar of the archive.\n" - tar -zxvf $file - file="${file:0:${#file}-7}" - - # Gets the version of the snap. - version=$(snap list | grep wekan | awk -F ' ' '{print $3}') - - # Targets the dump file. - restore=$"/snap/wekan/$version/bin/mongorestore" - - # Restores. - printf "\nThe database restore is in progress.\n\n" - ## Only if you get errors about existing indexes, use this below instead: - ## $restore --drop --noIndexRestore wekan --port 27019 $file/dump/wekan - $restore --drop wekan --port 27019 $file/dump/wekan - printf "\nRestore done.\n" - - # Cleanups - rm -rf $file -} - -# Checks is the user is sudo/root. -if [ "$UID" -ne "0" ] -then - echo "This program must be launched with sudo/root." - exit 1 -fi - - -# Start. -makesRestore $1 - -``` - -## Docker Backup and Restore - -[Docker Backup and Restore](Export-Docker-Mongo-Data) - -[Wekan Docker Upgrade](https://github.com/wekan/wekan-mongodb#backup-before-upgrading) - -## Snap Backup - -[Snap Backup and Restore](https://github.com/wekan/wekan-snap/wiki/Backup-and-restore) - -[Wekan Snap upgrade](https://github.com/wekan/wekan-snap/wiki/Install#5-install-all-snap-updates-automatically-between-0200am-and-0400am) - -## Sandstorm Backup - -Download Wekan grain with arrow down download button to .zip file. You can restore it later. - -[Export data from Wekan Sandstorm grain .zip file](Export-from-Wekan-Sandstorm-grain-.zip-file) - -## Cloudron - -If those [Backup](Backup) ways are not easily found at [Cloudron](Cloudron), one way is to install [Redash](https://redash.io/) and then backup this way: - -Redash works with this kind of queries: -```json -{ - "collection": "accountSettings", - "query": { - "type": 1 - }, - "fields": { - "_id": 1, - "booleanValue": 1, - "createdAt": 1, - "modifiedAt": 1, - } -} -``` -So: - -1) Create this kind of query: -```json -{ - "collection": "boards" -} -``` - -Later when you modify query, you can remove text like boards with double-click-with-mouse and delete-key-at-keyboard (or select characters with mouse and delete-key-at-keyboard), and then click collection/table >> button to insert name of next collection/table. - -2) Click Save - -3) Click Execute. This will cache query for use with REST API. - -4) Click at right top `[...]` => `Show API key` - -It looks like this: - -https://redash.example.com/api/queries/1/results.json?api_key=... - -5) Only when saving first collection/table, Save API key to text file script like this `dl.sh` -```bash -#!/bin/bash - -# Example: ./dl.sh boards - -export APIKEY=https://redash.example.com/api/queries/1/results.json?api_key=... - -curl -o $1.json $APIKEY -``` - -6) Run save script like: -```bash -./dl.sh boards -``` -Note: 1) Save 2) Execute => webbrowser can give this kind of timeout, -but downloading with API script still works: - -> wekan -> Error running query: failed communicating with server. Please check your Internet connection and try again. - -7) Repeat steps 1-4 and 6 for every collection/table like boards,cards, etc - -8) Remove from downloaded .json files extra query related data, so that it is similar like [any other Wekan database backup JSON files](Export-from-Wekan-Sandstorm-grain-.zip-file) - -9) Insert data to some other Wekan install with nosqlbooster like mentioned at page [Backup](Backup) - - diff --git a/docs/Backup/Rclone.md b/docs/Backup/Rclone.md deleted file mode 100644 index 6e13926bf..000000000 --- a/docs/Backup/Rclone.md +++ /dev/null @@ -1,155 +0,0 @@ -# Upgrading - -Newest WeKan uses MongoDB 6.0.3. - -Current working way to upgrade is: - -## Docker - -1. Create Mongodump of your database like at [Backup page](https://github.com/wekan/wekan/wiki/Backup) -2. Use newest WeKan docker-compose.yml from https://github.com/wekan/wekan with WRITABLE_PATH setup to Rclone/MinIO like below this page -3. Mongorestore to MongoDB 6.0.3 database -4. Use WeKan Admin Panel `Move all attachments to filesystem` button to move all attachments to MinIO. -5. Create Mongodump, that this time does not have any attachments, and is much smaller. -6. Mongorestore to MongoDB 6.0.3 database. -7. Start WeKan. - -## Snap - -Similar Mongodump and Mongorestore above, with these info: -- https://github.com/wekan/wekan-snap/wiki/Candidate-WeKan-Snap-Manual-Upgrade -- https://github.com/wekan/wekan/issues/4780 - -# Introduction - -With Rclone https://rclone.org , it's possible to use many cloud filesystems, like AWS S3, MinIO https://min.io , etc. - -Newest WeKan has features to move files between MongoDB GridFS and filesystem. - -Instead of filesystem, Rclone mounted cloud filesystem directory can be used, like MinIO. - -## Screenshot 1: Move to filesystem button moves to cloud filesystem like MinIO. S3 button does not work yet. - -Note: In some cases, only buttons `Move all attachments` at top are visible. In some other cases, there is more visible, like moving all attachments of board, etc, maybe when some have been already moved. - -Wekan Admin Panel file move - -## Screenshot 2: Files at MinIO after moving all to filesystem - -MinIO 1 - -## Screenshot 3: Files at MinIO after moving all to filesystem - -MinIO 2 - -## Rclone config - -Create config for example with command: -``` -rclone config -``` -At S3 providers, there is MinIO at https://rclone.org/s3/#minio - -`/root/.config/rclone/rclone.conf` - -``` -[aws] -type = s3 -provider = AWS -access_key_id = ACCESS-KEY-HERE -secret_access_key = SECRET-KEY-HERE -region = eu-north-1 -location_constraint = eu-north-1 -acl = private - -[minio] -type = s3 -provider = Minio -access_key_id = ACCESS-KEY-HERE -secret_access_key = SECRET-KEY-HERE -endpoint = http://192.168.0.100:9000 -acl = private -``` -## Listing files with Rclone -``` -rclone ls aws: - -rclone ls minio: -``` -## MinIO config - -https://min.io - -Running MinIO server binary, storing files at `/home/wekan/minio/data` -``` -MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /home/wekan/minio/data --console-address ":9001" -``` -Create bucket, access key, secret key. Then connect them with `mc` command installed from https://min.io website, here bucket wekan: -``` -mc config host add wekan http://192.168.0.100:9000 ACCESS-KEY-HERE SECRET-KEY-HERE -``` -## Snap -This uses minimal cache to make it work. Note that Rclone stays at foreground running, showing related messages, it does not daemonize to background. -``` -sudo su - -rclone mount minio:wekan/files /var/snap/wekan/common/files --vfs-cache-mode minimal -``` -Sometimes it shows this kind of message: -``` -2022/12/27 10:22:13 NOTICE: S3 bucket wekan path files: Streaming uploads using chunk size 5Mi will have maximum file size of 48.828Gi -``` -## Docker - -Rclone, short story: -``` -sudo su - -rclone mount minio:wekan/files /var/lib/docker/volumes/wekan_wekan-files/_data --vfs-cache-mode minimal -``` -Longer story: - -`docker-compose.yml` at https://github.com/wekan/wekan -``` -- WRITABLE_PATH=/data -``` -Docker volumes are there: -``` -sudo ls /var/lib/docker/volumes/ - -wekan_wekan-db-dump -wekan_wekan-db -wekan_wekan-files -``` -Directories there are: -``` -/var/lib/docker/volumes/_data/attachments -/var/lib/docker/volumes/_data/avatars -``` -## Bundle or Source - -Set `WRITABLE_PATH`like in Docker example above. - -## Development - -In Progress direct support without Rclone, if getting it working sometime. - -Meteor-Files currently uses official AWS-SDK that does not yet directly support custom endpoint like MinIO: -- https://github.com/veliovgroup/Meteor-Files/issues/862 -- https://github.com/veliovgroup/Meteor-Files/blob/master/docs/aws-s3-integration.md -- https://github.com/wekan/wekan/issues/142#issuecomment-1365249290 - -MinIO code examples: -- https://github.com/minio/minio-js/tree/master/examples - -Related RocketChat docs about MinIO: -- https://docs.rocket.chat/guides/administration/admin-panel/settings/file-upload/minio -- https://github.com/RocketChat/Rocket.Chat/tree/develop/apps/meteor/app/file-upload -- https://github.com/RocketChat/Rocket.Chat/pulls?q=is%3Apr+minio+is%3Aclosed - -Storage path during developing WeKan, for example: -``` -./rebuild-wekan.sh - -rclone mount minio:wekan/files /home/wekan/repos/wekan/.meteor/local/.build-garbage-uslyxi.uokel/programs --vfs-cache-mode minimal -``` diff --git a/docs/Backup/Repair-MongoDB.md b/docs/Backup/Repair-MongoDB.md deleted file mode 100644 index 871c03351..000000000 --- a/docs/Backup/Repair-MongoDB.md +++ /dev/null @@ -1,165 +0,0 @@ -## Repair Snap WeKan - -``` -sudo su - -snap stop wekan - -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu - -export PATH="/snap/wekan/current/bin:$PATH" - -mongod --dbpath "/var/snap/wekan/common" --repair >> /root/repairlog.txt - -snap start wekan - -exit -``` - -Logs from Snap: - -https://github.com/wekan/wekan/issues/5073 - -## Repair Docker WeKan - -At step 12 below is actual repair MongoDB command. - -Some customer of [WeKan Commercial Support](https://wekan.team/commercial-support/) ordered restore and repair of WeKan MongoDB database at UCS appliance. This was needed when changing back to previous UCS 4.x major version, when in new major UCS 5.x version Docker containers were all the time crashing and restarting, or something else got broken. Here are commands that were used while repairing. - -Similarly, MongoDB may require repair, if: -- MongoDB does not recover from sudden power failure cleanly -- Disk comes full, that is worst case. Recommended are daily backups, in this case sometimes repair does not work well enough. - -1. SSH to UCS appliance as root: -``` -ssh root@192.168.0.100 -``` -2. If backup or raw database files is at external USB harddrive, look where it is inserted: -``` -ls /dev - -fdisk -l /dev/sdb - -fdisk -l /dev/sdc - -fdisk -l /dev/sdd -``` -2. If external USB drive has NTFS file format, and mount complains about not having NTFS support, install NTFS support to Linux: -``` -apt install ntfs-3g -``` -3. Mount USB drive to /mnt -``` -mount /dev/sdd1 /mnt -``` -4. Stop WeKan Docker containers. If copying raw database files, WeKan and MongoDB should not be running, so that MongoDB would not be even more corrupted. (If MongoDB is running, and you have mongodump backup, you can [Backup with mongorestore](Backup) -``` -docker stop wekan-db wekan-app -``` -5. Find WeKan database raw files. MongoDB has various database engines, like WiredTiger, how to save raw data compressed, or other formats. WiredTiger is file format to save compressed MongoDB data. Similar like MySQL has ISAM, InnoDB etc. -``` -apt -y install mlocate -updatedb -locate WiredTiger.wt -``` -It can show for example USB drive and Docker container directory: -``` -root@ucs:/mnt/wekan/data/db# locate WiredTiger.wt -/mnt/wekan/data/db/WiredTiger.wt -/var/lib/univention-appcenter/apps/wekan/data/db/WiredTiger.wt -``` -6. Change to newly installed MongoDB data directory: -``` -cd /var/lib/univention-appcenter/apps/wekan/data/db/ -``` -7. Look at directory files owner permissions: -``` -ls -lah -``` -There could be like this: -``` --rw-r--r-- 1 tss tss 1004 Jan 25 13:09 WiredTiger.turtle --rw-r--r-- 1 tss tss 392K Jan 25 13:09 WiredTiger.wt -``` -8. Move that probably empty newly installed MongoDB data elsewhere: -``` -mkdir /root/new-empty-wekan-data -mv * /root/new-empty-wekan-data -``` -9. Copy MongoDB raw database files from USB harddrive to docker container directory: -``` -root@ucs-bdc:/var/lib/univention-appcenter/apps/wekan/data/db# cp -pR /mnt/wekan/data/db/* . -``` -10. Like looked at step 7, change file owner permissions to be correct, and change directory -``` -chown -R tss:tss * -cd /root -``` -11. Find mongod command: -``` -locate /usr/bin/mongod -``` -12. Repair Docker WeKan with version of Docker MongoDB that WeKan uses, change mongod path to below. Repairing logged to textfile. -``` -root@ucs:~# /var/lib/docker/overlay2/7b58483a16a2f67ee50486c00ec669940f7a95d460ee8188966fee0096e81fa2/diff/usr/bin/mongod --dbpath "/var/lib/univention-appcenter/apps/wekan/data/db" --repair >> repairlog.txt -``` -13. Look what containers are running: -``` -docker ps -``` -14. Look what containers are not running: -``` -docker ps -a -``` -15. Start MongoDB first: -``` -docker start wekan-db -``` -16. Look what happends at MongoDB container: -``` -docker logs wekan-db -``` -17. Start WeKan next. -``` -docker start wekan-app -``` -18. Look what happends at MongoDB container. -``` -docker logs wekan-app -``` -19. Check are both wekan-db and wekan-app containers running, and not restarting: -``` -docker ps -``` -20. Try to login to WeKan with webbrowser. -21. Backup WeKan database now after repair: -``` -docker exec -it wekan-db bash -cd /data -rm -rf dump -mongodump -exit -docker cp wekan-db:/data/dump . -zip -r wekan-backup-YEAR-MONTH-DATE-TIME-HERE.zip dump -``` -Now backup is at wekan-backup-YEAR-MONTH-DATE-TIME-HERE.zip file. - -22. At your local computer terminal (not at UCS server), transfer file to your local computer with scp: -``` -scp root@192.168.0.100:/root/wekan-backup-YEAR-MONTH-DATE-TIME-HERE.zip . -``` -23. Copy backup to external USB harddrive, change YEAR-MONTH-DATE-TIME-HERE to current date and time: -``` -cp /root/wekan-backup-YEAR-MONTH-DATE-TIME-HERE.zip /mnt/ -``` -24. Look what drives are mounted: -``` -df -h -``` -25. Sync and save unwritted data to disk, and unmount external USB harddrive safely: -``` -sync -umount /dev/sdd1 -``` -26. Remove external USB harddisk from server. -27. Login to WeKan, check do all WeKan boards work. In this case, all did work. \ No newline at end of file diff --git a/docs/Backup/Upgrade.md b/docs/Backup/Upgrade.md deleted file mode 100644 index 1ca521d5d..000000000 --- a/docs/Backup/Upgrade.md +++ /dev/null @@ -1,15 +0,0 @@ - -``` -sudo snap stop wekan.wekan -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu -export PATH2=$PATH -export PATH=/snap/wekan/current/bin:$PATH -mongodump --port 27019 -sudo snap get wekan > snap-settings.txt -sudo snap stop wekan.mongodb -sudo mv /var/snap/wekan/common . -sudo mkdir /var/snap/wekan/common -sudo snap refresh wekan --channel=latest/candidate -``` - -To be continued... \ No newline at end of file diff --git a/docs/Browsers/Browser-compatibility-matrix.md b/docs/Browsers/Browser-compatibility-matrix.md deleted file mode 100644 index ddfd499e1..000000000 --- a/docs/Browsers/Browser-compatibility-matrix.md +++ /dev/null @@ -1,86 +0,0 @@ -If you know updates to this, please add new issue about it. Make changes to this page by cloning wiki: - -``` -git clone https://github.com/wekan/wekan.wiki -``` -There edit Browser-compatibility-matrix.md and attach it with .txt extension or in .zip file to https://github.com/wekan/wekan/wiki/issues - -## Webkit based - -Browser | [PWA](PWA) | Mobile | Desktop | OS -------- | ----| ------ | ------- | ------- -Safari | iOS Yes | iOS Newest | Newest | iOS, macOS -Iris | No | No | Newest | [Iris browser news](https://www.riscosopen.org/forum/forums/1/topics/19545), Download [RISC OS Direct](https://www.riscosdev.com/direct/) for Raspberry Pi etc. [Other versions of RISC OS for many ARM CPU devices](https://www.riscosopen.org/content/downloads) do not have Iris browser yet, but there could be some way to transfer Iris browser files from RISC OS Direct. - -## Firefox based - -Any telemetry at any Firefox based browser can be additionally most locked down with arkenfox user JS. - -Browser | [PWA](PWA) | Mobile | Desktop | OS -------- | ----| ------ | ------- | ------- -[Mypal](https://github.com/reactosapps/apps/releases/download/0.01/mypal-27.9.4.win32.installer.exe) | No | No | Newest | For 32bit ReactOS/WinXP/Win7/etc [issue](https://github.com/wekan/wekan/issues/3132) -Firefox | No | Newest | Newest | iOS/Android/Win/Mac/Linux/BSD/RasPi. At iOS uses Safari engine, elsewhere Firefox engine. [Haiku](https://discuss.haiku-os.org/t/progress-on-porting-firefox/13493/143) not tested yet - [HN](https://news.ycombinator.com/item?id=41214762). -[Waterfox](https://www.waterfox.net) | No | No | Yes | Win/Mac/Linux, more private than Firefox, no tracking. [Repo](https://github.com/BrowserWorks/Waterfox) -[Floorp](https://floorp.app) | No | No | Yes | [Win/Mac/Linux](https://github.com/Floorp-Projects/Floorp/releases), more private than Firefox, [Repo](https://github.com/Floorp-Projects/Floorp) -[Mercury](https://thorium.rocks/mercury) | No | No | Yes | [Win/Linux](https://github.com/Alex313031/Mercury/releases), more private than Firefox, [Repo](https://github.com/Alex313031/Mercury) -[SeaLion](https://github.com/wicknix/SeaLion) | No | No | Yes | [MacOS 10.7-14.1 x32,x64,ppc,ppc64/Linux x64](https://github.com/wicknix/SeaLion/releases), [Repo](https://github.com/wicknix/SeaLion) -[LibreWolf](https://librewolf.net) | No | No | Yes | [Win/Mac/Linux](https://librewolf.net/installation/), [Repos](https://codeberg.org/librewolf) -[Zen Browser](https://www.zen-browser.app/) | No | No | Yes | [Win/Mac/Linux](https://www.zen-browser.app/download), [Repos](https://github.com/zen-browser), [Review at YouTube](https://www.youtube.com/watch?v=tKM2N4TQHQY) - -## Chromium based - -Browser | [PWA](PWA) | Mobile | Desktop | OS -------- | ----| ------ | ------- | ------- -Chrome | Android Yes | Android Newest | Newest | Win/Mac/Linux -Chromium | Android Yes | Android Newest | Newest | Win/Mac/Linux/RasPi -Brave | Android Yes | Android Newest | Newest | Win/Mac/Linux/RasPi -Vivaldi | Android Yes | Android Newest | Newest | Win/Mac/Linux -Opera | Android Yes | Android Newest | Newest | Win/Mac/Linux -Credge, Chromium Edge | Android Yes | Android | Newest | Win/Mac/Linux/Mobile -Morph Browser | No | Yes | Yes | [Ubuntu Touch](https://ubports.com) based on Ubuntu 16.04 and 20.04 at all Ubuntu Touch devices, [RasPi3](https://ci.ubports.com/job/rootfs/job/rootfs-rpi/) (not RasPi4 yet). [Repo](https://gitlab.com/ubports/development/core/morph-browser) -[OpenStore App](https://open-store.io/app/wekan.wekanteam) | Yes | Yes | Yes | [Ubuntu Touch](https://ubports.com) app at [OpenStore](https://open-store.io/app/wekan.wekanteam) using Morph browser with Wekan demo & development server https://boards.wekan.team . App source code for Ubuntu 16.04 at https://github.com/wekan/wekan-openstore and Ubuntu 20.04 at https://github.com/wekan/wekan-openstore2 -[Microsoft Store App](https://www.microsoft.com/fi-fi/p/wekan/9p2mrxvd087r#activetab=pivot:overviewtab) | Yes | Yes | Yes | At Microsoft Store of Windows 10/11 desktop, made with [PWABuilder](https://www.pwabuilder.com/). Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), changed app from EdgeHTML to Credge based with Wekan demo & development server https://boards.wekan.team -[Android Play Store App](https://play.google.com/store/apps/details?id=team.wekan.boards.twa) | Yes | Yes | Yes | Based on [Wekan PWA](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/s7SkzYviC2e963FkT), made with [PWABuilder](https://www.pwabuilder.com/), uses Android Chrome browser with Wekan demo & development server https://boards.wekan.team -[Thorium](https://thorium.rocks) | No | Yes | Yes | [Win/Win7/Mac/Linux/Android/RasPi](https://thorium.rocks), speed optimized -[Supermium](https://github.com/win32ss/supermium) | No | No | Yes | 32bit: Windows XP, Windows 2003 - -## EdgeHTML based - -Browser | [PWA](PWA) | Mobile | Desktop | OS -------- | ----| ------ | ------- | ------- -Legacy Edge | No | No | Not | Not compatible with newest WeKan. Worked with Wekan v4.19 and before. - -## MSHTML based - -Browser | [PWA](PWA) | Mobile | Desktop | OS -------- | ----| ------ | ------- | ------- -Internet Explorer | No | No | No | No | No - -## Servo based, not tested yet - -- Apache 2.0 or MIT license -- Repo: https://github.com/versotile-org/verso - -## Ladybird based, not yet compatible with WeKan - -- BSD-2-Clause license -- Website: https://ladybird.org -- Repo: https://github.com/LadybirdBrowser/ladybird - -## Other ways to create Mobile App with Meteor - -https://guide.meteor.com/cordova - -Benefits: -- Can be faster, more stored at mobile -- Native features integration possibilities - -## Desktop app with Meteor - -- https://forums.meteor.com/t/desktop-electron-meteor-app-with-todesktop/60904 - -## Optional Payments - -- If there is sometime a need to develop payment feature, that does not exist yet -- https://forums.meteor.com/t/need-help-adding-in-app-purchases-to-a-meteor-app-specifically-adding-subscription-support-for-android-play-store/40510 -- https://www.npmjs.com/package/cordova-plugin-purchase diff --git a/docs/Databases/PostgreSQL.md b/docs/Databases/PostgreSQL.md deleted file mode 100644 index f2b67ed71..000000000 --- a/docs/Databases/PostgreSQL.md +++ /dev/null @@ -1,11 +0,0 @@ -## FerretDB - -Replacing MongoDB with FerretDB/SQLite or FerretDB/PostgreSQL. Needs testing, what are correct settings. - -https://forums.meteor.com/t/ferretdb-1-18-now-has-oplog-support-trying-replace-mongodb-6-x-with-ferretdb-postgresql-or-ferretdb-sqlite/61092 - -## ToroDB - -ToroDB is not developed anymore. ToroDB was about adding MongoDB proxy to PostgreSQL or MySQL. - -https://github.com/wekan/wekan/tree/main/torodb-postgresql diff --git a/docs/Date/Calendar.md b/docs/Date/Calendar.md deleted file mode 100644 index fa4058088..000000000 --- a/docs/Date/Calendar.md +++ /dev/null @@ -1,23 +0,0 @@ -### Create card - -At Calendar View, on Month when you click a date it will ask you if you want to create a new card and give its name. It then creates at first swimlane and at first list the card with the due date that it got from the date you clicked. - -Video demonstration: - -https://user-images.githubusercontent.com/70445835/184324324-b4bd466e-6873-4eef-8ca5-b6e4d9f95ac5.mp4 - - -- How it works https://github.com/wekan/wekan/issues/2687#issuecomment-1545235649 -- Fix for Calendar View Create Card https://github.com/wekan/wekan/pull/5019 -- Calendar view logic https://github.com/wekan/wekan/issues/4511 - -## Time - -* [Due Date](Due-Date) -* [Day of week start](Day-of-week-start) - -## What features are missing - -* [Calendar issues](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+calendar+label%3AFeature%3ACalendar-view) -* [Time Tracking](Time-Tracking) -* [Gantt Chart](Gantt) diff --git a/docs/Date/Day-of-week-start.md b/docs/Date/Day-of-week-start.md deleted file mode 100644 index 3b702b361..000000000 --- a/docs/Date/Day-of-week-start.md +++ /dev/null @@ -1,7 +0,0 @@ -## 1) Click right top your username - -Day of Week Start 1 - -## 2) Click Change Settings => Set day of the week start => Select first day of the week from dropdown menu - -Day of Week Start 1 \ No newline at end of file diff --git a/docs/Date/Due-Date.md b/docs/Date/Due-Date.md deleted file mode 100644 index 033e0f755..000000000 --- a/docs/Date/Due-Date.md +++ /dev/null @@ -1,5 +0,0 @@ - -- received - when a bug or task is found -- start - when work is started -- due - when it should be done -- end - when it's done diff --git a/docs/Date/Time-Tracking.md b/docs/Date/Time-Tracking.md deleted file mode 100644 index 41e408e75..000000000 --- a/docs/Date/Time-Tracking.md +++ /dev/null @@ -1,19 +0,0 @@ -## Time Tracking - -This was found 2020-05-20 at [Time Tracking Wekan issue](https://github.com/wekan/wekan/issues/812#issuecomment-631111730), thanks! - -Titra Time Tracking, GPLv3 -- https://titra.io/en/free-time-tracking-online/ -- https://github.com/kromitgmbh/titra/ - -Wekan Integration: -- https://github.com/kromitgmbh/titra/wiki/Wekan-integration - - -*** - -## iCal - -https://github.com/wekan/wekan/issues/2836 - -https://github.com/wekan/wekan-ical-server \ No newline at end of file diff --git a/docs/Date/Timezone.md b/docs/Date/Timezone.md deleted file mode 100644 index 60da5db6c..000000000 --- a/docs/Date/Timezone.md +++ /dev/null @@ -1,38 +0,0 @@ -1. At Windows, sync to ntp timeserver. Examples: - - `time.windows.com` - - `ntp.ubuntu.com` - - `ntp1.kolumbus.fi` - -2. Dual boot to Qubes OS. At desktop top right calendar/time, set timezone to Etc/UTC. - -3. At server and it's KVM VMs, edit `/etc/timezone` to `Etc/UTC`. - -4. Update time at server: - -``` -sudo apt -y install ntpdate - -sudo ntpdate ntp.ubuntu.com -``` - -5. Now local time shows correctly at webbrowser, like for example at Friend Desktop https://github.com/wekan/wekan/wiki/Friend - -For testing any other time related code, that it shows correct local time, compare time functions results to this: - -https://github.com/FriendUPCloud/friendup/blob/master/interfaces/web_desktop/apps/Convos/Scripts/chatlog.fui.js#L694 - -From Hogle Titlestad: - -> Oh, and the most important thing. -> The first argument is a time string. -> Seconds. Not a normal date. -> Such that you can subtracck and add seconds to it. -> So input would be: -> ``` -> this.parseDate( 1695981700956, false, 'Europe/Oslo' ); -> ``` -> e.g. Europe/Oslo is the server time zone. -> The timestamp is server time. -> For the event in question. - - diff --git a/docs/DeveloperDocs/Adding-new-Snap-settings-to-code.md b/docs/DeveloperDocs/Adding-new-Snap-settings-to-code.md deleted file mode 100644 index 288eed514..000000000 --- a/docs/DeveloperDocs/Adding-new-Snap-settings-to-code.md +++ /dev/null @@ -1,91 +0,0 @@ -# Also see Snap Developer Docs - -[Snap Developer Docs](https://github.com/wekan/wekan-snap/wiki/Snap-Developer-Docs) - -# When adding settings to code you or somebody else wrote - -Add all necessary settings that you find on code. - -After doing all changes, [fix lint errors](Developer-Documentation#preventing-travis-ci-lint-errors-before-submitting-pull-requests) and if possible warnings too. You can silence errors if you really can't find solution. - -Submit pull request to Wekan edge branch https://github.com/wekan/wekan/tree/edge - -# Changes to server code - -To use environment variables in your serverside code, use: -``` -process.env.YOURSETTING -``` -Example: [wekan/server/policy.js](https://github.com/wekan/wekan/blob/edge/server/policy.js) - -# Changes to [config](https://github.com/wekan/wekan/blob/edge/snap-src/bin/config) - -## 1) Add to beginning - -At beginning there is this line: -``` -# list of supported keys -keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP ..." -``` -To the end of it, add name of new setting. For example: -``` -keys="... AWESOME_FEATURE_ENABLED" -``` - -## 2) Add to bottom - -Example 1: Set features not enabled as default. -``` -DESCRIPTION_LDAP_ENABLED="LDAP enabled. Default: false" -DEFAULT_LDAP_ENABLED="false" -KEY_LDAP_ENABLED="ldap-enabled" -``` -Example 2: If setting is different for every server, leave it empty. -``` -DESCRIPTION_OAUTH2_TOKEN_ENDPOINT="OAuth2 token endpoint. Example: /oauth/token" -DEFAULT_OAUTH2_TOKEN_ENDPOINT="" -KEY_OAUTH2_TOKEN_ENDPOINT="oauth2-token-endpoint" -``` -Example 3: If there is same for every server, set it to general setting. -``` -DESCRIPTION_LDAP_SEARCH_FILTER="LDAP search filter. Default: (&(objectCategory=person)(objectClass=user)(!(cn=andy)))" -DEFAULT_LDAP_SEARCH_FILTER="(&(objectCategory=person)(objectClass=user)(!(cn=andy)))" -KEY_LDAP_ENABLED="ldap-enabled" -``` -Example 4: If you don't know example, leave it without example. -``` -DESCRIPTION_TURBO_FILTER="Turbo filter. Default: ''" -DEFAULT_TURBO_FILTER="" -KEY_TURBO_FILTER="turbo-filter" -``` - -# Changes to [Snap help](https://github.com/wekan/wekan/blob/edge/snap-src/bin/wekan-help) - -## 1) How to quote examples - -Snap settings need to be lowercase, and inside single quotes. For example: -``` -snap set wekan ldap-user-search-filter='(&(objectCategory=person)(objectClass=user)(!(cn=andy)))' -``` -The setting inside single quotes is the actual setting. - -Actual settings can include double quotes, spaces, etc, but not single quotes. For example: -``` -snap set wekan ldap-user-search-filter='"(&(objectCategory=person)(objectClass=user)(!(cn=andy)))"' -``` - -## 2) What to add as setting to Wekan help - -Example 1: -``` -echo -e "OAuth2 Token Endpoint. Example: /oauth/token" -echo -e "To enable the OAuth2 Token Endpoint of Wekan:" -echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT='/oauth/token'" -echo -e "\t-Disable the OAuth2 Token Endpoint of Wekan:" -echo -e "\t$ snap set $SNAP_NAME OAUTH2_TOKEN_ENDPOINT=''" -echo -e "\n" -``` -So all you add need to be above of this line: -``` -# parse config file for supported settings keys -``` \ No newline at end of file diff --git a/docs/DeveloperDocs/AsyncAwait.md b/docs/DeveloperDocs/AsyncAwait.md deleted file mode 100644 index e830c07b5..000000000 --- a/docs/DeveloperDocs/AsyncAwait.md +++ /dev/null @@ -1,3 +0,0 @@ -- https://www.sitepoint.com/javascript-async-await/ -- https://www.freecodecamp.org/news/javascript-async-await-tutorial-learn-callbacks-promises-async-await-by-making-icecream/ -- https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous \ No newline at end of file diff --git a/docs/DeveloperDocs/Build-from-source.md b/docs/DeveloperDocs/Build-from-source.md deleted file mode 100644 index e1cab9b6a..000000000 --- a/docs/DeveloperDocs/Build-from-source.md +++ /dev/null @@ -1,204 +0,0 @@ -## About markdown changes - -Wekan v4.29 changes markdown rendering from [marked](https://github.com/markedjs/marked) to [markdown-it](https://github.com/markdown-it/markdown-it). - -## About emoji - -With markdown-it, also [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji) plugin has been added, supporting [full list of GitHub emojis](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.json). - -Example emoji code, that you can add for example to card name, card description etc: -``` -:rainbow: :thumbsup: :100: -``` -That shows emojis :rainbow: :thumbsup: :100: - -## About other markdown-it plugins - -For markdown-it, there are also other [syntax extensions](https://github.com/markdown-it/markdown-it#syntax-extensions) where some are listed at that markdown-it page, and [others at npmjs.com](https://www.npmjs.org/browse/keyword/markdown-it-plugin). - -For example, how to get some [mermaid plugin](https://www.npmjs.com/search?q=markdown-it-mermaid) working so that some syntax works for https://mermaid-js.github.io/mermaid/ ? - -## How you could add another plugin - -Using newest Ubuntu amd64: - -# Meteor 2 - -### 1. Install git and configure it -``` -sudo apt -y install git - -git config --global user.name "Yourfirstname Yourlastname" - -git config --global user.email email-address-you-use-at-github@example.com - -git config --global push.default simple - -nano .ssh/config -``` -There add your User (GitHub username) and IdentityFile (Your ssh private key. Not public key that has .pub). -For indentation, use one tab. -``` -Host * - IdentitiesOnly=yes - -Host github.com - Hostname github.com - User xet7 - IdentityFile ~/.ssh/id_xet7ed -``` -Save and Exit with Ctrl-o Enter Ctrl-x Enter - -If you do not have ssh key, create it: -``` -ssh-keygen -``` -And press Enter about 3 times, until you have private key at `~/.ssh/id_rsa` and public key at `~/.ssh/id_rsa.pub` - -Add public key `.pub` to your github account web interface. - -Add path to Meteor: -``` -nano .bashrc -``` -There at bottom add: -``` -export PATH=~/.meteor:$PATH -``` -Save and Exit with Ctrl-o Enter Ctrl-x Enter - -### 2. Create fork of `https://github.com/wekan/wekan` at GitHub web page - -``` -mkdir repos - -cd repos - -git clone git@github.com:YourGithubUsername/wekan.git - -cd wekan -``` -### 3. Select option 1 to install dependencies, and then Enter. -``` -./rebuild-wekan.sh - -1 - -./rebuild-wekan.sh - -2 - -./rebuild-wekan.sh - -3 -``` -That does: 1 install dependencies, 2 builds wekan, 3 starts wekan in development mode with command `meteor`, so it can detect if some file changes and try to rebuild automatically and reload webbroser. But, still sometimes, it may need stopping with Ctrl-c and full build with option 2. - -And then [register and login](Adding-users) at http://localhost:4000 - -### OPTIONAL, NOT NEEDED: 5. Add new plugin package -``` -meteor npm install markdown-it-something --save -``` - -Edit file `wekan/packages/markdown/src-integration.js` and add using that new package, using code example from that new plugin page, or similar like emoji plugin was added. - -### 7. Test - -Test does that new plugin syntax work, for example in card title, card description etc on other input fields. - -### 8. If it works, create pull request - -If normal markdown, emoji, and your new added plugin syntax all work, commit your changes: -``` -git add --all - -git commit -m "Added plugin markdown-it-something." - -git push -``` -And then at your GitHub for `https://github.com/YOUR-GITHUB-USERNAME/wekan` click `Create pull request`. - -# Meteor 3 - -At 2024-06-26, it looks like from https://nodejs.org/en that Node.js LTS version is 20.15.0 , so change to newest Node.js LTS, delete old Meteor: -``` -sudo n 20.15.0 - -sudo npm -g install npm - -cd - -rm -rf .meteor -``` -Check how to install newest Meteor from Meteor 3 PR at https://github.com/meteor/meteor/pull/13163 , for example: -``` -npx meteor@rc -``` -Check what branches there are: -``` -cd repos/wekan - -git branch -a -``` -Change to Meteor 3 branch: -``` -git checkout feature-meteor3 -``` -Build wekan: -``` -./rebuild-wekan.sh - -2 -``` -If there are errors, try to fix them. - -Or try to run wekan: -``` -./rebuild-wekan.sh - -3 -``` -# Updating - -There are usually updates both for npm packages and Meteor - -Updating npm packages: -``` -npm update -``` -Checking for vulnerable packages: -``` -npm audit -``` -Fixing vulnerable npm packages by updating to newer packages: -``` -npm audit fix -``` -If that did not help, use force: -``` -npm audit fix --force -``` -If that did not help, read links from that `npm audit` command did show, remove deprecated dependencies, update to other maintained dependencies. - -Updating to next Meteor release: -``` -meteor update -``` -Updating to specific Meteor release: -``` -meteor update --release METEOR@3.0-rc.4 -``` -Trying to update all Meteor packages: -``` -meteor update --release METEOR@3.0-rc.4 --all-packages -``` -Allowing incompatible updates, that may sometime work: -``` -meteor update --release METEOR@3.0-rc.4 --all-packages --allow-incompatible-update -``` -If you are changing Meteor and Node.js versions, you may need to reset Meteor: -``` -meteor reset -``` -Or alternatively, delete wekan repo (if you did not need any changes you made), and clone wekan repo again, and then build etc. diff --git a/docs/DeveloperDocs/Debugging.md b/docs/DeveloperDocs/Debugging.md deleted file mode 100644 index 24e028955..000000000 --- a/docs/DeveloperDocs/Debugging.md +++ /dev/null @@ -1,115 +0,0 @@ -## Maximum Call Stack Size Exceeded - -https://github.com/wekan/wekan/issues?q=is%3Aissue+maximum+call+stack+is%3Aclosed - -https://stackoverflow.com/questions/75869629/ios-websocket-close-and-error-events-not-firing - -This can happen, when there is too much or incompatible code at browserside, for example at iOS Safari. - -To fix it: - -1. Move ExcelJS from browserside to run at serverside https://github.com/wekan/wekan/pull/3871 -2. Use Bundle Visualizer to see what is the size of dependencies, and try what can be moved to serverside like at step 1, that bundle visualizer is used in this script https://github.com/wekan/wekan/blob/main/rebuild-wekan.sh -``` -meteor run --exclude-archs web.browser.legacy,web.cordova --port 4000 --extra-packages bundle-visualizer --production 2>&1 | tee ../log.txt -``` -3. Make dependencies smaller. For example, use only required files, and do not include all dependencies: https://github.com/wekan/wekan/commit/23e5e1e3bd081699ce39ce5887db7e612616014d . In that commit, package was forked to packages directory, then renamed, and added with `meteor add packagename`, where package name does not have character `:` -4. Use Browserstack.com to see errors at browser / inspect / console, or use iOS or other device emulators, to see error messages. Testing at real device is more important, because they could work differently than emulators, emulators sometimes do not emulate all same features. Those error messages have file where error happened, and line number, like `something.js:301` . From there, scroll up a little, look at what function or what package dependency it is where it happened. If possible, try to move that package serverside, like at step 1. Or alternatively, look is it possible to remove or change to some other compatible dependency. -5. See what are the dependencies at your Meteor based software, compared to WeKan dependencies that are usually already upgraded to newest Meteor, is there any differences where changing to correct dependencies could help you to upgrade to newest Meteor: - - https://github.com/wekan/wekan/blob/main/package.json - - https://github.com/wekan/wekan/blob/main/.meteor/packages - - https://github.com/wekan/wekan/blob/main/.meteor/versions - - https://github.com/wekan/wekan/blob/main/.meteor/release -5. If you get some errors, search are those same already fixed in WeKan/Meteor/RocketChat, could you fix them same way: - - https://github.com/wekan/wekan/blob/main/CHANGELOG.md - - https://github.com/wekan/wekan/issues - - https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aclosed - - https://github.com/meteor/meteor/issues - - https://github.com/meteor/meteor/issues?q=is%3Aissue+is%3Aclosed - - https://github.com/RocketChat/Rocket.Chat/issues - - https://github.com/RocketChat/Rocket.Chat/issues?q=is%3Aissue+is%3Aclosed -6. If you have some webserver providing SSL/TLS, check that you have websockets enabled: - - https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config - - https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config - - https://github.com/wekan/wekan/wiki/Apache - - OpenLiteSpeed https://github.com/wekan/wekan/issues/3334#issuecomment-723651328 - - https://github.com/wekan/wekan/wiki/Local-self-signed-TLS - - https://github.com/wekan/wekan/wiki/Traefik-and-self-signed-SSL-certs - -## OLD: TODO - -[Quote from advise](https://github.com/meteor/meteor/issues/9796#issuecomment-443520767): - -> Identify the core service your app is providing and make sure it is running independently. Put everything non-critical, including reporting, on some other system. - -[Look at scaling tips here](https://github.com/meteor/meteor/issues/9796#issuecomment-411373831), quote: - -> smeijer commented 25 days ago -> Just wanted to let know that I haven't experienced this issue anymore since I've replaced a lot of `meteor publications` with `apollo/graphql requests`. -> -> The reactivity is thereby lost, but in my case a 30sec poll is also fine. On the places that I do require reactivity, I only `publish` a single `timestamp`. This timestamp is passed through to `apollo`, which triggers a `refetch` when the timestamp is changed. -> -> The [discussion here](https://forums.meteor.com/t/implementing-livedocument-as-an-alternative-to-livequery-discussion/40152) has also been helpfull to improve performance here and there. - -[Rocket.Chat scaling tips](https://rocket.chat/docs/installation/manual-installation/multiple-instances-to-improve-performance/) - -## Kadira - -- https://github.com/edemaine/kadira-compose -- https://github.com/meteor/meteor-apm-agent -- https://github.com/kadira-open/kadira-server -- https://www.gethappyboards.com/2017/07/rolling-out-your-own-instance-of-kadira/ - -## Finding memory leaks - -**[Collect a heap profile and then analyze it](https://github.com/v8/sampling-heap-profiler)** - -[Older article: How to Self Detect a Memory Leak in Node](https://www.nearform.com/blog/self-detect-memory-leak-node/) - -## 100% CPU usage - -1) Increase ulimit system wide to 100 000 in systemd config. - -2) Wekan Javascript code has [increaded fiber poolsize](https://github.com/wekan/wekan/blob/main/server/authentication.js#L5-L9). - -3) There is [on-going 100% CPU usage Meteor issue](https://github.com/meteor/meteor/issues/9796#issuecomment-400079380) and hopefully [fixes to Node.js will land in Node v8.12](https://github.com/nodejs/node/pull/21593#issuecomment-403636667) sometime. Node 8.12 is now released and official version included at Wekan. - -## Scaling to thousands of users - -[Production setup at AWS](AWS) - -## Current versions of dependencies - -[Dockerfile](https://github.com/wekan/wekan/blob/main/Dockerfile), versions of Meteor.js, Node etc listed at beginning. - -[Included Meteor packages](https://github.com/wekan/wekan/blob/main/.meteor/packages) - -[Included Meteor package versions](https://github.com/wekan/wekan/blob/main/.meteor/versions) - -[Added packages at package.json](https://github.com/wekan/wekan/blob/main/package.json) - -## Build from source - -Wekan: -- On any x64 hardware that has Ubuntu 14.04 or Debian 9 or newer installed directly or in VM: -[Build from source scripts](https://github.com/wekan/wekan-maintainer/tree/master/virtualbox) - -Wekan for Sandstorm: -- Install above Wekan from source -- Install [Sandstorm locally](https://sandstorm.io/install) with `curl https://install.sandstorm.io | bash`, select dev install -- Install [meteor-spk](https://github.com/sandstorm-io/meteor-spk) -- Get 100% CPU issue fibers fixed node, and copy it to spk directory:
-`wget https://releases.wekan.team/node`
-`chmod +x node`
-`mv node ~/projects/meteor-spk/meteor-spk-0.4.0/meteor-spk.deps/bin/` -- Add to your /home/username/.bashrc :
`export PATH=$PATH:$HOME/projects/meteor-spk/meteor-spk-0.4.0` -- Close and open your terminal, or read settings from .bashrc with
`source ~/.bashrc` -- `cd wekan && meteor-spk dev` -- Then Wekan will be visible at local sandstorm at http://local.sandstorm.io:6080/ -- Sandstorm commands: `sudo sandstorm`. [Release scripts](https://github.com/wekan/wekan-maintainer/tree/master/releases). Official releases require publishing key that only xet7 has. - -Docker: -- `git clone https://github.com/wekan/wekan` -- `cd wekan` -- Edit docker-compose.yml script ROOT_URL etc like documented at https://github.com/wekan/wekan-mongodb docker-compose.yml script -- `docker-compose up -d --build` \ No newline at end of file diff --git a/docs/DeveloperDocs/Deep-Dive-Into-WeKan.md b/docs/DeveloperDocs/Deep-Dive-Into-WeKan.md deleted file mode 100644 index 5281d61f1..000000000 --- a/docs/DeveloperDocs/Deep-Dive-Into-WeKan.md +++ /dev/null @@ -1,136 +0,0 @@ -## WeKan Interview 2023-12-08 starts at 22min 22sec - -https://www.youtube.com/watch?v=ke-mbnZM3zE - -## Screenshot of Meteor WeKan - -Meteor WeKan screenshot - -## Description of Meteor WeKan - -- WeKan Open Source kanban with MIT license. -- Translated to 70+ languages https://explore.transifex.com/wekan/wekan/ -- Used in most countries of the world https://snapcraft.io/wekan -- Biggest user have about 30k users, using many pods at Kubernetes -- Changelog https://github.com/wekan/wekan/blob/main/CHANGELOG.md -- Commercial Support at https://wekan.team/commercial-support/ . Currently looking who could sponsor more of maintenance and development. - -## How much effort to create Meteor WeKan, in COCOMO model - -- WeKan 134k lines of code: 34 years of effort, 316 contributors https://openhub.net/p/wekan -- Meteor.js, 224k lines of code: 59 years of effort, 819 contributors https://openhub.net/p/meteor-js -- Since December 2016, WeKan maintainer https://github.com/xet7 : - - has added and removed about 4M lines of code https://github.com/wekan/wekan/graphs/contributors - - https://openhub.net/accounts/xet7 - -## Meteor WeKan Browser support - -- Javascript enabled Desktop and Mobile Safari/Chromium/Firefox based browsers -- Apps at Play Store, Windows Microsoft Store, Ubuntu Touch OpenStore https://github.com/wekan/wekan/wiki/Browser-compatibility-matrix -- Alternatively, for self-hosted WeKan, create PWA icon https://github.com/wekan/wekan/wiki/PWA -- Using WeKan with big touchscreen https://github.com/wekan/wekan/wiki/Touch-Screen-support - -## Meteor WeKan Server - -- Meteor.js 2.x, Node.js 14.x https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4 , MongoDB 6.x -- CPU: amd64, arm64, s390x, Source Bundle at https://github.com/wekan/wekan/wiki/Raspberry-Pi -- Windows On-Premise: https://github.com/wekan/wekan/wiki/Offline -- Mac: Docker, or at https://github.com/wekan/wekan/wiki/Mac -- Newest at platforms: Source Bundle, Snap Candidate, Docker, Kubernetes https://wekan.github.io -- Platforms that will be updated to be up-to-date: Snap Stable, Sandstorm, UCS https://wekan.github.io - -## Meteor WeKan Features - -- [WeKan Design Principles](https://github.com/wekan/wekan/wiki/Design-Principles) -- Realtime UI. When someone makes change, like drag card or add text, everyone will see changes immediately. This is because Meteor listens to MongoDB change stream, and updates UI. For some rare cases, there needs to be reload of page, those need to be fixed. -- Whitelabel: Change product name and product image at login screen and board left top corner. Not changing favicon, because there are 100+ favicons for different devices. -- Drag Drop at Desktop and Mobile: - - Board Icons, Swimlanes, Lists, Cards, Checklists, Checklist Items - - Drag handles, per screen https://github.com/wekan/wekan/wiki/Drag-Drop -- Some features similar to Trello and Jira. Some features not in Trello and Jira. -- IFTTT Rules like Trello Butler https://github.com/wekan/wekan/wiki/IFTTT , translated to all supported languages. Trello Butler is only In English. -- Many Assignees like in Jira. -- Change background image and Card Cover. Change Theme. Change color of Boards, Swimlane, List, Card, Label. -- Markdown at: Board name and description, Swimlane, List, Card title and description, Checklist and Checklist Item, Subtask title, https://github.com/wekan/wekan/wiki/Wekan-Markdown -- Emoji https://github.com/wekan/wekan/wiki/Emoji -- MathML -- Preview card attachment image and PDF -- Show Start at End Dates of card at Calendar of Swimlanes/Lists/Calendar dropdown menu -- Custom Fields https://github.com/wekan/wekan/wiki/Custom-Fields -- Subtasks https://github.com/wekan/wekan/wiki/Subtasks -- Planning Poker / Scrum Poker at Card https://github.com/wekan/wekan/wiki/Planning-Poker . No other card games yet ;) -- For board actions, like move card etc, Per Board and Global Outgoing and 2-way webhooks to Chat (RocketChat, Slack, Discord etc), NodeRED, or PHP webhook receiver like https://github.com/wekan/webhook -- At top right username menu: - - Search All Boards, with search options - - Public Boards. Board can be set private or public. At Admin Panel is option to disable public boards, so all boards are private. - - Change Language - - My Cards and Due Cards: Show cards where you are member or assignee, from all boards -- At top of current board: - - Filter cards, by user etc - - Multi-Selection, checkmark and drag many cards at once - - Sort current board -- Python and PHP based additional features https://github.com/wekan/wekan/wiki/Python -- Admin Panel: - - Organizations/Teams/People. Impersonate User, logged to database when someone uses that feature. - - Customize Translations https://github.com/wekan/wekan/wiki/Customize-Translations - -## Technical details - -- Reactive Cache - - mfilser tested speed improvement for half a year, and finally made huge PR to WeKan v7.00 to make all of WeKan use Reactive cache https://github.com/wekan/wekan/pull/5014 - - Reactive Cache Repo https://github.com/wekan/meteor-reactive-cache , xet7 updated dependencies - - Big performance improvements https://github.com/wekan/wekan/issues/5000 - - Using same style of API for client and serverside - - Use more ReactiveCache than MiniMongo -- Optimizing and Debugging Meteor, reducing size, links to WeKan dependencies https://github.com/wekan/wekan/wiki/Debugging -- Custom OIDC/OAuth2 login - - Repo https://github.com/wekan/wekan/tree/main/packages/wekan-oidc - - Features: - - At Admin Panel, you can change text of login page button `Login with OIDC` - - Auth0 https://github.com/wekan/wekan/wiki/OAuth2#auth0 . This did take about half year to implement by xet7, was not available anywhere else for Meteor. - - Oracle OIM. https://github.com/wekan/wekan/wiki/Oracle-OIM . For this, customer provided some code. xet7 added fix to make login work even when some login field was missing data, by taking data from other field, all this while xet7 did not have access to customers Oracle OIM, just guessing about what code to add, and it worked. - - GitLab https://github.com/wekan/wekan/wiki/OAuth2#gitlab-providing-oauth2-login-to-wekan - - RocketChat https://github.com/wekan/wekan/wiki/OAuth2#rocketchat-providing-oauth2-login-to-wekan - - Nextcloud https://github.com/wekan/wekan/wiki/Nextcloud - - ADFS 4.0 using OAuth2 and OpenID https://github.com/wekan/wekan/wiki/ADFS - - Azure https://github.com/wekan/wekan/wiki/Azure - - Keycloak https://github.com/wekan/wekan/wiki/Keycloak - - Google login https://github.com/wekan/wekan/wiki/Google-login -- Custom LDAP - - LDAP https://github.com/wekan/wekan/wiki/LDAP - - LDAP AD Simple Auth https://github.com/wekan/wekan/wiki/LDAP-AD-Simple-Auth -- Default board for users https://github.com/wekan/wekan/pull/5098 -- Brute Force Accounts Lockout https://github.com/wekan/wekan/wiki/Accounts-Lockout -- Markdown, Emoji, MathML, sanitizing https://github.com/wekan/wekan/blob/main/packages/markdown/src/template-integration.js -- Many security fixes from Responsible Disclosure https://wekan.github.io/hall-of-fame/ - -## Upcoming Features - -- CAS https://github.com/wekan/wekan/wiki/CAS -- SAML https://github.com/wekan/wekan/wiki/SAML - -## Video - -- Creator of WeKan, mquandalle (Maxime Quandalle) https://www.youtube.com/watch?v=N3iMLwCNOro -- https://github.com/wekan/wekan/wiki/FAQ#what-was-wekan-fork--wefork -- Maintainer of WeKan since December 2016, xet7 (Lauri Ojansivu), about WeKan Multiverse at EU NGI Dapsi https://www.youtube.com/watch?v=BPPjiZHVeyM . More about Multiverse at https://github.com/wekan/wekan/wiki/WeKan-Multiverse-Roadmap - -## Maybe? - -- https://github.com/frozeman/meteor-persistent-minimongo2 - -## Upcoming upgrades to Meteor 3.0 - -- This Week in MeteorJS: 22 September 2023 https://www.youtube.com/watch?v=UWVL1xUP9r0 -- There Jan Dvorak IV https://github.com/StorytellerCZ commented chat: "We should do deep dive into WeKan!" -- So here is The Deep Dive! -- Questions for upcoming "This Week in MeteorJS", some already mentioned to be upcoming: - - How to upgrade dependencies to Meteor 3.0 ? Some answer was to mention Meteor version at package dependency: - Meteor 3.0 upgrading dependencies - - But what if adding dependency adds some more error messages? Probably that depends on error message, like here when - trying to upgrade to Meteor 3.0 alpha 15: https://github.com/wekan/wekan/issues/5142 - - https://forums.meteor.com/t/my-journey-towards-meteor-3-0/60001/23 - - https://github.com/bratelefant/Meteor-Files - - https://github.com/bratelefant/meteor-roles - - https://github.com/bratelefant/meteor-multitenancy - diff --git a/docs/DeveloperDocs/Design-Principles.md b/docs/DeveloperDocs/Design-Principles.md deleted file mode 100644 index cfca81bab..000000000 --- a/docs/DeveloperDocs/Design-Principles.md +++ /dev/null @@ -1,37 +0,0 @@ -## WeKan Design Principles - -- 2024-08 Design discussion here: https://github.com/wekan/wekan/discussions/5507 -- Original WeKan Design: - - Uses WeKan style confirm popups `Popup.afterConfirm(` , translations etc. Please look at existing code to keep same style. - - Kanban, the good parts. Like was done when figuring out best design for Swimlanes https://github.com/wekan/wekan/issues/955 - - Intuitive, easy to figure out, prevent messing up something https://github.com/wekan/wekan/wiki/Monkey-Proof-Software - - Polished UI/UX - - Menu options are there where you would expect then to be. - - Try to fix anything unexpected. - - New features added there where it makes most sense. - - Not too many toggles and settings, because that is worse. For example, Discord settings has too many toggles and settings. Just select some default. - - FOSS with MIT license - - Swimlanes - - All the use cases of WeKan feature/fix contributors - - Cross-platform. Support many CPU/OS/Browsers for Desktop and Mobile. - - Support many browsers https://github.com/wekan/wekan/wiki/Browser-compatibility-matrix . Add support for more. - - PWA https://github.com/wekan/wekan/wiki/PWA - - On-Premise: - - Linux amd64/arm64/s390x - - https://wekan.github.io/install/ - - https://github.com/wekan/wekan/wiki/Raspberry-Pi - - Windows https://github.com/wekan/wekan/wiki/Offline - - Mac https://github.com/wekan/wekan/wiki/Mac -- Not like other software: - - But note that design of all software changes often, when they are in active development. -- Not bad parts of Trello: - - Not the exact design of Trello https://github.com/wekan/wekan/wiki/FAQ#why-does-wekan-look-so-different-now-compared-to--v09 - - Not so many duplicate menus and texts like Trello - - Not so much empty space -- Some good parts of Trello: - - Import from Trello - - Shortcuts https://github.com/wekan/wekan/issues/1878 - - IFTTT Rules like Trello Butler https://github.com/wekan/wekan/wiki/IFTTT - - Progress bar of checklist -- Some good parts of Jira: - - Multiple assignees \ No newline at end of file diff --git a/docs/DeveloperDocs/Developer-Documentation.md b/docs/DeveloperDocs/Developer-Documentation.md deleted file mode 100644 index 7393c06da..000000000 --- a/docs/DeveloperDocs/Developer-Documentation.md +++ /dev/null @@ -1,107 +0,0 @@ -# Style guide - -We follow the [meteor style guide](https://guide.meteor.com/code-style.html#javascript). - -Please read the meteor style guide before making any significant contribution. - -# Stories about how Wekan works, and developing Wekan - -- [Login code](https://github.com/wekan/wekan/issues/5714) -- https://www.mongodb.com/docs/drivers/node/v3.7/fundamentals/promises/ -- [Do not use code formatters like Prettier and ESLint](https://github.com/wekan/wekan/pull/4633#issuecomment-1214214591) -- [How realtime board updates work](https://github.com/wekan/wekan/issues/3788#issuecomment-834649553) -- [Mobile Web interface](https://github.com/wekan/wekan/issues/3566#issuecomment-778700604) -- [How to add RTL support](https://github.com/wekan/wekan/issues/3376#issuecomment-766092425) -- [How to code Part 1](https://blog.wekan.team/2019/04/howto-code-part-1-learning-to-learn/) -- [First time Wekan contributor easily figures out Wekan and develops big features](https://blog.wekan.team/2018/05/wekan-v1-00-released/) -- [Benefits of contributing your features to upstream Wekan](https://blog.wekan.team/2018/02/benefits-of-contributing-your-features-to-upstream-wekan/) -- [Excellent example how pull requests are improved and integrated, and not needed commits removed](https://github.com/wekan/wekan/pull/1470) -- [How to add dependency](https://github.com/wekan/wekan/discussions/5235) -- [How to add set default view feature](https://github.com/wekan/wekan/discussions/5233) -- [Adding SVG image](https://github.com/wekan/wekan/discussions/5211#discussioncomment-7765365) - -## Building code and submitting pull request - -- [Building code and submitting pull request](emoji#how-you-could-add-another-plugin) -- When you start `meteor` command, it watches for changes to files in wekan directory and subdirectories, and if it detects changed code, it starts rebuilding bundle and then reloads webbrowser after that automatically -- Also look at meteor changelog mentioned new feature `hot reload` how that could make reloading faster - -## VSCode / VSCodium - -- I use [VSCodium](https://vscodium.com) that has MS tracking code removed -- Plugin Prettier for right click format javascript code with prettier -- There could be other plugins for Meteor, Jade, Stylus, Dockerfile, etc - -## Finding code - -There is find.sh script that ignores generated directories, finds code in subdirectories, and paginates with less. For example, finding how search cards is implemented: -``` -cd wekan -./find.sh js-search -``` -When you run this, you see .jade template files where is search input box, and .js files where is the search code. CSS is in .styl files. - -## Getting Started - -- Currently Wekan development is done mainly at Ubuntu 20.10 64bit, but building Wekan does work on any Debian, Ubuntu, WSL Ubuntu 20.04, [Mac](Mac). Sametime maybe on [Windows](Windows) with `choco install -y meteor` and installing packages it then asks for with `meteor add ...` or `meteor npm install --save ...` and then running meteor again. - - Look through old [pull requests](https://github.com/wekan/wekan/pulls) - - Read Wekan source code, you can use some git history viewer GUI like gitk - - Read [Meteor documentation](https://docs.meteor.com/) for [Meteor version](https://github.com/wekan/wekan/blob/main/.meteor/release) in use, other versions mentioned at [Dockerfile](https://github.com/wekan/wekan/blob/main/Dockerfile) -- Docker up-to-date way: You can clone wekan/wekan repo and update docker-compose.yml file ROOT_URL etc as documented at https://github.com/wekan/wekan commented `docker-compose.yml` file, install docker, and build from source with docker with `docker compose up -d --build` -- Docker not up-to-date way: [Docker environment for Wekan development](https://github.com/wekan/wekan-dev). - -## Pull Request Workflow (Please read before submitting PR's) - -- If package is available on meteor https://atmospherejs.com `meteor add packagename` or https://www.npmjs.com `meteor npm install packagename` then it's enough to add package that way, and there is no need to clone repo in [rebuild-wekan.sh](https://github.com/wekan/wekan-maintainer/tree/master/releases) script. -- When doing pull requests, only add additions and changes to English at wekan/i18n/en.i18n.json . Other translations are done at [https://app.transifex.com/wekan/](https://app.transifex.com/wekan/). -- If you have fix to some existing pull request, add your fix as comment. Do not post new pull request. -- For new features add new pull request, if there is none already. -- remove all console.log statements -- [Here is how to remove commits from pull request](https://stackoverflow.com/questions/36168839/how-to-remove-commits-from-pull-request) - -## Preventing Travis CI lint errors before submitting pull requests - -- NOTE: Travis is currently broken and always shows warnings and errors like variables not defined or not used, so if your code works, ignore Travis. -- Eslint for linting. To prevent Travis CI lint errors, you can test for lint errors by installing `npm install eslint` and running it with `npm run lint` and trying automatic fixing with `eslint --fix filename.js` -- There is also probably not-currently-working as of 2018-05-05 [jsbeautifer website](http://jsbeautifier.org) with settings Indent with 2 spaces (topmost dropdown), [X] Space before conditional: "if(x)" / "if (x)", [X] Use JSLint-happy formatting tweaks. - -## Choosing issues to work on - -- You are free to select what feature to work on. - - Leave a comment on an issue saying that you're working on it, and give updates as needed. - - Work and concentrate on one issue at a time and finish it, before moving to other issue. -- Keep list of your contributions on your personal website. -- Keep track of time it takes to implement each part of a feature, so you can estimate what time it would take to implement similar feature. After implementing feature, review your estimate was it correct, make improvements to your process and estimates, also keeping enough time allocated in estimate if something is harder to implement. Employers look for coders with proven track record. -- You can ask for comments from others, but usually those feature requests are clearly defined how they should work. You can place those Settings options there where it seems most logical for you. - -Main point is to be friendly to those commenting of your code, and incorporate those suggestions that make most sense. - -# Build Pipeline - -- Templates are written in [JADE](https://naltatis.github.io/jade-syntax-docs/) instead of plain HTML. Also see [HTML to JADE converter](http://html2jade.org/). -- CSS is written in the [Stylus](http://stylus-lang.com/) precompiler - see [Stylus to CSS converter](https://mikethedj4.github.io/Stylus2CSS/), and -- Meteor templates are created as BlazeLayout templates. -- Instead of the allow/deny paradigm a lot of the `collections` defined in the project use `mutations` to define what kinds of operations are allowed. - -For further details look for the 'feature summaries' in the Wiki (still in progress) otherwise go through the git history and see how old features were built. Might I suggest the Start and Due date feature [wefork#26](https://github.com/wefork/wekan/pull/26) - -# Translations - -If adding new features, please also support the internationalization features built in. Refer to the [[Translations]] wiki page. - -# Export From Trello - -It's possible to import your existing boards from Trello. Instructions [[here|migrating-from-trello]] - -# Directory Structure Details - -[Directory Structure](Directory-Structure) - -# Chat - -[![Wekan chat][vanila_badge]][vanila_chat] - - -[rocket_chat]: https://chat.indie.host/channel/wekan -[vanila_badge]: https://vanila.io/img/join-chat-button2.png -[vanila_chat]: https://community.vanila.io/wekan \ No newline at end of file diff --git a/docs/DeveloperDocs/Directory-Structure.md b/docs/DeveloperDocs/Directory-Structure.md deleted file mode 100644 index 8e6749342..000000000 --- a/docs/DeveloperDocs/Directory-Structure.md +++ /dev/null @@ -1,187 +0,0 @@ -# Routing - -We're using [FlowRouter](https://github.com/kadirahq/flow-router) client side router inside **[config/router.js](https://github.com/wekan/wekan/tree/main/config/router.js)**. -For accounts there is [AccountsTemplates](https://github.com/meteor-useraccounts) configured in **[config/accounts.js](https://github.com/wekan/wekan/tree/main/config/accounts.js)**. - -# Client - -## public - -Files in this directory are served by meteor as-is to the client. It hosts some (fav)icons and fonts. -**[wekan-manifest.json](https://github.com/wekan/wekan/tree/main/wekan-manifest.json)**: goes into `link rel="manifest"` in the header of the generated page and is a [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest). - -## components - -* **[activities](https://github.com/wekan/wekan/tree/main/client/components/activities)**: - * **[activities.jade](https://github.com/wekan/wekan/tree/main/client/components/activities/activities.jade)**: `activities` template for the list of activities placed inside a `sidebar-content`; uses `boardActivities` or `cardActivities` depending on `mode`; *XXX: does this mean that sidebar should be visible in board list mode? when does the `board` activity gets shown?* - * **[comments.jade](https://github.com/wekan/wekan/tree/main/client/components/activities/comments.jade)**: `commentForm` template used in `card-details-canvas` for adding comments; -* **[boards](https://github.com/wekan/wekan/tree/main/client/components/boards)**: - * **[boardArchive.jade](https://github.com/wekan/wekan/tree/main/client/components/boards/boardArchive.jade)**: `archivedBoards` template for the modal dialog showing the list of archived boards that might be restored; - * **[boardBody.jade](https://github.com/wekan/wekan/tree/main/client/components/boards/boardBody.jade)**: top level template for presenting a board is `board` and, based on screen size and current state, it uses either `cardDetails` or `boardBody` templates; `boardBody` is the one including the `sidebar`, each `list`, `cardDetails` for larger screens when a card is selected and the `addListForm` for adding a new list (also defined in this file); - * **[boardHeader.jade](https://github.com/wekan/wekan/tree/main/client/components/boards/boardHeader.jade)**: `boardHeaderBar`, `boardMenuPopup`, `boardVisibilityList`, `boardChangeVisibilityPopup`, `boardChangeWatchPopup`, `boardChangeColorPopup`, `createBoard`, `chooseBoardSource`, `boardChangeTitlePopup`, `archiveBoardPopup`, `outgoingWebhooksPopup`; - * **[boardsList.jade](https://github.com/wekan/wekan/tree/main/client/components/boards/boardsList.jade)**: `boardList` and `boardListHeaderBar` for the list of boards in the initial screen; -* **[cards](https://github.com/wekan/wekan/tree/main/client/components/cards)**: - * **[attachments.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/attachments.jade)**: `cardAttachmentsPopup`, `previewClipboardImagePopup`, `previewAttachedImagePopup`, `attachmentDeletePopup`, `attachmentsGalery`; - * **[cardDate.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/cardDate.jade)**: `editCardDate` and `dateBadge` templates; - * **[cardDetails.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/cardDetails.jade)**: `boardsAndLists` is the usual layout for a board display with `boardLists` being used in sandstorm where each board is independent;`cardDetails`, `editCardTitleForm`, `cardDetailsActionsPopup`, `moveCardPopup`, `copyCardPopup`,`cardMembersPopup`,`cardMorePopup`, `cardDeletePopup`; - * **[cardTime.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/cardTime.jade)**: `editCardSpentTime` and `timeBadge` templates; - * **[checklists.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/checklists.jade)**: `checklists`, `checklistDetail`, `checklistDeleteDialog`, `addChecklistItemForm`, `editChecklistItemForm`, `checklistItems`, `itemDetail`; - * **[labels.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/labels.jade)**: `formLabel`, `createLabelPopup`, `editLabelPopup`, `deleteLabelPopup`, `cardLabelsPopup`; - * **[minicard.jade](https://github.com/wekan/wekan/tree/main/client/components/cards/minicard.jade)**: has the `minicard` template -* **[forms](https://github.com/wekan/wekan/tree/main/client/components/forms)**: **[inlinedform.jade](https://github.com/wekan/wekan/tree/main/client/components/forms/inlinedform.jade)** has the`inlinedForm` template; -* **[import](https://github.com/wekan/wekan/tree/main/client/components/import)**: - * **[import.jade](https://github.com/wekan/wekan/tree/main/client/components/import/import.jade)**: `importHeaderBar`, `import`, `importTextarea`, `importMapMembers`, `importMapMembersAddPopup` are all templates used for importing Trello (via **[trelloMembersMapper.js](https://github.com/wekan/wekan/tree/main/client/components/import/trelloMembersMapper.js)**) and Wekan (via **[wekanMembersMapper.js](https://github.com/wekan/wekan/tree/main/client/components/import/wekanMembersMapper.js)**) boards; -* **[lists](https://github.com/wekan/wekan/tree/main/client/components/lists)**: - * **[list.jade](https://github.com/wekan/wekan/tree/main/client/components/lists/list.jade)**: `list` is the simple, main template for lists; - * **[listBody.jade](https://github.com/wekan/wekan/tree/main/client/components/lists/listBody.jade)**: `listBody`, `addCardForm`, `autocompleteLabelLine` templates; - * **[listHeader.jade](https://github.com/wekan/wekan/tree/main/client/components/lists/listHeader.jade)**: `listHeader`, `editListTitleForm`, `listActionPopup`, `boardLists`, `listMorePopup`, `listDeletePopup`, `setWipLimitPopup`, `wipLimitErrorPopup` templates; -* **[main](https://github.com/wekan/wekan/tree/main/client/components/main)**: - * **[editor.jade](https://github.com/wekan/wekan/tree/main/client/components/main/editor.jade)**: `editor` and `viewer` templates; - * **[header.jade](https://github.com/wekan/wekan/tree/main/client/components/main/header.jade)**: `header` and `offlineWarning` templates; if the user is connected we display a small "quick-access" top bar that list all starred boards with a link to go there (this is inspired by the Reddit "subreddit" bar); the first link goes to the boards page; - * **[keyboardShortcuts.jade](https://github.com/wekan/wekan/tree/main/client/components/main/keyboardShortcuts.jade)**: `shortcutsHeaderBar`, `shortcutsModalTitle`, `keyboardShortcuts` - all for the shortcuts that are presented when you press `?`re implemented inhere; - * **[layouts.jade](https://github.com/wekan/wekan/tree/main/client/components/main/layouts.jade)**: has the template for head portion of the html page and other general purpose templates: `userFormsLayout`, `defaultLayout`, `notFound`, `message`; - * **[popup.tpl.jade](https://github.com/wekan/wekan/tree/main/client/components/main/popup.tpl.jade)**: tpl files only define a single template so there's no need to wrap content in a template tag; the name of the template is the base name of the file (`popup` in this case); - * **[spinner.tpl.jade](https://github.com/wekan/wekan/tree/main/client/components/main/spinner.tpl.jade)**: is the template for a "waiting" dialog; -* **[settings](https://github.com/wekan/wekan/tree/main/client/components/settings)**: - * **[informationBody.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/informationBody.jade)**: `information`, `statistics` templates; - * **[invitationCode.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/invitationCode.jade)**: `invitationCode` template; - * **[peopleBody.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/peopleBody.jade)**: `people`, `peopleGeneral`, `peopleRow`, `editUserPopup`; - * **[settingBody.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/settingBody.jade)**: `setting`, `general`, `email`, `accountSettings`, `announcementSettings` - * **[settingHeader.jade](https://github.com/wekan/wekan/tree/main/client/components/settings/settingHeader.jade)**: `settingHeaderBar` template; -* **[sidebar](https://github.com/wekan/wekan/tree/main/client/components/sidebar)**: - * **[sidebar.jade](https://github.com/wekan/wekan/tree/main/client/components/sidebar/sidebar.jade)**: `sidebar`, `homeSidebar`, `membersWidget`, `labelsWidget`, `memberPopup`, `removeMemberPopup`, `leaveBoardPopup`, `addMemberPopup`, `changePermissionsPopup` - * **[sidebarArchives.jade](https://github.com/wekan/wekan/tree/main/client/components/sidebar/sidebarArchives.jade)**: `archivesSidebar` - * **[sidebarFilters.jade](https://github.com/wekan/wekan/tree/main/client/components/sidebar/sidebarFilters.jade)**: `filterSidebar`, `multiselectionSidebar`, `disambiguateMultiLabelPopup`, `disambiguateMultiMemberPopup`, `moveSelectionPopup`; -* **[users](https://github.com/wekan/wekan/tree/main/client/components/users)**: - * **[userAvatar.jade](https://github.com/wekan/wekan/tree/main/client/components/users/userAvatar.jade)**: `userAvatar`, `userAvatarInitials`, `userPopup`, `memberName`, `changeAvatarPopup`, `cardMemberPopup` - * **[userHeader.jade](https://github.com/wekan/wekan/tree/main/client/components/users/userHeader.jade)**: `headerUserBar`, `memberMenuPopup`, `editProfilePopup`, `editNotificationPopup`, `changePasswordPopup`, `changeLanguagePopup`, `changeSettingsPopup`; -* **[mixins](https://github.com/wekan/wekan/tree/main/client/components/mixins)**: [extends](http://www.meteorpedia.com/read/Infinite_Scrolling) **[infiniteScrolling.js](https://github.com/wekan/wekan/tree/main/client/components/mixins/infiniteScrolling.js)** for card details, sidebar and also extends **[perfectScrollbar.js](https://github.com/wekan/wekan/tree/main/client/components/mixins/perfectScrollbar.js)**; - -## config - -* **[blazeHelpers.js](https://github.com/wekan/wekan/tree/main/client/config/blazeHelpers.js)**: following [Blaze](http://blazejs.org/) helpers are registered here:`currentBoard()`, `currentCard()`, `getUser()` and `concat()`; -* **[gecko-fix.js](https://github.com/wekan/wekan/tree/main/client/config/gecko-fix.js)**: removes [deprecated](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch)`watch` and `unwatch` from Firefox prior to version 58; -* **[presence.js](https://github.com/wekan/wekan/tree/main/client/config/presence.js)**: custom state function for [Presence](https://github.com/dburles/meteor-presence) that keeps track of current board; -* **[reactiveTabs.js](https://github.com/wekan/wekan/tree/main/client/config/reactiveTabs.js)**: [ReactiveTabs](https://github.com/meteortemplates/tabs) are configured to use `basicTabs` template. - -## lib - -* **[accessibility.js](https://github.com/wekan/wekan/tree/main/client/lib/accessibility.js)**: define a set of DOM transformations that are specifically intended for blind screen readers; -* **[cssEvents.js](https://github.com/wekan/wekan/tree/main/client/lib/cssEvents.js)**: the `CSSEvents`object has methods that select the name of the event based on the specific transitions and animations; -* **[pasteImage.js](https://github.com/wekan/wekan/tree/main/client/lib/pasteImage.js)** and **[dropImage.js](https://github.com/wekan/wekan/tree/main/client/lib/dropImage.js)**: utility for pasting and dropping images on a web app; *XXX: add comments; not same style as the rest of the code* -* **[emoji-values.js](https://github.com/wekan/wekan/tree/main/client/lib/emoji-values.js)**: sets Emoji.values; -* **[escapeActions.js](https://github.com/wekan/wekan/tree/main/client/lib/escapeActions.js)**: defines the behavior (mostly canceling current edit) for escape keyboard key; -* **[i18n.js](https://github.com/wekan/wekan/tree/main/client/lib/i18n.js)**: at startup we choose the language for the ui based on user profile or browser language; -* **[inlinedform.js](https://github.com/wekan/wekan/tree/main/client/lib/inlinedform.js)**: forms for editing a single field (like adding a card); *XXX: comments in code suggest that a form that is not submitted will retain its value to prevent data loss using [unsavedEdits.js](https://github.com/wekan/wekan/tree/main/client/lib/unsavedEdits.js);bug?*; *XXX: edit button to save and open*; -* **[keyboard.js](https://github.com/wekan/wekan/tree/main/client/lib/keyboard.js)**: the shortcuts that are presented when you press `?`re implemented inhere; -* **[mixins.js](https://github.com/wekan/wekan/tree/main/client/lib/mixins.js)**: stub; no `Mixins` at this point; *XXX: what does `new class` do? exlint: missing () invoking a constructor* -* **[popup.js](https://github.com/wekan/wekan/tree/main/client/lib/popup.js)**: defines `Popup` class for things likes electing a date; *XXX: not a Blaze helper?* -* **[textComplete.js](https://github.com/wekan/wekan/tree/main/client/lib/textComplete.js)**: extends [jquery-textcomplete](https://yuku-t.com/jquery-textcomplete/) to integrate with the rest of the system (like escape actions, tab and enter key handling); *XXX: deprecated?* -* **[utils.js](https://github.com/wekan/wekan/tree/main/client/lib/utils.js)**: various methods all over the place (resize, screen size, sort, capitalize, navigate to board and card); -* **Blaze helpers**: - * **[filter.js](https://github.com/wekan/wekan/tree/main/client/lib/filter.js)**: registers `Filter` [Blaze](http://blazejs.org/) helper to support filtering cards by labels and by members; - * **[modal.js](https://github.com/wekan/wekan/tree/main/client/lib/modal.js)**: registers `Modal` [Blaze](http://blazejs.org/) helper to support showing modal windows like the one for archived boards; - * **[multiSelection.js](https://github.com/wekan/wekan/tree/main/client/lib/multiSelection.js)**: registers `Modal` [Blaze](http://blazejs.org/) helper to support multiple selection mode; - * **[unsavedEdits.js](https://github.com/wekan/wekan/tree/main/client/lib/unsavedEdits.js)**: registers `getUnsavedValue` and `hasUnsavedValue` [Blaze](http://blazejs.org/) helpers to preserve content entered in fields but not saved; - -# Server - -.js files in this directory are not available to the client. - -* **[statistics.js](https://github.com/wekan/wekan/tree/main/server/statistics.js)** implements a Meteor server-only [method](https://guide.meteor.com/methods.html) for general-purpose information such as OS, memory, CPUs, PID of the process and so on. -* **[migrations.js](https://github.com/wekan/wekan/tree/main/server/migrations.js)** is where code that update sold databases to new schema is located. Anytime the schema of one of the collection changes in a non-backward compatible way a migration needs to be written in this file. -* **[authentication.js](https://github.com/wekan/wekan/tree/main/server/authentication.js)** add the `Authentication`object to Meteor that provides methods for checking access rights. -* **[lib/utils.js](https://github.com/wekan/wekan/tree/main/server/lib/utils.js)** defines some checks used by [checklists.js](https://github.com/wekan/wekan/tree/main/models/checklists.js)** model. *XXX: these methods are defined in server-only code by are used in models, which are visible by the client (in Checklists.allow)?* -* **[notifications](https://github.com/wekan/wekan/tree/main/server/notifications)** - * **[notifications.js](https://github.com/wekan/wekan/tree/main/server/notifications/notifications.js)**: defines the `Notifications` object that supports [Activities](models/activities.js) and holds a list of functions to call when its `notify()` method is called along with convenience methods to subscribe, unsubscribe and a way to filter recipients according to user settings for notification; - * **[email.js](https://github.com/wekan/wekan/tree/main/server/notifications/email.js)**: makes use of the notification system to send an email to a user; - * **[profile.js](https://github.com/wekan/wekan/tree/main/server/notifications/profile.js)**: *stub*; will allow associating notifications with user ids to be consumed by mobile apps; - * **[notifications.js](https://github.com/wekan/wekan/tree/main/server/notifications/notifications.js)**: adds the `watch()` Meteor server-only [method](https://guide.meteor.com/methods.html) that may watch boards, lists or cards using [models/watchable.js](https://github.com/wekan/wekan/tree/main/models/watchable.js); - * **[outgoing.js](https://github.com/wekan/wekan/tree/main/server/notifications/outgoing.js)**: adds the `outgoingWebhooks()` Meteor server-only [method](https://guide.meteor.com/methods.html) that can call external API *XXX: I guess* -* **[publications](https://github.com/wekan/wekan/tree/main/server/publications)** defines sets of records that are [published](https://docs.meteor.com/api/pubsub.html#Meteor-publish) by the server and how clients can subscribe to those: - * **[accountSettings.js](https://github.com/wekan/wekan/tree/main/server/publications/accountSettings.js)**: [AccountSettings](models/accountSettings.js) collection; - * **[activities.js](https://github.com/wekan/wekan/tree/main/server/publications/activities.js)**: [Activities](models/activities.js) collection filtered and paginated; - * **[announcements.js](https://github.com/wekan/wekan/tree/main/server/publications/announcements.js)**: [Announcements](models/announcements.js) collection; - * **[avatars.js](https://github.com/wekan/wekan/tree/main/server/publications/avatars.js)**: [Avatars](models/avatars.js) collection for current user; - * **[boards.js](https://github.com/wekan/wekan/tree/main/server/publications/boards.js)**: [Boards](models/boards.js) collection for current user, archived boards collection and individual board as a [relation](https://atmospherejs.com/cottz/publish-relations); - * **[cards.js](https://github.com/wekan/wekan/tree/main/server/publications/cards.js)**: a [Card](https://github.com/wekan/wekan/tree/main/models/cards.js) by its id; - * **[fast-render.js](https://github.com/wekan/wekan/tree/main/server/publications/fast-render.js)**: configures [FastRender](https://github.com/kadirahq/fast-render) to use the board data; *XXX: FastRender docs say "Make sure you're using Meteor.subscribe and not this.subscribe"* - * **[people.js](https://github.com/wekan/wekan/tree/main/server/publications/people.js)**: [Users](models/users.js) collection; - * **[settings.js](https://github.com/wekan/wekan/tree/main/server/publications/settings.js)**: [Settings](models/settings.js) collection and, separately, the mail server; - * **[unsavedEdits.js](https://github.com/wekan/wekan/tree/main/server/publications/unsavedEdits.js)**: [UnsavedEdits](models/unsavedEdits.js) collection; - * **[users.js](https://github.com/wekan/wekan/tree/main/server/publications/users.js)**: provides a "mini-profile" for individual users and a [way](https://docs.meteor.com/api/collections.html#fieldspecifiers) to check if current user is admin. - -# Models - -The files in **[models](https://github.com/wekan/wekan/tree/main/models)** directory mainly define collections; most of them have [aldeed SimpleSchema](https://atmospherejs.com/aldeed/simple-schema) for automatic validation of insert and update of collections. This is also where helpers, mutations, methods, hooks and bootstrap code is to be found. [Server side code](https://docs.meteor.com/api/core.html#Meteor-isServer) also implements json REST API. - -Collections (mostly `Mongo.Collection` except as noted) are defined in: -* **[accountSettings.js](https://github.com/wekan/wekan/tree/main/models/accountSettings.js)**; -* **[activities.js](https://github.com/wekan/wekan/tree/main/models/activities.js)**: does not have a SimpleSchema; -* **[announcements.js](https://github.com/wekan/wekan/tree/main/models/announcements.js)**; -* **[attachments.js](https://github.com/wekan/wekan/tree/main/models/attachments.js)**: file-system collection; -* **[avatars.js](https://github.com/wekan/wekan/tree/main/models/avatars.js)**: file-system collection; -* **[boards.js](https://github.com/wekan/wekan/tree/main/models/boards.js)**; -* **[cardComments.js](https://github.com/wekan/wekan/tree/main/models/cardComments.js)**; -* **[cards.js](https://github.com/wekan/wekan/tree/main/models/cards.js)**; -* **[checklists.js](https://github.com/wekan/wekan/tree/main/models/checklists.js)**; -* **[integrations.js](https://github.com/wekan/wekan/tree/main/models/integrations.js)**; -* **[invitationCodes.js](https://github.com/wekan/wekan/tree/main/models/invitationCodes.js)**; -* **[lists.js](https://github.com/wekan/wekan/tree/main/models/lists.js)**; -* **[settings.js](https://github.com/wekan/wekan/tree/main/models/settings.js)**; -* **[unsavedEdits.js](https://github.com/wekan/wekan/tree/main/models/unsavedEdits.js)**; -* **[users.js](https://github.com/wekan/wekan/tree/main/models/users.js)**: extends the `Meteor.users` collection. - -Other files: -* **[watchable.js](https://github.com/wekan/wekan/tree/main/models/watchable.js)**: extends the schema, helpers and mutations of `Boards`, `Lists` and `Cards`. -* **[export.js](https://github.com/wekan/wekan/tree/main/models/export.js)**: has some code to support the REST API. -* **[import.js](https://github.com/wekan/wekan/tree/main/models/import.js)**: implements `importBoard()` method so that Trello (in **[trelloCreator.js](https://github.com/wekan/wekan/tree/main/models/trelloCreator.js)**) and Wekan (in **[wekanCreator.js](https://github.com/wekan/wekan/tree/main/models/wekanCreator.js)**) boards can be imported. *XXX: Solid candidates for a directory of their own.* - -# Tools - -* Git: - * **.git**; - * **[.gitignore](https://github.com/wekan/wekan/tree/main/.gitignore)**; -* Docker: - * **[docker-compose.yml](https://github.com/wekan/wekan/tree/main/docker-compose.yml)**: the compose file is a YAML file defining services, networks and volumes; - * **[Dockerfile](https://github.com/wekan/wekan/tree/main/Dockerfile)**; -* Snap: - * **[snapcraft.yaml](https://github.com/wekan/wekan/tree/main/snapcraft.yaml)**: [Snapcraft](https://snapcraft.io/) packages any app for every Linux desktop, server, cloud or device, and deliver updates directly; - * **[snap](https://github.com/wekan/wekan/tree/main/snap)**; - * **[snap-src](https://github.com/wekan/wekan/tree/main/snap-src)**; -* Sandstorm: - * **[sandstorm.js](https://github.com/wekan/wekan/tree/main/sandstorm.js)**: [Sandstorm](https://sandstorm.io/) specific code; - * **[sandstorm-pkgdef.capnp](https://github.com/wekan/wekan/tree/main/sandstorm-pkgdef.capnp)**: used the meteor-spk tool to generate a sandstorm package; -* Node: - * **[package.json](https://github.com/wekan/wekan/tree/main/package.json)**; - * **node_modules** - * **[app.json](https://github.com/wekan/wekan/tree/main/app.json)**: is a manifest format for describing web apps (build requirements, environment variables, addons, and other information); - * **[app.env](https://github.com/wekan/wekan/tree/main/app.env)**: environment variables; -* Meteor: is a full-stack JavaScript platform for developing modern web and mobile applications. - * **[.meteor](https://github.com/wekan/wekan/tree/main/.meteor)**; -* Translation: - * **[i18n](https://github.com/wekan/wekan/tree/main/i18n)** directory has one .json file for each supported language - * **[.tx](https://github.com/wekan/wekan/tree/main/.tx)**: configuration for [Transifex](https://app.transifex.com/wekan/) tool used to manage translation; -* Text editors: - * **[.vscode](https://github.com/wekan/wekan/tree/main/.vscode)**: [Visual Studio Code Editor](https://code.visualstudio.com/docs/getstarted/settings); - * **[.editorconfig](https://github.com/wekan/wekan/tree/main/.editorconfig)**: [EditorConfig](http://EditorConfig.org) provides consistent coding styles between different editors and IDEs; -* **[.github](https://github.com/wekan/wekan/tree/main/.github)**: hosts the issues template; -* **[.eslintrc.json](https://github.com/wekan/wekan/tree/main/.eslintrc.json)**: [ESLint](https://eslint.org/docs/user-guide/configuring) configuration; -* **[.travis.yml](https://github.com/wekan/wekan/tree/main/.travis.yml)**: configuration for [Travis CI](https://travis-ci.org/); -* **[scalingo.json](https://github.com/wekan/wekan/tree/main/scalingo.json)**: [Scalingo](https://scalingo.com/) is a deploy solution; -* **[fix-download-unicode](https://github.com/wekan/wekan/tree/main/fix-download-unicode)**: `cfs_access-point.txt` from this folder is copied to `bundle/programs/server/packages/cfs_access-point.js` in Docker build and in snapcraft build; this is a monkey patch fix for [downloading files that have unicode in filename](https://github.com/wekan/wekan/issues/784). - -# Info - -* **[meta](https://github.com/wekan/wekan/tree/main/meta)**: binary signatures, project description, icons, screenshots and, oui, a French change-log; -* **[CHANGELOG.md](https://github.com/wekan/wekan/tree/main/CHANGELOG.md)**; -* **[Contributing.md](https://github.com/wekan/wekan/tree/main/Contributing.md)**; -* **[LICENSE](https://github.com/wekan/wekan/tree/main/LICENSE)**; -* **[README.md](https://github.com/wekan/wekan/tree/main/README.md)**. - ---- - -# Contributions to this page - -This documentation was contributed by [TNick](https://github.com/TNick) and [xet7](https://github.com/xet7) while Wekan was at commit [e2f768c](https://github.com/wekan/wekan/tree/e2f768c6a0f913b7c5f07695dce8cec692037255). -Please add new files, fixes, updates, etc directly to this page. diff --git a/docs/DeveloperDocs/Emoji.md b/docs/DeveloperDocs/Emoji.md deleted file mode 100644 index e1cab9b6a..000000000 --- a/docs/DeveloperDocs/Emoji.md +++ /dev/null @@ -1,204 +0,0 @@ -## About markdown changes - -Wekan v4.29 changes markdown rendering from [marked](https://github.com/markedjs/marked) to [markdown-it](https://github.com/markdown-it/markdown-it). - -## About emoji - -With markdown-it, also [markdown-it-emoji](https://github.com/markdown-it/markdown-it-emoji) plugin has been added, supporting [full list of GitHub emojis](https://github.com/markdown-it/markdown-it-emoji/blob/master/lib/data/full.json). - -Example emoji code, that you can add for example to card name, card description etc: -``` -:rainbow: :thumbsup: :100: -``` -That shows emojis :rainbow: :thumbsup: :100: - -## About other markdown-it plugins - -For markdown-it, there are also other [syntax extensions](https://github.com/markdown-it/markdown-it#syntax-extensions) where some are listed at that markdown-it page, and [others at npmjs.com](https://www.npmjs.org/browse/keyword/markdown-it-plugin). - -For example, how to get some [mermaid plugin](https://www.npmjs.com/search?q=markdown-it-mermaid) working so that some syntax works for https://mermaid-js.github.io/mermaid/ ? - -## How you could add another plugin - -Using newest Ubuntu amd64: - -# Meteor 2 - -### 1. Install git and configure it -``` -sudo apt -y install git - -git config --global user.name "Yourfirstname Yourlastname" - -git config --global user.email email-address-you-use-at-github@example.com - -git config --global push.default simple - -nano .ssh/config -``` -There add your User (GitHub username) and IdentityFile (Your ssh private key. Not public key that has .pub). -For indentation, use one tab. -``` -Host * - IdentitiesOnly=yes - -Host github.com - Hostname github.com - User xet7 - IdentityFile ~/.ssh/id_xet7ed -``` -Save and Exit with Ctrl-o Enter Ctrl-x Enter - -If you do not have ssh key, create it: -``` -ssh-keygen -``` -And press Enter about 3 times, until you have private key at `~/.ssh/id_rsa` and public key at `~/.ssh/id_rsa.pub` - -Add public key `.pub` to your github account web interface. - -Add path to Meteor: -``` -nano .bashrc -``` -There at bottom add: -``` -export PATH=~/.meteor:$PATH -``` -Save and Exit with Ctrl-o Enter Ctrl-x Enter - -### 2. Create fork of `https://github.com/wekan/wekan` at GitHub web page - -``` -mkdir repos - -cd repos - -git clone git@github.com:YourGithubUsername/wekan.git - -cd wekan -``` -### 3. Select option 1 to install dependencies, and then Enter. -``` -./rebuild-wekan.sh - -1 - -./rebuild-wekan.sh - -2 - -./rebuild-wekan.sh - -3 -``` -That does: 1 install dependencies, 2 builds wekan, 3 starts wekan in development mode with command `meteor`, so it can detect if some file changes and try to rebuild automatically and reload webbroser. But, still sometimes, it may need stopping with Ctrl-c and full build with option 2. - -And then [register and login](Adding-users) at http://localhost:4000 - -### OPTIONAL, NOT NEEDED: 5. Add new plugin package -``` -meteor npm install markdown-it-something --save -``` - -Edit file `wekan/packages/markdown/src-integration.js` and add using that new package, using code example from that new plugin page, or similar like emoji plugin was added. - -### 7. Test - -Test does that new plugin syntax work, for example in card title, card description etc on other input fields. - -### 8. If it works, create pull request - -If normal markdown, emoji, and your new added plugin syntax all work, commit your changes: -``` -git add --all - -git commit -m "Added plugin markdown-it-something." - -git push -``` -And then at your GitHub for `https://github.com/YOUR-GITHUB-USERNAME/wekan` click `Create pull request`. - -# Meteor 3 - -At 2024-06-26, it looks like from https://nodejs.org/en that Node.js LTS version is 20.15.0 , so change to newest Node.js LTS, delete old Meteor: -``` -sudo n 20.15.0 - -sudo npm -g install npm - -cd - -rm -rf .meteor -``` -Check how to install newest Meteor from Meteor 3 PR at https://github.com/meteor/meteor/pull/13163 , for example: -``` -npx meteor@rc -``` -Check what branches there are: -``` -cd repos/wekan - -git branch -a -``` -Change to Meteor 3 branch: -``` -git checkout feature-meteor3 -``` -Build wekan: -``` -./rebuild-wekan.sh - -2 -``` -If there are errors, try to fix them. - -Or try to run wekan: -``` -./rebuild-wekan.sh - -3 -``` -# Updating - -There are usually updates both for npm packages and Meteor - -Updating npm packages: -``` -npm update -``` -Checking for vulnerable packages: -``` -npm audit -``` -Fixing vulnerable npm packages by updating to newer packages: -``` -npm audit fix -``` -If that did not help, use force: -``` -npm audit fix --force -``` -If that did not help, read links from that `npm audit` command did show, remove deprecated dependencies, update to other maintained dependencies. - -Updating to next Meteor release: -``` -meteor update -``` -Updating to specific Meteor release: -``` -meteor update --release METEOR@3.0-rc.4 -``` -Trying to update all Meteor packages: -``` -meteor update --release METEOR@3.0-rc.4 --all-packages -``` -Allowing incompatible updates, that may sometime work: -``` -meteor update --release METEOR@3.0-rc.4 --all-packages --allow-incompatible-update -``` -If you are changing Meteor and Node.js versions, you may need to reset Meteor: -``` -meteor reset -``` -Or alternatively, delete wekan repo (if you did not need any changes you made), and clone wekan repo again, and then build etc. diff --git a/docs/DeveloperDocs/Meteor-bundle.md b/docs/DeveloperDocs/Meteor-bundle.md deleted file mode 100644 index 76a46e5ef..000000000 --- a/docs/DeveloperDocs/Meteor-bundle.md +++ /dev/null @@ -1,13 +0,0 @@ -- Read [Wekan new release ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) -- [Install Meteor.js](https://www.meteor.com/install). Note: Windows install is very slow, please use other option at [Windows wiki page](Windows) -- Download newest bundle from https://releases.wekan.team -- Unarchive bundle .tar.gz file: `tar -zxvf wekan-VERSION.tar.gz` -- `cd bundle` -- `meteor` -- Browse with webbrowser like Firefox to http://localhost:3000 - -[Wekan for Meteor.js bundle bug reports and feature requests](https://github.com/wekan/wekan/issues) - -[Build Meteor bundle from source](Source) - -[Install from source without root](Install-from-source-without-root) \ No newline at end of file diff --git a/docs/DeveloperDocs/Meteor.md b/docs/DeveloperDocs/Meteor.md deleted file mode 100644 index 7a77196c2..000000000 --- a/docs/DeveloperDocs/Meteor.md +++ /dev/null @@ -1,113 +0,0 @@ -## Learning Course: Your First Meteor 3.1 Application - -- https://www.youtube.com/watch?v=aFZzBb2oRi8&list=PLKKckIyt2nF863eP16mvVgWKR4JDyJoKy - -## Meteor 3 Example Code - -- https://github.com/fredmaiaarantes/simpletasks - - MIT License - - https://github.com/xet7/simpletasks -- https://github.com/henriquealbert/meteor-with-prisma - - MIT License - - https://github.com/xet7/meteor-with-prisma -- https://github.com/henriquealbert/meteor-pnpm - - MIT License - - https://github.com/xet7/meteor-pnpm - -## Building Multi Platform Mobile Apps - -- TWIM 058: Building Multi Platform Mobile Apps https://www.youtube.com/watch?v=ZTtXRJTUCIU -- https://www.youtube.com/watch?v=ZTtXRJTUCIU -- https://github.com/jamauro/pwa-kit -- https://wekan.team/app/ -- https://github.com/wekan/wekan/wiki/PWA -- Over 100 icons for different platforms https://github.com/wekan/wekan/blob/main/public/site.webmanifest - -## Tip to any programmers - -- Try to understand any error messages, and what to do to those errors - -## Videos about upgrading to Meteor 3 - -- Storyteller - - Upcoming: - - 2024-09-02: Meteor.js generators https://www.youtube.com/watch?v=Z6nY2wqPgSE - - 2024-09-09: Can we build static web pages with Meteor.js? https://www.youtube.com/watch?v=cr-Nm0YFb1w - - 2024-09-16: Revisiting Mantra application architecture for today's Meteor.js https://www.youtube.com/watch?v=YyzY7ySqBAg - - 2024-08-23: TWIM 052: Year of TWIM in review. Trying to of sometime have xet7 at TWIM show again. They recommended people to help xet7 when possible, xet7 is hitting some walls developing WeKan. https://www.youtube.com/watch?v=c5E3uZST4Vs - - 2024-08-20: - - Vazco interviewing Storyteller: How to approach building Open Source products? https://www.youtube.com/watch?v=j5BrTYcJDVc - - Meteor inteviewing Storyteller: Programmer, open source contributor, entrepreneur https://www.youtube.com/watch?v=dsp0_r8uJx8 - - Meteor Roles: - - 2024-07-33: Meteor Roles the full checkpoint https://www.youtube.com/watch?v=ow1i4UXdbbI - - 2024-08-12: Meteor Roles building up teams https://www.youtube.com/watch?v=ZAuSYKfV114 - - 2024-07-15: WeKan Upgrades https://www.youtube.com/watch?v=Zjb3m9JsAD0 - - 2024-07-08: Upgrading Meteor examples https://www.youtube.com/watch?v=jzWXxOe93t4 - - Upcoming and past: https://www.youtube.com/@storytellercz/streams -- React.js - - WeKan uses Blaze and Jade, not React. - - 2024-09-25: - - Meteor 3 React Compiler: https://x.com/FilipeNevola/status/1838911432282583432 - - 2024-08-02: - - https://www.youtube.com/watch?v=NnT7AbVMnj4 - - https://thenewstack.io/after-a-decade-of-react-is-frontend-a-post-react-world-now/ - - https://thenewstack.io/pivoting-from-react-to-native-dom-apis-a-real-world-example/ - - https://thenewstack.io/how-web-components-are-used-at-github-and-salesforce/ - - https://devclass.com/2024/07/22/react-community-splitting-into-full-stack-and-client-only-camps-suggests-survey/ - - https://news.ycombinator.com/item?id=41068685 - - 2024-07-10: Storyteller at React Wroclaw Meetup, talking about Meteor.js and React: https://www.youtube.com/watch?v=4dnM6bXZCz4&t=741s - - How A Small Team of Developers Created React at Facebook | React.js: The Documentary https://www.youtube.com/watch?v=8pDqJVdNa44 -https://www.youtube.com/watch?v=8pDqJVdNa44 -- Meteor Dispatches Podcast - - 46: 2024-07-12: Packages you need in every app https://www.youtube.com/watch?v=S2YkZfKN0DI - - 25: 2024-02-09: WeKan Security https://www.youtube.com/watch?v=zic-h8jG6F8 - - 16: 2023-12-08: WeKan interview https://www.youtube.com/watch?v=ke-mbnZM3zE - - Upcoming and past: https://www.youtube.com/@meteorjscommunity/streams - - Playlists: https://www.youtube.com/@meteorjscommunity/playlists - - Some recent also had info, how to make dependencies compatible with both Meteor 2 and Meteor 3 -- Add Eslint 3 and fix anything found - - https://www.youtube.com/watch?v=rFjNNNc_7-E - - https://github.com/quavedev/eslint-plugin - - https://github.com/quavedev/meteor-template/pull/8 - -## Upgrading to Meteor 3 - -- Meteor 3 migration guide: https://v3-migration-docs.meteor.com ( older pages at https://guide.meteor.com/3.0-migration or https://guide.meteor.com/prepare-meteor-3.0 ) -- Look at progress of migrated packages https://forums.meteor.com/t/looking-for-help-migrating-packages-to-meteor-3-0/60985 -- Migrate from Fibers (works only at Meteor 2 and Node.js 14) to Async/Await (works with Meteor 3 and Node.js 20) - - Helper tool https://forums.meteor.com/t/blaze-async-migration-helper-babel-plugin-tracker-async-enhance-for-the-client-side-released/60842 - - Info how Async/Await works, from Storyteller: https://github.com/wekan/wekan/wiki/AsyncAwait -- Forums posts about migrating: https://forums.meteor.com -- ( Older version upgrade to newest 2.14 https://guide.meteor.com/2.14-migration ) - -## Removing unused files - -From Meteor Discord chat from someone: - -> Nice tool that I found out about today. I was able to remove 58 unused files, functions, exports, types and dependencies 😄 -> -> https://knip.dev - -## Lint - -From Meteor Discord chat from someone: - -> We started using https://biomejs.dev to replace eslint and prettier on Galaxy 2, and it's been amazing. It's speedy, easy to configure, and has fewer packages to care about. -> -> Just sharing it here in case someone has never heard about it before - - -## Building WeKan - -- https://github.com/wekan/wekan/wiki/Emoji -- Docs: https://github.com/wekan/wekan/tree/main/docs - -## Similar technology - -- https://en.wikipedia.org/wiki/JavaScript_engine -- https://en.wikipedia.org/wiki/Single-page_application -- https://en.wikipedia.org/wiki/Web_framework -- https://en.wikipedia.org/wiki/Progressive_web_app -- https://en.wikipedia.org/wiki/Web_2.0 -- https://en.wikipedia.org/wiki/Meteor_(web_framework) -- https://en.wikipedia.org/wiki/Next.js diff --git a/docs/DeveloperDocs/Monkey-Proof-Software.md b/docs/DeveloperDocs/Monkey-Proof-Software.md deleted file mode 100644 index bbff1b9c6..000000000 --- a/docs/DeveloperDocs/Monkey-Proof-Software.md +++ /dev/null @@ -1,75 +0,0 @@ - - -## 1. What is Monkey Proof Software? - -Someone told xet7, that WeKan is Monkey Proof Software. Jira is not Monkey Proof Software. Here we are exploring what it means. - -## 2. Proofing - -a) Monkey Proof testing of laptop https://www.youtube.com/watch?v=QxCV0bZGE00 . There are also some info at Internet how to make sure monkeys do not mess up apartments, trashcans etc. - -b) https://en.wikipedia.org/wiki/Proofing - -> Proofing may refer to: -> -> - [Proofing (armour)](https://en.wikipedia.org/wiki/Proofing_(armour)), the testing of armour for its defensive ability -> - [Proofing (baking technique)](https://en.wikipedia.org/wiki/Proofing_(baking_technique)), a rest period during the fermentation of bread dough -> - [Proofing (prepress)](https://en.wikipedia.org/wiki/Prepress_proofing), a concept in print production -> - [Proof testing](https://en.wikipedia.org/wiki/Proof_test), a form of stress test to demonstrate the fitness of a load-bearing structure - -c) https://nl.wikipedia.org/wiki/Foolproof mentions "De Engelse termen foolproof, idiot proof, monkey proof" - -d) https://en.wikipedia.org/wiki/Idiot-proof - -> In modern [English](https://en.wikipedia.org/wiki/English_language) usage, the informal term idiot-proof or foolproof describes designs that cannot be misused either inherently, or by use of [defensive design](https://en.wikipedia.org/wiki/Defensive_design) principles. The implication is that the design is usable even by someone of low intelligence who would not use it properly. - -## 3. Defensive design - -Mentioned at https://en.wikipedia.org/wiki/Defensive_design - -> Defensive design is the practice of planning for [contingencies](https://en.wikipedia.org/wiki/Contingency_plan) in the [design](https://en.wikipedia.org/wiki/Design) stage of a project or undertaking. Essentially, it is the practice of anticipating all possible ways that an end-user could misuse a device, and designing the device so as to make such misuse impossible, or to minimize the negative consequences. For example, if it is important that a plug is inserted into a socket in a particular orientation, the socket and plug should be designed so that it is physically impossible to insert the plug incorrectly. Power sockets are often keyed in such a manner, to prevent the transposition of live and neutral. They are also recessed in the wall in a way that makes it impossible to touch connectors once they become live. - -## 4. Defensive Design in Computer software - -> Defensive design in [software engineering](https://en.wikipedia.org/wiki/Software_engineering) is called [defensive programming](https://en.wikipedia.org/wiki/Defensive_programming). [Murphy's law](https://en.wikipedia.org/wiki/Murphy%27s_law) is a well-known statement of the need for defensive design, and also of its ultimate limitations. -> -> [Software design](https://en.wikipedia.org/wiki/Software_design) entails many ways so that software can be designed to operate more safely. -> -> - Data entry screens can "sanitize" inputs, e.g. numeric fields contain only digits, signs and a single decimal point if appropriate. -> -> - Inputs can be sanity checked for legitimate values, e.g. for counts of workplace injuries (or number of people injured) the number can be 0 but can't be negative and must be a whole number; for number of hours worked in one week the amount for any specified employee can be 0, can be fractional, but can't be negative and can't be greater than 168, nor more than 24 times the number of days they were in attendance. -> -> - A word processor requested to load a saved document should scan it to ensure it is in good form and not corrupted. If it is corrupted, the program should say so, then either accept the partial document that was valid, or refuse the entire document. In either case it should remain running and not quit. - -## 6. Monkey Testing - -https://en.wikipedia.org/wiki/Monkey_testing - -## 7. Why Custom CSS/Javascript is not Monkey Proof - -@xet7 wrote at https://github.com/wekan/wekan/issues/4167#issuecomment-1151557772 to this comment - -> Wekan functions better on pretty much all fronts except for customization options given that one can directly change kanboard CSS to fit their needs. - -From @xet7 - -Custom CSS and Javascript is very dangerous: https://github.com/wekan/wekan/issues/3086#issuecomment-627615017 - -> I had to previously find a way [how to fix Custom Javascript in RocketChat](https://forums.rocket.chat/t/big-issue-with-custom-javascript/261/4?u=xet7) because it broke my RocketChat install. -> -> Also, previously I had to [fix XSS bug](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v385-2020-03-23-wekan-release) because adding Javascript to input fields did run that Javascript code. -> -> I'll try to find is there a safe way to do this. - -Correct solution is to add setting like here https://github.com/wekan/wekan/issues/4558 - -WeKan target group is those that call WeKan "Monkey Proof Software", so that WeKan is easy to figure out, user friendly, polished enough. Jira is not "Monkey Proof Software". - -If someone is asking for "Custom CSS", that means they are programmers, and should be sending PRs to WeKan with fixes to UI, new settings, etc, so that WeKan works safely without "Custom CSS", for normal non-programmer people. - -## 6. Towards more Monkey Proof Software - -In Progress: -- Optimizing speed -- Minimize frontend and backend code -- Fixing bugs \ No newline at end of file diff --git a/docs/DeveloperDocs/Test-Edge.md b/docs/DeveloperDocs/Test-Edge.md deleted file mode 100644 index 94f325792..000000000 --- a/docs/DeveloperDocs/Test-Edge.md +++ /dev/null @@ -1,144 +0,0 @@ -## Testers to ping with new Wekan Edge release -- All those whose issues were fixed [at ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) -- @saschafoerster - -Those should reply to new issue that has name `Test Edge Wekan (version-number-here)` at https://github.com/wekan/wekan/issues . - -## Why test? - -https://github.com/wekan/wekan/issues/2811 - -## Who should test -- If you are the person in your company that gets yelled at when something breaks in new version of Wekan. -- If you think xet7 releasing new version of Wekan every day directly to stable production Snap channel is in any way risky. - -## What usually happens when Wekan gets broken - -1. There is many new issues about some same new feature or bug. Yes, also when some notices new feature that is already [at ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md), they add issue about it, usually asking "Can this feature be turned off or made optional?". This is usually if new feature changes some old workflow radically. -2. Many do tag @xet7 that are you aware of the issue. -3. Someone yells at IRC that "this is too much, it's time to fork Wekan". Well, that's because he gets yelled at by all users of Wekan at his company. -4. xet7 does not have time to answer those, he just fixes the issue - usually at the same day, makes new release, closes all related issues with last comment "Please try Wekan (version-number-here)". -5. There is [only one comment](https://github.com/wekan/wekan/issues/2812#issuecomment-555860032) that says "This resolved things for me. Thanks for such a quick fix. This is an invaluable piece of software for me!" -6. xet7 thinks this is great normal development day: Got some features added, got some bugs fixes, and happily goes to sleep well. This is because above 1-5 has happened many times before, it's just normal. - -## ChangeLog - -https://github.com/wekan/wekan/blob/main/CHANGELOG.md - -## Backup before testing. And backup daily in production. - -Why? Well, Wekan has no undo yet. If you delete Swimlane/List/Card, it's gone. -That's why it's harder to reach in submenu. It's better to Arhive those, -and unarchive. - -https://github.com/wekan/wekan/wiki/Backup - -You could test at other computer than your production. - -## Snap - -Snap has automatic update, or you can update manually: -``` -sudo snap refresh -``` -You see at https://snapcraft.io/wekan what are current versions. - -To change to Edge: -``` -sudo snap refresh wekan --edge --amend -``` -And back to stable: -``` -sudo snap refresh wekan --stable --amend -``` - -## Docker - -`docker-compose.yml` is at https://github.com/wekan/wekan . - -### Latest development version from master branch - -Quay: -``` -image: quay.io/wekan/wekan -``` -Docker Hub: -``` -image: wekanteam/wekan -``` - -### Example of using release tags - -[Quay tags](https://quay.io/repository/wekan/wekan?tag=latest&tab=tags): -``` -image: quay.io/wekan/wekan:v3.55 -``` -[Docker Hub tags](https://hub.docker.com/r/wekanteam/wekan/tags): -``` -image: wekanteam/wekan:v3.55 -``` - -### How to change Docker version - -1) Backup first -https://github.com/wekan/wekan/wiki/Backup - -``` -docker-compose stop -docker rm wekan-app -``` -2) Change version tag. Then: -``` -docker-compose up -d -``` - -### Build Docker version from source - -At docker-compose.yml is these lines: - -``` - #------------------------------------------------------------------------------------- - # ==== BUILD wekan-app DOCKER CONTAINER FROM SOURCE, if you uncomment these ==== - # ==== and use commands: docker-compose up -d --build - #build: - # context: . - # dockerfile: Dockerfile - # args: - # - NODE_VERSION=${NODE_VERSION} - # - METEOR_RELEASE=${METEOR_RELEASE} - # - NPM_VERSION=${NPM_VERSION} - # - ARCHITECTURE=${ARCHITECTURE} - # - SRC_PATH=${SRC_PATH} - # - METEOR_EDGE=${METEOR_EDGE} - # - USE_EDGE=${USE_EDGE} - #------------------------------------------------------------------------------------- -``` -Uncomment from those this way: -``` - build: - context: . - dockerfile: Dockerfile - args: - - NODE_VERSION=${NODE_VERSION} - - METEOR_RELEASE=${METEOR_RELEASE} - - NPM_VERSION=${NPM_VERSION} - - ARCHITECTURE=${ARCHITECTURE} - - SRC_PATH=${SRC_PATH} - - METEOR_EDGE=${METEOR_EDGE} - - USE_EDGE=${USE_EDGE} -``` -Then start Wekan to http://localhost this way: -``` -docker-compose up -d --build -``` - -## Sandstorm - -1) Install local development version of Sandstorm to your laptop from https://sandstorm.io/install - -2) Download and install experimental version to your local Sandstorm: -https://github.com/wekan/wekan/wiki/Sandstorm -Local sandstorm is at http://local.sandstorm.io:6080/ . - -3) Download your production Wekan grain .zip file with down arrow button. Upload to your dev local Sandstorm. -Try does it work. diff --git a/docs/DeveloperDocs/WeKan-Multiverse-Roadmap.md b/docs/DeveloperDocs/WeKan-Multiverse-Roadmap.md deleted file mode 100644 index da4a15c13..000000000 --- a/docs/DeveloperDocs/WeKan-Multiverse-Roadmap.md +++ /dev/null @@ -1,348 +0,0 @@ -## What is not Cross-Platform - -- Requires CPU to support AVX - - Bun Javascript Engine https://bun.sh - - MongoDB 5.x and newer https://github.com/turnkeylinux/tracker/issues/1724#issuecomment-2351544191 -- Does not work at s390x - - V programming language https://github.com/vlang/v/issues/18737 - - Bun Javascript Engine https://github.com/oven-sh/bun/issues/2632 - - Deno Javascript Engine https://github.com/denoland/deno/issues/20212#issuecomment-1756663943 - - Lazarus IDE https://www.lazarus-ide.org - - FreePascal programming language https://www.freepascal.org - - TigerBeetle database https://github.com/tigerbeetle/tigerbeetle/issues/2241 -- GUI requires porting to other OS - - BBC Basic https://www.bbcbasic.net/wiki/doku.php?id=converting_20programs_20from_20risc_20os_20to_20windows - - Tcl/Tk GUI does works at most OS - -## Prototype Strategy - -- Try building many prototypes, see what works -- https://en.wiktionary.org/wiki/throw_things_at_the_wall_and_see_what_sticks - -## Future - -- Will this happen? With what tech? See https://github.com/wekan/wekan/blob/main/FUTURE.md -- You can comment at https://github.com/wekan/wekan/issues/4578 -- You can help by sending PR to any prototype repo mentioned below - -## Wishes to all web frameworks - -- Documentation about how to upgrade, all required steps. Or alternatively, a script that does changes required to upgrade. -- Using parts of frameworks as separate packages, like: - - Authentication, like OAuth2, Gmail, etc -- Option to not use websockets, because at some corporate networks do not allow them. -- Option to not have Javascript at frontend, having SSR only. Working with and without Javascript at frontend, like ufront did. - - https://github.com/ufront/ufront - - https://jasono.co/2020/10/03/im-going-to-write-a-web-app-framework-again-maybe-well-see/ - - Please do not discontinue HTML (no Javascript) version https://news.ycombinator.com/item?id=37558372 -- Storing session to database, for round robin - - https://github.com/wekan/wekan/issues/5120 - - https://stackoverflow.com/questions/65547266/how-to-store-my-session-mysql-with-express-mysql-session -- Not having build step: - - Keep all files at directories they currently are, with understandable directory structure naming, like: - - Feature name - - Feature part name 1 - - Feature part name 2 - - Only use file from it's location on page where it is needed - - Cache dependencies. Make possible coding offline. - - Do not uglify - - https://world.hey.com/dhh/you-can-t-get-faster-than-no-build-7a44131c - - Rails World Opening Keynote by DHH - - https://www.youtube.com/watch?v=iqXjGiQ_D-A - - https://news.ycombinator.com/item?id=37843951 - - https://news.ycombinator.com/item?id=37897921 - - I merged all branches to one main branch, because merging between branches did take a lot of time. - - Do not use linters like eslint and prettier. What I did, is I removed all linters, like eslint, prettier etc, because they did disagree about syntax. Point is to make to code minimal change, that fixes something, or adds some feature. Not that most commits would be about fixing syntax. - - https://matt-rickard.com/why-is-the-frontend-stack-so-complicated - - https://news.ycombinator.com/item?id=37895164 - - https://deno.com/blog/node-config-hell -- How to not become slow and unresponsive after a week https://github.com/wekan/wekan/issues/5140 - - Run code like CGI, release all memory -- Looking for most cross-platform web frameworks, supporting many different CPU, OS and database. -- Both On-Premise AND MultiCloud possible - - https://github.com/serverless/multicloud - - https://github.com/xet7/multicloud -- License: MIT and other https://copyfree.org - -## List of realtime web frameworks - -- Meteor - - https://www.meteor.com - - https://github.com/meteor/meteor -- Helene - - Forum Post https://forums.meteor.com/t/helene-a-lightweight-real-time-web-framework-for-node-js-and-bun/60626 - - Repo https://github.com/leonardoventurini/helene - - Discussions https://github.com/leonardoventurini/helene/discussions - - NPM package https://www.npmjs.com/package/helene - - Discord https://discord.com/invite/PbY36PU75C -- Any others? - -## Screenshot - -Supporting many more webbrowsers: - -Multiverse WeKan screenshot - -## Talks - -- Maintainer of WeKan since December 2016, xet7 (Lauri Ojansivu), about WeKan Multiverse at EU NGI Dapsi https://www.youtube.com/watch?v=BPPjiZHVeyM -- https://dapsi.ngi.eu/20-new-solutions-to-bring-the-power-of-data-back-to-peoples-hands/ -- https://dapsi.ngi.eu/hall-of-fame/multiverse/ -- WeKan Open Source kanban: add multiple Import/Export/Sync options and UI Designer, making it possible to create any app. - -## Roadmap - -From https://github.com/wekan/wekan/issues/4578#issuecomment-1407769397 - -## Standards - -- Web Sustainability Guidelines (WSG) 1.0 at a Glance - - https://w3c.github.io/sustyweb/glance.html - - Minimize size, support all devices https://w3c.github.io/sustyweb/#benefits-90 -- Other standards? https://news.ycombinator.com/item?id=36675451 - -## Browsers developed for therapy reasons - -Are you fed up? Need some therapy? Write a webbrowser! - -- Gosub - - https://adayinthelifeof.nl/2023/09/22/browsers.html - - Repo https://github.com/jaytaph/gosub-browser - - https://codemusings.nl/@jaytaph/p/MQpHToAx8c1KXyU98Auip4 - - https://news.ycombinator.com/item?id=37608580 -- Ladybird - - https://www.ladybird.dev - - Repo https://github.com/SerenityOS/serenity/tree/master/Ladybird - -## Browsers that have Javascript - -- Use Javascript to add drag-drop etc Javascript features, and hide UI elements like buttons etc that are for non-Javascript - -## Browsers without using Websockets - -- Maybe with long poll. Or no live update, require webpage reload. -- For internal corporate networks where websockets are not allowed - -## Browsers that do not support Javascript - -or have Javascript disabled for security reasons. - -- Netsurf https://www.netsurf-browser.org/downloads/ , Development Builds https://ci.netsurf-browser.org/builds/ - - RISC OS https://www.riscosopen.org/content/downloads , https://www.riscosdev.com/direct/ - - ReactOS https://reactos.org , https://github.com/howinfo/howinfo/wiki/ReactOS - - Redox OS https://www.redox-os.org - - Haiku, Linux, Windows, Amiga, Atari etc -- Amiga: AWeb, iBrowse -- Dillo Webbrowser at FreeDOS https://github.com/wekan/wekan/issues/4578#issuecomment-1248525591 -- Netscape, IE, etc all browsers at all OS/CPU -- FreeDOS: Dillo, Arachne -- Text based browsers: Lynx, Links, w3m (sudo apt-get install w3m w3m-img) -- Ancient browsers: - - http://9p.sdf.org/who/tweedy/ancient_browsers/ - - https://news.ycombinator.com/item?id=34981257 - -## Browsers that are programmable - -- Nyxt - - https://github.com/atlas-engineer/nyxt - -## Support more databases - -- SQLite -- PostgreSQL -- Migrations between databases -- Using many databases at the same time -- Offline or Local-First - - https://news.ycombinator.com/item?id=37584049 - - https://news.ycombinator.com/item?id=37488034 - -## Graphics - -- Raphael JS, supports also many legacy browsers, with VML and SVG graphics https://dmitrybaranovskiy.github.io/raphael/ -- Related forked repos for various graphics at https://github.com/raphaeljsorg -- Or alternatively, just use HTML4, images, imagemaps etc to be compatible to non-Javascript browsers - -## Programming language alternatives - -- Optionally, use some transpiler: - - https://en.wikipedia.org/wiki/Source-to-source_compiler - - Haxe https://haxe.org , with HaxeUI [GUI/WebUI](http://haxeui.org/) and [TUI](https://github.com/haxeui/haxeui-pdcurses) - - Wax https://github.com/xet7/wax - - Nim https://nim-lang.org - - V https://vlang.io - - Maybe transpiling UI to/from HaxeUI XML, HTML4, HTML5, Gopher, Gemini, Lazarus, Gambas, Godot, MUI/ZUI Amiga/AROS - -- Cross-platform: - - C89 code for 30+ OS/CPU like at https://github.com/xet7/darkesthour - - Pascal code with TRSE https://lemonspawn.com/turbo-rascal-syntax-error-expected-but-begin/ -- Embedded webserver, for example: - - C https://github.com/wekan/hx/blob/main/prototypes/code/webserver/works/c/server.c - - Sandstorm https://sandstorm.io , https://github.com/sandstorm-io/sandstorm - - Rust https://github.com/dwrensha/sandstorm-rawapi-example-rust - - C++ https://github.com/dwrensha/sandstorm-rawapi-example -- Try to avoid strange NPM packages - - https://marvinh.dev/blog/speeding-up-javascript-ecosystem-part-6/ - -## Benchmarks - -- For selecting programming language: -- https://github.com/wekan/hx/tree/main/prototypes/code/webserver -- https://forums.meteor.com/t/performance-tests-between-meteor-3-meteor-2-help-on-format/60458 -- https://www.techempower.com/benchmarks/ -- https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks - -## Screenshot of Multiverse WeKan at FreeDOS Dillo - -![freedos-dillo](https://user-images.githubusercontent.com/15545/190492967-f2770d0e-86a1-4822-93e7-68c65b23d6c4.png) - -## Screenshot of Multiverse WeKan at Netsurf - -### Group and count by first character of board names - -From https://github.com/wekan/wekan/issues/4578#issuecomment-1250143726 - -When there is a lot of boards, it is very useful to group by first character of board (and after that click charater to see list of boards for that character, to be added later). I could not figure out how to do it with MongoDB aggregate query. Here is how I did it with SQLite, for type board. SQLite returns results immediately. Note that emojis, UTF-8 shows also on Netsurf browser. TODO is to figure out, could I get these visible also in FreeDOS Dillo browser. -``` -SELECT _id, substr(title,1,1), COUNT(*), type from boards -WHERE type=:type GROUP BY substr(title,1,1) ORDER BY substr(title,1,1) ASC; -``` -Actually, somewhere I saved answer from ChatGPT or Bing AI search, what this SQL query using MongoDB Javascript syntax. So maybe I should ask again. - -https://github.com/wekan/php/blob/main/page/allboardschar.php - -![wekan-allboardschar](https://user-images.githubusercontent.com/15545/190877008-ec8a035b-10d4-432a-b3cb-581983b5e24e.png) - -## Prototypes - -### Redbean - -- Currently xet7 actively working with this prototype: https://github.com/wekan/wekanstudio -- https://redbean.dev -- Minimal kanban board drag drop example - - Repo https://github.com/wekan/hx/tree/main/prototypes/code/webserver/works/fullmoon - - Redbean amd64 binary works at Win/Mac/Linux/BSD/BIOS without any modifications, because it is based on Cosmopolitan https://github.com/jart/cosmopolitan - - Uses HTMX https://htmx.org at UI - - Saves to SQLite database -- Petclinic fork, using Blink to run at s390x https://github.com/wekan/wekan/wiki/s390x#petclinic-s390x - -### PHP - -- Repo https://github.com/wekan/php -- Features: - - Some webpages compatible with all browsers - - SQLite list all boards with first character, show board with some data - - MongoDB test for newer MongoDB - - upload file(s) with drag-drop, for upcoming feature https://github.com/wekan/wekan/issues/2936 - - RTL https://github.com/wekan/wekan/issues/3376#issuecomment-1243922087 -- Not yet: Login, Move card - -### Gambas - -- Repo https://github.com/wekan/hx/tree/main/prototypes/ui/gambas -- Features: Login, dropdown menu structure, SQLite database -- Not yet: Show board -- Problems: Gambas login page etc requires Javascript, does not work in Netsurf - -### Meteor SSR - -- https://github.com/wekan/we -- Features: - - Only serverside rendering. Javascript removed removed from frontend. - - Only test webpage. No actual features. - -### Node.js 20, Bun and Deno -- Repo https://github.com/wekan/wekan-node20 -- Features: - - main.js makes database queries to many databases - - Database drivers: - - MongoDB driver for Legacy MongoDB 3.2.x, using MongoDB from `sudo snap install wekan` - - MongoDB driver for newest MongoDB included, using MongoDB 6.x from rebuild-wekan.sh from https://github.com/wekan/wekan - - FerretDB proxy to PostgreSQL, from docker-compose.yml - - FerretDB proxy to SQLite, from docker-compose.yml -- Bun size is about 93 MB -- Deno size is usually about 350 MB https://github.com/wekan/wekan-node20/releases , but from source built Linux arm64 is 1.1 GB because of some bug somewhere. -- Deno also includes Node.js as Deno's Node.js compatibility layer. -- Node.js supports many CPU/OS - - Node.js is used in production and has traceability. https://changelog.com/jsparty/294 - - https://github.com/wekan/wekan/wiki/s390x - - https://nodejs.org/dist/latest-v20.x/ - - https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4 - -### Haxe - -- https://haxe.org -- Hello world example - - Repo https://github.com/wekan/hx/blob/main/prototypes/code/hello - - Transpiled with Haxe to many programming languages -- Tinkweb - - Repo https://github.com/wekan/hx/tree/main/prototypes/ui/tinkweb - - Has router and webpage - - Transpiles to PHP and Node.js - -### FreePascal - -- Repo https://github.com/wekan/wami - - Some static pages -- Previous: - - Repo https://github.com/wekan/hx/tree/main/prototypes/code/webserver/works/freepascal-router - - Router and some webpage -- Works at many retro and modern OS, but not at s390x that FreePascal does not support yet https://wiki.freepascal.org/ZSeries - -### FreeDOS and Bash - -- Repo https://github.com/wekan/wedos -- Features: - - DOS: .bat script, that shows menu, and uses SQLite DOS version to make queries to WeKan SQLite database - - Bash: .sh script, that shows menu, and uses SQLite CLI to make queris to WeKan SQLite database - -### Minio - -- Repo: https://github.com/wekan/minio-metadata -- Features: - - Uses Bash script and CLI binaries to migerate text data and attachments from MongoDB to SQLite and Minio - - There is Node.js, Go etc drivers for using Minio - -### CloudFlare Workers - -- Developing - - https://developers.cloudflare.com/pages/framework-guides/ - - https://developers.cloudflare.com/pages/ - - https://developers.cloudflare.com/workers/ - - https://developers.cloudflare.com/pages/platform/language-support-and-tools/ - - https://miniflare.dev - - https://blog.cloudflare.com/workers-playground/ -- D1 SQLite - - https://developers.cloudflare.com/d1/platform/community-projects/#d1-adapter-for-kysely-orm - - https://blog.cloudflare.com/d1-open-beta-is-here/ - - https://blog.cloudflare.com/introducing-d1/ - - https://www.cloudflare.com/developer-platform/d1/ - - https://blog.cloudflare.com/hyperdrive-making-regional-databases-feel-distributed/ -- Northwind Traders example - - https://northwind.d1sql.com - - https://github.com/cloudflare/d1-northwind - - https://github.com/xet7/d1-northwind -- Kysely Query builder for D1 SQLite database - - https://codedamn.com/news/product/dont-use-prisma - - https://news.ycombinator.com/item?id=37804072 - - https://kysely.dev - - https://github.com/kysely-org/kysely - - https://www.npmjs.com/package/kysely - - Awesome Kysely https://github.com/kysely-org/awesome-kysely - - Older database examples: https://github.com/cloudflare/db-connect -- Hono - - https://blog.yusu.ke/hono-htmx-cloudflare/ - - https://news.ycombinator.com/item?id=37165054 - - https://github.com/yusukebe/hono-htmx - - https://github.com/xet7/hono-htmx - - https://developers.cloudflare.com/pages/framework-guides/ -- WebGPU - - https://blog.cloudflare.com/webgpu-in-workers/ - - https://news.ycombinator.com/item?id=37673999 -- CloudFlare TV https://cloudflare.tv -- CloudFlare https://cloudflare.com -- TODO example with KV https://github.com/wekan/cloudflare-workers-todos - -### Swap microframework, vs HTMX - -- https://github.com/josephernest/Swap -- https://news.ycombinator.com/item?id=35991783 \ No newline at end of file diff --git a/docs/DragDrop/Drag-Drop.md b/docs/DragDrop/Drag-Drop.md deleted file mode 100644 index 4da4c6b5f..000000000 --- a/docs/DragDrop/Drag-Drop.md +++ /dev/null @@ -1,46 +0,0 @@ -## Roles - -It depends on role of user what drag drop is allowed https://github.com/wekan/wekan/wiki/REST-API-Role - -## Mobile Drag Drop - -1. Click `Drag Handle Enabled/Disabled` button to enable drag handles - -2. Use drag handles to move Board Icons, Swimlanes, MiniCards, Lists, Checklists, Checklist Items. - -3. Use non-drag-handle area to to view other parts of board, by dragging board up/down/left/right, without moving any icons etc. - -Wekan logo - -## 2 or more external screens of desktop or mobile - -For each screen, you can enable or disable drag handles, because that setting is stored in browser localstorage, not to database. https://github.com/wekan/wekan/issues/4715 - -Because this feature was added, `Drag Handle Enabled/Disabled` was moved to current place shown in above screenshot. https://github.com/wekan/wekan/issues/4734 - -## All Boards page - -Reorder with drag drop: -- Board Icons - -## One Board page - -Reorder with drag drop: - -- Swimlanes -- Lists -- MiniCards. MiniCard is card, that is not click opened to view card contents. -- Opened Card: Checklists -- Opened Card: Checklist Items - -## Drag code examples - -- Draggable objects - - https://www.redblobgames.com/making-of/draggable/ - - https://news.ycombinator.com/item?id=37703291 -- Fixed Drag at Ubuntu Touch Morph browser https://github.com/wekan/wekan/commit/af63259f091cb2ade84493a288ea37c53cd37321 - -## Touch UI ideas - -- https://blog.la-terminal.net/godot-on-ipad-summer-update/ -- https://news.ycombinator.com/item?id=41415077 \ No newline at end of file diff --git a/docs/DragDrop/Touch-Screen-support.md b/docs/DragDrop/Touch-Screen-support.md deleted file mode 100644 index cb72f01b3..000000000 --- a/docs/DragDrop/Touch-Screen-support.md +++ /dev/null @@ -1,20 +0,0 @@ -# Enabling all Touch Screen Support - -## 1) Wekan / Click right top your username / Change Settings / Show Desktop Drag Handles - -Then you can drag cards with touch screen, for example at Android/iOS/desktop touch screen. - -- [Wekan Drag Handle issue](https://github.com/wekan/wekan/issues/3755) - -## 2) Enable touch screen support of Chrome/Chromium/Chromium Edge - -Change the target inside properties in the Google Chrome shortcut by adding "--touch-events" in the end of the address. -``` -Chrome shortcut > Properties > -Target: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --touch-events -``` -And similarly at other non-Windows operating systems, by modifying shortcut. - -- [Chrome touch at Google Support](https://support.google.com/chrome/thread/18609718/how-to-get-drag-drop-working-with-touch-screen-working-on-latest-version-of-chrome?hl=en) -- [Chrome touch Wekan discussion](https://github.com/wekan/wekan/discussions/3958) -- [Chrome/Chromium/Chromium Edge Touch issue](https://github.com/wekan/wekan/discussions/3958) \ No newline at end of file diff --git a/docs/Email/Troubleshooting-Mail.md b/docs/Email/Troubleshooting-Mail.md deleted file mode 100644 index 27d1c0f61..000000000 --- a/docs/Email/Troubleshooting-Mail.md +++ /dev/null @@ -1,571 +0,0 @@ -[Azure Email Communication Service](https://github.com/wekan/wekan/issues/5453) - -[Uberspace Email](https://github.com/wekan/wekan/issues/2009#issuecomment-1017630758) - -## Newest Wekan - -In [Wekan v5.02](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v502-2021-03-02-wekan-release) is fix for STMP settings [that works with very happy feedback](https://github.com/wekan/wekan/issues/3529#issuecomment-789085999). It requires: -- **There is no email settings at Admin Panel anymore** -- Email settings are made only with snap commands like `sudo snap set wekan mail-url....` or similar in Docker/Source etc `MAIL_URL=...`, more details below. -- For any errors like SSLv3 and STARTTLS, check [newest AWS SES info](#example-aws-ses) and use similar settings, other SSLv3/STARTTLS info could be outdated. - -## Gmail - -[Source](https://github.com/wekan/wekan-snap/issues/151) - -This maybe requires setting per-application password in Google Account settings for Gmail. - -``` -sudo snap set wekan mail-url='smtp://user@gmail.com:password@smtp.gmail.com:587' -``` - -## OAuth2 proxy - -- Google will disable all but OAuth for IMAP, SMTP and POP starting Sept. 30 2024 https://workspaceupdates.googleblog.com/2023/09/winding-down-google-sync-and-less-secure-apps-support.html -- https://news.ycombinator.com/item?id=39052196 , where is this: "If you can’t switch to OAuth, you can use my proxy to allow any IMAP (or POP/SMTP) client to be used with a “modern” email provider, regardless of whether the client supports OAuth 2.0 natively: https://github.com/simonrob/email-oauth2-proxy . No need for your client to know about OAuth at all." https://news.ycombinator.com/item?id=39052409 - -## ProtonMail Bridge - -[Source](https://github.com/wekan/wekan/issues/4887) - -``` -sudo snap set wekan mail-url='smtp://USER%40DOMAIN:PASSWORD@127.0.0.1:1025?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=false' -``` - -## Some more test code - -``` -let htmlText = Assets.getText("emailTemplate.html"); -let modifiedText = htmlText.replace(new RegExp("{{variable}}", 'g'), variable); -Email.send({ - from: "nobody@example.com", - to: email, - subject: `subject`, - html: modifiedText, - }); -``` - -## Debugging your SMTP mail server - -If you can't get your email server working with smtp/stmps or MAIL_SERVICE, look is there more config options for your email server at https://nodemailer.com docs, and add new issue about your email server to https://github.com/wekan/wekan/issues or [pull request](Emoji#how-you-could-add-another-plugin). - -For example, for https://nodemailer.com/smtp/ - -1) Install node.js 12.x -2) Add to top of code example: `var nodemailer = require('nodemailer');` -3) Install nodemailer: `npm install nodemailer` -4) send email: `node email.js` - -For example, this kind of code uses similar like MAIL_SERVICE in Wekan: - -``` -var nodemailer = require('nodemailer'); - -let transporter = nodemailer.createTransport({ - service: "Outlook365", - auth: { - user: 'firstname.lastname@hotmail.com', - pass: 'TopSecret' - }, -}) - -let info = transporter.sendMail({ - from: 'Firstname Lastname ', - to: 'somebody@example.com', - subject: 'Hi', - text: 'Hi. Reminder: Meeting tomorrow.', - html: '

Hi. Reminder: Meeting tomorrow.

' -}) -``` - - -If with some code example sending email works, xet7 can add it to wekan, like in [Wekan v5.52](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v552-2021-08-26-wekan-release) xet7 added direct nodemailer usage for MAIL_SERVICE. - -## MAIL_SERVICE (not currently in use) - -a) If you use smtps or smtp, please do not add any MAIL_SERVICE settings. For example, AWS SES and Postfix works with only MAIL_URL and MAIL_FROM. - -b) If smtps or smtp does not work, in Wekan v5.52 and newer, you can try these additional MAIL_SERVICE settings. This may still also require MAIL_URL to be valid, while it only uses MAIL_SERVICE settings of [Well Known email services](https://nodemailer.com/smtp/well-known/) that are these: - -126, 163, 1und1, AOL, DebugMail, DynectEmail, FastMail, GandiMail, Gmail, Godaddy, GodaddyAsia, GodaddyEurope, hot.ee, Hotmail, iCloud, mail.ee, Mail.ru, Maildev, Mailgun, Mailjet, Mailosaur, Mandrill, Naver, OpenMailBox, Outlook365, Postmark, QQ, QQex, SendCloud, SendGrid, SendinBlue, SendPulse, SES, SES-US-EAST-1, SES-US-WEST-2, SES-EU-WEST-1, Sparkpost, Yahoo, Yandex, Zoho, qiye.aliyun - -Wekan Snap: -``` -sudo snap set wekan mail-service='Outlook365' -sudo snap set wekan mail-service-user='firstname.lastname@hotmail.com' -sudo snap set wekan mail-service-password='SecretPassword' -``` -Wekan Gantt GPL Snap: -``` -sudo snap set wekan-gantt-gpl mail-service='Outlook365' -sudo snap set wekan-gantt-gpl mail-service-user='firstname.lastname@hotmail.com' -sudo snap set wekan-gantt-gpl mail-service-password='SecretPassword' -``` -docker-compose.yml of https://github.com/wekan/wekan: -``` -- MAIL_SERVICE=Outlook365 -- MAIL_SERVICE_USER=firstname.lastname@hotmail.com -- MAIL_SERVICE_PASSWORD=SecretPassword -``` -start-wekan.bat of https://github.com/wekan/wekan: -``` -SET MAIL_SERVICE=Outlook365 -SET MAIL_SERVICE_USER=firstname.lastname@hotmail.com -SET MAIL_SERVICE_PASSWORD=SecretPassword -``` -start-wekan.sh of https://github.com/wekan/wekan: -``` -export MAIL_SERVICE=Outlook365 -export MAIL_SERVICE_USER=firstname.lastname@hotmail.com -export MAIL_SERVICE_PASSWORD=SecretPassword -``` - -## Special Characters - -**If you have special characters in username or password**, sometimes you need to urlencode them. Not for AWS SES. -You can convert special characters of your password at https://www.url-encode-decode.com -and copy converted characters to your password. - -## Example: Microsoft Office 365 - -``` -sudo snap set wekan mail-url='smtp://user:password@smtp.office365.com:587?ignoreTLS=false&tls={rejectUnauthorized:false}&secure=true' -sudo snap set wekan mail-from='Wekan Team Boards ' -``` - -Converting special characters: -``` -sudo snap set wekan mail-url='smtp://support%40example.com:password@mail.example.com:587/?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=false' - -sudo snap set wekan mail-from='Wekan Team Boards ' -``` -## Example: AWS SES - -Related https://github.com/wekan/wekan/discussions/5518 - -NOTE: At AWS SES settings, you don't need to convert special characters. - -1) At AWS SES, add verified sender email address, verified domain, verified DKIM etc. - -2) For your example.com domain for SPF purposes, add TXT record like this, where ip4:123.123.123.123 is your Wekan server IP address: - -``` -@ TXT - -v=spf1 ip4:123.123.123.123 include:amazonses.com ~all -``` - -If you have other email services like Protonmail, Google Workplace, Outlook, SendGrid, and some other servers, it could look like this, please check your email provider to enable all settings: - -``` -v=spf1 include:_spf.protonmail.ch ip4:123.123.123.123 ip4:123.100.123.100 include:_spf.google.com include:spf.protection.outlook.com include:sendgrid.net include:amazonses.com ~all -``` - -3) At AWS SES, create new SMTP credentials for username like "AKIA..." and password, that you add directly to below. Do not modify or escape special characters. - -With AWS SMTP credentials: - -a) Wekan Snap -``` -sudo snap set wekan mail-from='Wekan Boards ' -sudo snap set wekan mail-url='smtp://username:password@email-smtp.eu-west-1.amazonaws.com:587?tls={ciphers:"SSLv3"}&secureConnection=false' -``` -You see settings with: -``` -sudo snap get wekan -``` -b) Wekan Gantt GPLv2 Snap: -``` -sudo snap set wekan-gantt-gpl mail-from='Wekan Boards ' -sudo snap set wekan-gantt-gpl mail-url='smtp://username:password@email-smtp.eu-west-1.amazonaws.com:587?tls={ciphers:"SSLv3"}&secureConnection=false' -``` -You see settings with: -``` -sudo snap get wekan-gantt-gpl -``` -c) Docker, Source, etc -``` -MAIL_FROM='Wekan Boards ' -MAIL_URL='smtp://username:password@email-smtp.eu-west-1.amazonaws.com:587?tls={ciphers:"SSLv3"}&secureConnection=false' -``` - -## Example: AWS SES sending email with command line - -[Source](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp-client-command-line.html) - -This can be used for debugging on bash shell, does AWS SES work at all. Other shells work too, on Windows it requires installing openssl command. - -1) `password-to-base64.sh` - converts AWS SES STMP credentials to base64 to be used at input.txt email content: -``` -echo -n "AKIA...." | openssl enc -base64 -echo -n "password-here...." | openssl enc -base64 -``` - -2) `input.txt` - change all to your domains, password, etc where is text `-here` below. NOTE: only at `From:` there is more detailed sender name, not elsewhere like `MAIL FROM:` etc. - -``` -EHLO example.com-here -AUTH LOGIN -base64-username-here -base64-password-here -MAIL FROM: boards@example.com-here -RCPT TO: you@example.com-here -DATA -From: Wekan Boards-here -To: you@example.com-here -Subject: Amazon SES SMTP Test - -This message was sent using the Amazon SES SMTP interface. -. -QUIT -``` -3a) `ses-send-email.sh` , with STARTTLS: -``` -openssl s_client -crlf -quiet -starttls smtp -connect email-smtp.eu-west-1.amazonaws.com:587 < input.txt -``` -3b) `ses-send-email.sh`, with SSL: -``` -openssl s_client -crlf -quiet -connect email-smtp.eu-west-1.amazonaws.com:465 < input.txt -``` -4) Changing above `.sh` scripts to executeable: -``` -chmod +x *.sh -``` -Then you can run them like this: -``` -./password-to-base64.sh -``` - -## Example: Gmail -[Source](https://github.com/wekan/wekan/issues/3529#issuecomment-792724239) -``` -sudo snap set wekan mail-url='smtps://username@domain.com:password@smtp.gmail.com:465' -sudo snap set wekan mail-from='Wekan Team Boards ' -``` -Convert password via this service https://www.url-encode-decode.com and everything will work. - -### If you get SSLv3 protocol error - -Do instead this `smtp://` and ignoreTLS etc, and at click your right top username / Admin Panel / Email, with TLS support NOT enabled: -``` -sudo snap set wekan mail-url='smtp://username:password@email-smtp.eu-west-1.amazonaws.com:587?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=false' -sudo snap set wekan mail-from='Wekan Team Boards ' -``` -### If you use some other snap like wekan-gantt-gpl - -Change part `sudo snap set wekan` to `sudo snap set wekan-gantt-gpl` - -## Example: UCS - -### In admin panel (within admin account on Wekan app itself) -- SMTP Host: `smtp.example.com:25/?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=false` -- SMTP Port: `25` -- Username: `webadmin%40example.com` -- [_] TLS Support UNCHECKED -- From: `Wekan Admin ` - -### Settings in Wekan App settings in UCS dashboard -- URL settings: `https://www.example.com/wekan` -- LDAP Settings: `(&(objectClass=person)(mailPrimaryAddress=*)(!(shadowExpire=*))(sambaBadPasswordTime=0)(wekanActivated=TRUE)(uid=))` -- Mail URL: `smtp://webadmin%40example.com:password@example.com:25/?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=false` -- Mail From: `Wekan Notifications ` - -## Example: username contains @ - -Below `@` is urlencoded to `%40` - -``` -sudo snap set wekan mail-url='smtps://user%40provider.com:xxxxxx@smtp.provider.com:587' -sudo snap set wekan mail-from='Boards Support ' -``` - -If settings happends to disappear, it's possible set cron job to run those at morning, see: https://crontab.guru -``` -sudo su -export EDITOR=nano -crontab -e -``` -There at bottom add these. Optional is to add to end of snap command `2>&1` to disable output,if there is any. -``` -06 00 * * * sudo snap set wekan mail-url='smtps://user%40provider.com:xxxxxx@smtp.provider.com:587' -06 01 * * * sudo snap set wekan mail-from='Boards Support ' -``` - -## Check is username and password required - -If your email server does not require authentication like username and password, [don't include them in MAIL_URL](https://github.com/wekan/wekan/issues/2106). For example, IBM Notes does not require username and password. - -## Config - -Mail configuration if done by settings of `MAIL_URL` & `MAIL_FROM` environment parameters. Way of setting is due your instalation method e.g. [snap](https://github.com/wekan/wekan-snap/wiki/Install#6-email-and-other-settings), in docker-compose.yml file etc. - -## No mail server - -You can choose to _NOT_ configure a mail server, by not providing the `MAIL_URL` & `MAIL_FROM` environment parameters. Instead the mail message will be send to the terminal output. See [FAQ](FAQ#show-mails-with-a-docker-image-without-mail-configuration) for more info. - -## Email servers: SMTP or Exchange - -Standalone Wekan uses SMTP server for sending email invitations etc. - -For Exchange, you can use [DavMail](http://davmail.sourceforge.net), Wekan SMTP => Davmail => Exchange. - -Another way is to [Configure Postfix to relay to Exchange with NTLM authentication](https://www.linuxquestions.org/questions/linux-newbie-8/configure-postfix-to-relay-to-exchange-server-with-ntlm-authentication-4175410961/#post4712832) - -There are Thunderbird Exchange Calendar extensions for [Exchange 2007/2010/2013/others? Open Source](https://github.com/ExchangeCalendar/exchangecalendar/releases), [Exchange 2007-2015 paid](https://exquilla.zendesk.com/hc/en-us) and [Exhange 2016 paid](http://www.beonex.com/owl/) and [other extensions](https://addons.thunderbird.net/en-US/thunderbird/search/?q=exchange&appver=&platform=), info how to use it is at [article at threenine.co.uk](https://threenine.co.uk/setup-office365-calendar-with-thunderbird/). Wekan has [Calendar feature](https://github.com/wekan/wekan/issues/808). - -Wekan Email settings are required in both MAIL_URL and Admin Panel. - -If you want to receive Email to Wekan, use [Huginn](https://github.com/wekan/wekan/issues/1160) to get E-mail from mailserver and have Huginn to use Wekan REST API to add card to Wekan board. - -## Postfix - -If you want to configure a mail server, you could use a mail server out-side of your machine (like the example above). Or you could start another Docker container which runs Postfix (try the [`marvambass/versatile-postfix`](https://hub.docker.com/r/marvambass/versatile-postfix/) Docker image). - -If you already got a Postfix service running on your host machine, you can add the local IP address to the docker-compose.yml file and use the hostname in the `MAIL_URL`: -``` -environment: - [...] - - MAIL_URL=smtp://mailserver - - MAIL_FROM=noreply@domain.com -extra_hosts: - - "mailserver:192.168.1.20" -``` -**Note:** `192.168.1.20` needs to be changed to your local server IP address. - -And finally add the Docker IP range (172.17.x.x) to the Postfix trusted networks list in `/etc/postfix/main.cf`: -``` -mynetworks = 127.0.0.0/8 172.17.0.0/16 [::ffff:127.0.0.0]/104 [::1]/128 -``` - -## Troubleshooting - -Email is quite important in Wekan, as without it you can't send password reset links nor can you verify your e-mail address. Here are some ways to figure out what is wrong with your mail server settings in WeKan. - -## Log Files -Firstly, make sure you're logged into your server and following your log files. - - @:~$ tail -f path/to/wekan.log - -If you're using the Docker container through docker-compose, you can follow the log file like this: - - @:~$ docker-compose logs -f wekan - -If you're using a snap package, you'll get the logs with - - @:~$ journalctl -u snap.wekan.wekan - -## Error Messages -Once you've got the log files in front of you, go to the WeKan frontend and send a password reset link, or try to register. This will try to send an e-mail, and you should see any error messages in the log file. - -### Wrong Port -If you see an error message like the following one, your port number is wrong. If you're using plain old SMTP or STARTTLS, your port should be 25. If you're using TLS, you may need to change your port to 465. Some mail servers may use port 587 instead of the two above. - -``` -wekan_1 | Exception while invoking method 'forgotPassword' Error: connect ECONNREFUSED 64.22.103.211:587 -wekan_1 | at Object.Future.wait (/build/programs/server/node_modules/fibers/future.js:449:15) -wekan_1 | at Mail._syncSendMail (packages/meteor.js:213:24) -wekan_1 | at smtpSend (packages/email.js:110:13) -wekan_1 | at Object.Email.send (packages/email.js:168:5) -wekan_1 | at AccountsServer.Accounts.sendResetPasswordEmail (packages/accounts-password/password_server.js:614:9) -wekan_1 | at [object Object].Meteor.methods.forgotPassword (packages/accounts-password/password_server.js:546:12) -wekan_1 | at packages/check.js:130:16 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at Object.exports.Match._failIfArgumentsAreNotAllChecked (packages/check.js:129:41) -wekan_1 | at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1734:18) -wekan_1 | at packages/ddp-server/livedata_server.js:719:19 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at packages/ddp-server/livedata_server.js:717:40 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at packages/ddp-server/livedata_server.js:715:46 -wekan_1 | at [object Object]._.extend.protocol_handlers.method (packages/ddp-server/livedata_server.js:689:23) -wekan_1 | - - - - - -wekan_1 | at Object.exports._errnoException (util.js:907:11) -wekan_1 | at exports._exceptionWithHostPort (util.js:930:20) -wekan_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1081:14) -``` - -### Wrong Protocol -If you have the "Enable TLS support for SMTP server", but your does not directly support TLS (it may use STARTTLS instead), then you'll get the following error. Just uncheck the checkbox in the Admin Panel. - -``` -wekan_1 | Exception while invoking method 'forgotPassword' Error: 139872240588608:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:794: -wekan_1 | at Object.Future.wait (/build/programs/server/node_modules/fibers/future.js:449:15) -wekan_1 | at Mail._syncSendMail (packages/meteor.js:213:24) -wekan_1 | at smtpSend (packages/email.js:110:13) -wekan_1 | at Object.Email.send (packages/email.js:168:5) -wekan_1 | at AccountsServer.Accounts.sendResetPasswordEmail (packages/accounts-password/password_server.js:614:9) -wekan_1 | at [object Object].Meteor.methods.forgotPassword (packages/accounts-password/password_server.js:546:12) -wekan_1 | at packages/check.js:130:16 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at Object.exports.Match._failIfArgumentsAreNotAllChecked (packages/check.js:129:41) -wekan_1 | at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1734:18) -wekan_1 | at packages/ddp-server/livedata_server.js:719:19 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at packages/ddp-server/livedata_server.js:717:40 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at packages/ddp-server/livedata_server.js:715:46 -wekan_1 | at [object Object]._.extend.protocol_handlers.method (packages/ddp-server/livedata_server.js:689:23) -wekan_1 | - - - - - -wekan_1 | -wekan_1 | at Error (native) -``` - -### STARTTLS Sending test email failed - -``` -Sending email failed -Error trying to send email: 139625961224000:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:827: -``` -To fix it, in snap/docker/source environment variable settings, with username and password urlencoded: -``` -snap set wekan mail-from='Boards Support ' - -snap set wekan mail-url='smtp://support%40example.com:password@mail.example.com:587/?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=false' -``` -Admin Panel: -``` -SMTP Host: -mail.example.com:587/?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=false - -SMTP Port: -587 - -Username: -support%40example.com - -Password: -password - -TLS support: -[_] <== not checked - -From: -Boards Support - -DNS settings, with server IP address in ipv4 section: -TXT: mail.example.com & & TXT: example.com -v=spf1 a mx ipv4:123.123.123.123/32 include:_spf.google.com include:example.com include:mail.example.com include:_spf.google.com ~all -``` - -### Self-signed Certificate -Unfortunately at this stage, WeKan does not support self-signed certificates. You will see the following error if your SMTP server is using a self-signed certificate. Ways to remedy to this are (by order of preference): -* disable TLS on your SMTP server. For postfix juste add "smtpd_user_tls = no" to main.cf. !!! Unless doing this, wekan will try to connect with STARTTLS !!! -* to get a certificate from a CA, or -* to add "?tls={rejectUnauthorized:false}" to the end of the [MAIL_URL environment variable](https://nodemailer.com/smtp/), or -* to add "?ignoreTLS=true" to the end of the [MAIL_URL environment variable](https://nodemailer.com/smtp/), or -* to remove the TLS certificate completely. - -``` -wekan_1 | Exception while invoking method 'forgotPassword' Error: 139872240588608:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:794: -wekan_1 | at Object.Future.wait (/build/programs/server/node_modules/fibers/future.js:449:15) -wekan_1 | at Mail._syncSendMail (packages/meteor.js:213:24) -wekan_1 | at smtpSend (packages/email.js:110:13) -wekan_1 | at Object.Email.send (packages/email.js:168:5) -wekan_1 | at AccountsServer.Accounts.sendResetPasswordEmail (packages/accounts-password/password_server.js:614:9) -wekan_1 | at [object Object].Meteor.methods.forgotPassword (packages/accounts-password/password_server.js:546:12) -wekan_1 | at packages/check.js:130:16 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at Object.exports.Match._failIfArgumentsAreNotAllChecked (packages/check.js:129:41) -wekan_1 | at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1734:18) -wekan_1 | at packages/ddp-server/livedata_server.js:719:19 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at packages/ddp-server/livedata_server.js:717:40 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at packages/ddp-server/livedata_server.js:715:46 -wekan_1 | at [object Object]._.extend.protocol_handlers.method (packages/ddp-server/livedata_server.js:689:23) -wekan_1 | - - - - - -wekan_1 | -wekan_1 | at Error (native) -``` - -### Incorrect TLS Certificate -Lastly, if you see the following error message it is because the certificate has not been correctly installed on the SMTP server. - -``` -wekan_1 | Exception while invoking method 'forgotPassword' Error: unable to verify the first certificate -wekan_1 | at Object.Future.wait (/build/programs/server/node_modules/fibers/future.js:449:15) -wekan_1 | at Mail._syncSendMail (packages/meteor.js:213:24) -wekan_1 | at smtpSend (packages/email.js:110:13) -wekan_1 | at Object.Email.send (packages/email.js:168:5) -wekan_1 | at AccountsServer.Accounts.sendResetPasswordEmail (packages/accounts-password/password_server.js:614:9) -wekan_1 | at [object Object].Meteor.methods.forgotPassword (packages/accounts-password/password_server.js:546:12) -wekan_1 | at packages/check.js:130:16 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at Object.exports.Match._failIfArgumentsAreNotAllChecked (packages/check.js:129:41) -wekan_1 | at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1734:18) -wekan_1 | at packages/ddp-server/livedata_server.js:719:19 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at packages/ddp-server/livedata_server.js:717:40 -wekan_1 | at [object Object]._.extend.withValue (packages/meteor.js:1122:17) -wekan_1 | at packages/ddp-server/livedata_server.js:715:46 -wekan_1 | at [object Object]._.extend.protocol_handlers.method (packages/ddp-server/livedata_server.js:689:23) -wekan_1 | - - - - - -wekan_1 | at Error (native) -wekan_1 | at TLSSocket. (_tls_wrap.js:1063:38) -wekan_1 | at emitNone (events.js:67:13) -wekan_1 | at TLSSocket.emit (events.js:166:7) -wekan_1 | at TLSSocket._init.ssl.onclienthello.ssl.oncertcb.TLSSocket._finishInit (_tls_wrap.js:621:8) -wekan_1 | at TLSWrap.ssl.onclienthello.ssl.oncertcb.ssl.onnewsession.ssl.onhandshakedone (_tls_wrap.js:453:38) -``` - -## No News Is Good News -Of course, if you don't see any of these errors in your WeKan log file, then the problem is not in WeKan. Check your SMTP server's mail logs (if you can) to get a better idea of what might be going wrong. - - -*** - -## BELOW IS NOT TESTED YET DOCS - -They are moved here from https://github.com/wekan/wekan/issues/961 - -### Configure Wekan - -Sample: -### Wekan with TLS/SSL -To run Wekan secured with TLS/SSL do the following steps: -1. Setup a Web-Server/-Proxy with TLS/SSL support that maps requests to wekan. [Link](url) -2. Set protocol to http**s**. -`export ROOT_URL='https://example.com/'` -3. Set Wekan to an internal port. -`export PORT=54321` -4. Restart and run Wekan. - -### Wekan at subpath -To run Wekan to appear at a subpath of your domain: -1. Setup a Web-Server/-Proxy that maps requests to wekan. [Link](url) -2. Append subpath to domain, without trailing slash. -`export ROOT_URL='http://example.com/mywekan'` -3. Set Wekan to an internal port. -`export PORT=54321` -4. Restart and run Wekan. - -### SMTP with TLS/SSL -To enable Wekan sending Mail from a mail server with TLS/SSL: -1. Set Wekan to the specified port (465 / 587). -`export MAIL_URL='smtp://user:password@example.com:587/'` -2. Restart and run Wekan. - -### Mail Sender -To define a sender name for the mails automatically sent by Wekan. -1. ...`export MAIL_FROM='Thomas Anderson '` - -## Using mail service from zoho -If you have your personal mail on zoho for your domain example.com, then follow these steps to add MAIL_URL. -Let's assume following username -username=user1@example.com -password=12@3424dsfsf - -Step 1: encode the username and password - -encoded username: user1%40example.com -encoded password: 12%403424dsfsf - -Step 2: form MAIL_URL - -MAIL_URL=smtps://user1%40example.com:12%403424dsfsf@smtp.zoho.com:465/ - -By default zoho uses port number 465 with TLS enabled. - -Step 3: form MAIL_FROM - -MAIL_FROM=Wekan Notifications \ No newline at end of file diff --git a/docs/FAQ/FAQ.md b/docs/FAQ/FAQ.md deleted file mode 100644 index ed8c0c111..000000000 --- a/docs/FAQ/FAQ.md +++ /dev/null @@ -1,249 +0,0 @@ -> **»The only stupid question is the one that is not asked.«** -> *– Hull, E., K. Jackson, et al. (2005).* - -## About Wekan - -Wekan is an completely Open Source and Free software -collaborative [kanban board](https://en.wikipedia.org/wiki/Kanban_board) application with MIT license. - -Whether you’re maintaining a personal todo list, planning your holidays with some friends, -or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool -to keep your things organized. They give you a visual overview of the current state of your project, -and make you productive by allowing you to focus on the few items that matter the most. - -Since Wekan is a free software, you don’t have to trust us with your data and can -install Wekan on your own computer or server. In fact we encourage you to do -that by providing one-click installation on various platforms. - -- Wekan is used in [most countries of the world](https://snapcraft.io/wekan). -- Wekan largest user has 30k users using Wekan in their company. -- Wekan has been [translated](https://app.transifex.com/wekan/) to about 70+ languages. -- [Features](Features): Wekan has real-time user interface. -- [Platforms](Platforms): Wekan supports many platforms. - Wekan is critical part of new platforms Wekan is currently being integrated to. -- [Integrations](Integrations): Current possible integrations and future plans. - -## About niche of WeKan - -It's a very specific niche, with limited amount competitors, with all of this applied combined: - -- Kanban with very many features, polish and usability -- Permissive MIT license (if some other changes to GPL, Open Core, has https://sso.tax , is propietary etc, it's not in same niche anymore) -- Self-hosted (or SaaS) -- All code https://github.com/wekan/wekan and docs https://github.com/wekan/wekan/wiki Open Source -- Available for many OS and CPU platforms, listed at download/install section of https://wekan.github.io -- Translated to 70+ languages at https://app.transifex.com/wekan -- Has optional affordable Commercial Support for Features/Fixes/Support/Hosting available https://wekan.team/commercial-support/ that funds development of WeKan. Commercial Support provides private support chat with maintainer of WeKan. -- Is actively maintained with major features and fixes being added -- Does not include any enabled telemetry or externally loaded dependencies by default, it does not ping home. Only Snap platform has number of servers per country counted by Canonical that provides Snap store https://snapcraft.io/wekan , not any more specific details. -- Alternative to Enterprise software that can cost 500k euro per year - -## Requirements - -- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) / - [Mac](Mac) / [Windows](Install-Wekan-from-source-on-Windows). - [More Platforms](Platforms). [ARM progress](https://github.com/wekan/wekan/issues/1053#issuecomment-410919264). -- 1 GB RAM minimum free for Wekan. Production server should have miminum total 4 GB RAM. - For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/main/docker-compose.yml): 3 frontend servers, - each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs. -- Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted. -- SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off. - Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported. - Wekan on Sandstorm is not usually affected by any Standalone Wekan (Snap/Docker/Source) security issues. -- [Reporting all new bugs immediately](https://github.com/wekan/wekan/issues). - New features and fixes are added to Wekan [many times a day](https://github.com/wekan/wekan/blob/main/CHANGELOG.md). -- [Backups](Backup) of Wekan database once a day miminum. - Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet. - Some bug can cause Wekan board to not load at all, requiring manual fixing of database content. - -## What is Wekan Team? - -[Wekan Team](https://wekan.team) is Wekan Commercial Support company run by CEO [xet7](https://github.com/xet7), current maintainer of Wekan. xet7 does respond to feedback at GitHub issues very actively, because Wekan is community driven Open Source project. Because conflicting opinions can not be implemented, sometimes xet7 has to behave like a benevolent dictator. Every Wekan team member is free to choose what to contribute and when. We can not force anybody to implement anything. Wekan development speed increases when new Wekan contributors join and start to send PRs to existing and new issues. - -## What is Bio of xet7 ? - -[Lauri Ojansivu](https://github.com/xet7) is CEO at [WeKan Team](https://wekan.team), -Cross-Platform FOSS maintainer, -Cloud Architect, Full-Stack Developer, SysAdmin and SysOp. -He has experience of [having added and removed over 4 million lines of code](https://github.com/wekan/wekan/blob/main/releases/count-lines-of-code-per-committer.sh) to -[Meteor Full-Stack Web Framework](https://www.meteor.com) -based [WeKan Open Source kanban](https://wekan.github.io), -that has been [translated to 70+ languages](https://explore.transifex.com/wekan/wekan/), -and is currently used at [most countries of the world](https://snapcraft.io/wekan). -At 2024-06-04, he is currently [4h most active GitHub committer at Finland](https://committers.top/finland). - -He holds a BBA as computer designer and system engineer -at Kemi-Tornio AMK, Finland. -He is credited as having built quality control system -with comparisons of groups and fitness test calculations, -company infra, migration from On-Premises to Cloud, -SLA support, IT support, [games](https://github.com/xet7/notegame), database apps, websites, -[winner of 2th place at EU NGI ONTOCHAIN Hackathon](https://wekan.github.io/donated/ontochain-certificate.png), -[winner of 20i FOSS Awards](https://wekan.github.io/donated/foss-awards-2022/20i_FOSS_Awards_Winners_Announced_(Press_Release).pdf), and [porting to 30+ CPU/OS](https://github.com/xet7/darkesthour). - -At MeteorJS Dispatches Video Podcast, he has been -interviewed [about WeKan](https://www.youtube.com/watch?v=ke-mbnZM3zE&t=1342s), -[Meteor Security](https://www.youtube.com/watch?v=zic-h8jG6F8), and other topics. -He teaches using computers at local nerd club. -At his free time, he is porting FOSS software to many CPU/OS, -and [translating them from English to Finnish](https://xet7.org). - -## How to convince my company management that Wekan "is less evil" than Trello? - -Yes, xet7 received this question in Email. - -Trello: -- Code is proprietary. Only Atlassian personnel has access Trello source code. -- You can not install Trello to your own servers. -- Trello has access to all of your data. -- You can not run Trello in internal network that is not connected to Internet. - -Wekan: -- All Wekan code is Open Source at https://github.com/wekan/wekan with MIT license, free also for commercial use. -- You don't need to pay monthly fee for using Wekan. Only if you need Commercial Support https://wekan.team for some bugfix, feature or integration, you can pay for that. -- You can download all Wekan code and run in internal network that is not connected to Internet. You can keep all your data to yourself. -- Snap/Docker/Sandstorm versions runs inside sandbox and does not have any access to elsewhere on server filesystem. - - Snap version of Wekan is built directly from https://github.com/wekan/wekan repo on Canonical's build service that does security checks etc. - - Docker version of Wekan is built directly from https://github.com/wekan/wekan by [Quay](https://quay.io/wekan/wekan) and [Docker Hub](https://hub.docker.com/r/wekanteam/wekan/) and they do security checks etc. - - Sandstorm version is checked by [ocdtrekkie](https://github.com/ocdtrekkie) that it does not break anything, before he lets new version of Wekan into [Sandstorm App Market](https://apps.sandstorm.io/app/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h). -- Wekan does not load any files from Internet, when starting Wekan. For further restrictions, you could on internal server only allow incoming and outgoing traffic from - on internal server firewall to those computers that need to use Wekan. -- There is contributors to Wekan from all over the world, that add fixes and features to Wekan. -- There has been some code reviews done by security researchers https://wekan.github.io/hall-of-fame/ and there has been fixes to Wekan related to that. -- xet7 tries to be less evil by trying to listen to some user feedback. For example, someone suggested [inner shadow](https://github.com/wekan/wekan/issues/1690), so it was added, but because of feedback from users inner shadow was removed. Same with removing and adding back [SMTP settings in Admin Panel](https://github.com/wekan/wekan/issues/1790). Unfortunately it's not possible to make everyone happy because different people have different opinions, so xet7 tries to select something that makes some sense. Improvement suggestions welcome. - -## When new version of Wekan will be released? When my pull request will be tested, commented or merged? - -Usually: -* Fastest: multiple times a day. Sometimes this is 7 releases per day. This is usually because some bug is found and new releases are done in rapid schedule until bug is fixed. Also sometimes there is many new pull requests per day, or fast pace of adding new features. This is like said by Eric S. Raymond: ["Release early. Release often. And listen to your customers."](https://en.wikipedia.org/wiki/Release_early,_release_often) -* Slowest: Once a month. -* One release contains anything from one typo fix to many major features and bugfixes. - -For [Wekan Platforms](Platforms), it means these choices: - -* Snap: You get updates automatically immediately, or updates automatically scheduled at midnight -* Source/Docker/VirtualBox: You need to test and install new Wekan version yourself -* Sandstorm: ocdtrekkie tests before releasing to Sandstorm App Market, and you backup your grains and upgrade by clicking upgrade button when you wish - -## What Wekan version number means? - -* Every release has release date and release number. -* Every release increments release number by 0.01. This practise started at 2017-03-05 v0.12. Before it release number was much more compicated like v0.11.1-rc2. After v0.99 comes v1.00, v1.01, v1.02, etc. -* Version number is only incrementing number. Wekan has been in production use for a long time already, so v1.00 is not about being production ready. There has been many performance improvements, but there is still a lot to improve. -* Wekan still has bugs, like any other software. So this is not about being bug free. -* Wekan will keep changing, and providing migrations from old to newest version. In that sense, Wekan has been LTS release as long as it's been maintained already. There have been many fixes to make migrations possible, and adding more fixes will continue. -* Development happens in in edge branch. When release is made, edge branch is merge merged to devel/master/meteor-1.8 branches. - -# Features - -## Will my feature request be implemented? - -There are alternative ways to have your feature implemented: - -a) [Commercial Support](https://wekan.team/commercial-support/) - -b) Pay someone from your company or some other developer to code feature and submit as pull request - -c) Develop feature yourself and submit it as pull requests to devel [Wekan repo](https://github.com/wekan/wekan) branch. - -[According to Open Hub](https://www.openhub.net/p/wekan), Wekan code is only about 10500 lines without Meteor.js framework and NPM modules, so it's very small when comparing to other software, and quite logically organized. With git history viewer like gitk it's possible to see how different features are implemented. - -For Sandstorm-specific features, have the feature enabled in Sandstorm by using environment variable isSandstorm = true like is at wekan/sandstorm.js . - -In wiki there is [Developer Documentation](Developer-Documentation). - -## Will you accept my pull request? -We totally rely on pull requests for new features and bug fixes. If your pull request works, it's very likely to be accepted by xet7. - -## How can I contribute to Wekan? -We’re glad you’re interested in helping the Wekan project! We welcome bug reports, enhancement ideas, and pull requests, in our GitHub bug tracker. Have a look at the [[Contributing notes|developer-documentation]] for more information how you can help improve and enhance Wekan. We are working to make it possible to have bounties for features. We welcome sponsors. - -## Are there any tests? -There are near to zero tests, because nobody has contributed tests as pull request. - -## Is there a plugin system? -No. It's not possible in web browser to a) Install npm modules inside Docker or b) Install code afterwards on Sandstorm, because application code is read-only and signed. All features in code are built in, and all data related to features is stored on MongoDB. - -## Can Wekan be rewritten in another programming language? - -[xet7 tried to rewrite, but it's only at very early steps](https://github.com/wekan/demo/wiki/Roadmap). - -# History - -## Weren't you called Libreboard before? -Yes, Libreboard was the old project name, which superseded the even older project name Metrello. As the original name suggests, Metrello was a Trello clone built with Meteor. It used a lot of the original assets from Trello and even the name was very similar. When the project turned more mature and gained more interest by the community, this was obviously a [problem]. To get its own identity and due to a DMCA from Trello, efforts started to [redesign] Metrello, which also included to find a new name and so Maxime Quandalle came up with “OpenBoard”, to underline the open source nature of the project. Unfortunately the com domain was already taken and so she replaced the Open with Libre, which stands for free (as in freedom) in many Latin derived languages. - -After renaming it to Libreboard, a [new logo] was designed and the project continued to live on as Libreboard. Unfortunately it turned out, that the new logo was apparently ripped-off from a [concept] published at Dribbble, and so a new logo had to be found. There were a lot of [ideas from the community][logo-ticket], and at the end Maxime [proposed][wekan-proposal] a completely new name, Wekan, together with a design proposal for a new logo. - -## What was Wekan fork / Wefork? -After 2016-09-02 there were no pull requests reviewed and integrated for nearly 2 months. At 2016-10-20 Wekan community created fork and started merging many bugfixes and new features into Wefork. 2017-01-29 Wekan author mquandalle gave access to Wekan and at 2017-01-31 xet7 started merging Wefork back to Wekan. 2017-02-08 All of Wefork is now merged and moved back to official Wekan. Wefork will not accept any new issues and pull requests. All development happens on Wekan. [Wefork announcement and merging back](https://github.com/wekan/wekan/issues/640#issuecomment-276383458), more info: [Team](Team) - -## What is the difference between Wekan and Trello? -The main difference between the two is that Wekan is completely open source and available under the permissive MIT license. That makes it possible to host it on your own server (or your company's or organization's server) and you keep the full control over all data. No need to fear it will disappear some day, like a commercial service like Trello could. -Additionally the long term goal is to have features that are not available on Trello or other alternatives, making Wekan flexible and suitable for complex project organizations. - -## Why does Wekan look so different now compared to < v0.9? -Wekan started as a just for fun project to explore meteor and its features and the initial version had a lot of the Trello assets (CSS, Images, Fonts) in it and copied a lot of its design. Due to an DMCA takedown notice and obviously to get its own identity, the old design was dropped after v0.8 and a new UI was developed - -See the related tickets [#92] and [#97] for more information. - -[#92]: https://github.com/wekan/wekan/issues/92 -[#97]: https://github.com/wekan/wekan/issues/97 - -# Etiquette - -## Why am I called a troll? -* You use word "shame", that means you would like to have a feature or fix without contributing any code or payment yourself, worded in a way to make it itch conscience. -* You want a feature, but you add thumbs down emoji reactions -* You are adding image reactions -* You want priorities changed. Current priorities are: - * [High priority](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AHigh-priority): security issues and high severity bugs - * Medium priority: Import/Export - * Others. Actual roadmap will be updated later. -* You write that you are providing constructive criticism -* You think that free software includes free implemented features -* You are adding something other than: - * Thumbs up reactions to existing posts - * Feature specs - * Technical details - * Links to related documentation - * Links to example code to get a feature implemented - * Pull requests - -## Why am I called a spammer? -* You are adding new comments that have only content like: - * +1 - * +1 I can confirm this - * +1 It would be great to have this - * +1 This is the only feature for preventing my company to move to Wekan -* You are adding something other than: - * Thumbs up reactions to existing posts - * Feature specs - * Technical details - * Links to related documentation - * Links to example code to get a feature implemented - * Pull requests - -## What you should do if you see a troll or a spammer? -Add only one link to this FAQ. Do not in any way comment or feed the trolls. - -[problem]: https://github.com/wekan/wekan/issues/92 -[redesign]: https://github.com/wekan/wekan/issues/94 -[new logo]: https://github.com/wekan/wekan/issues/64#issuecomment-69005150 -[concept]: https://dribbble.com/shots/746215-Pigeon -[logo-ticket]: https://github.com/wekan/wekan/issues/64#issuecomment-74357809 -[wekan-proposal]: https://github.com/wekan/wekan/issues/64#issuecomment-135221046 - ---- - -# Sandstorm - -## What Sandstorm is not anymore? -Not a Company, Not a Startup, Not a Product with Enterprise version. Everything is now [Open Source](https://en.wikipedia.org/wiki/Open-source_software) and [Free software](https://en.wikipedia.org/wiki/Free_software). - -## What is Sandstorm? -[Sandstorm](https://sandstorm.io) is a open-source and free software security audited platform with grains, logging, admin settings, server clustering and App Market. App Market has Wekan as installable App. SSO options like LDAP, passwordless email, SAML, GitHub and Google Auth are already available on Sandstorm. Sandstorm is preferred platform for Wekan, as it would take a lot of work to reimplement everything in standalone Wekan. - -## How can you contribute to Sandstorm? -See [Sandstorm website about contributing pull requests](https://sandstorm.io) and [returning to Open Source community roots, including donation info](https://sandstorm.io/news/2017-02-06-sandstorm-returning-to-community-roots). - diff --git a/docs/FAQ/Hall-of-Shame.md b/docs/FAQ/Hall-of-Shame.md deleted file mode 100644 index 451f953cb..000000000 --- a/docs/FAQ/Hall-of-Shame.md +++ /dev/null @@ -1,160 +0,0 @@ -[Other things that are not related to WeKan kanban](https://github.com/wekan/wekan/wiki/NOT-related-to-Wekan) - -## Description - -Lauri Ojansivu (xet7) has [trademark to WeKan](https://www.tmdn.org/tmview/#/tmview/detail/FI50202100052006A), as can be seen from bottom of official WeKan webpage https://wekan.github.io . Official domain is https://wekan.team . - -Lauri Ojansivu, as maintainer of WeKan Open Source kanban, has added and removed about [4 million lines of code](https://github.com/wekan/wekan/graphs/contributors) to WeKan since December 2016. All changes to WeKan are at [ChangeLog](https://github.com/wekan/wekan/graphs/contributors). WeKan is used at [most countries of the world](https://wekan.github.com) - -Lauri Ojansivu has nickname xet7 at many places at Internet, for example: - -- https://github.com/xet7 - -Problem is, fake companies try to register WeKan these domains, or other domains that have these words: - -- wekan - - wekan io, virus page - - wekan cn, fake spam company "WeiRong Holdings Ltd" and "Yongchen Holdings Ltd" trying to register -- xet7 - - xet7 cn, fake spam company "WeiRong Holdings Ltd" trying to register - -Usually those fake companies setup virus webpages, or other fake webpages. - -## Fake mobile apps that do not work - -SMI TEAMWORK at [iOS App Store](https://itunes.apple.com/de/app/smi-teamwork/id1232167123?mt=8) and [Google Play Store](https://play.google.com/store/apps/details?id=com.siliconmotion.teamwork) . xet7 has notified them to remove it. - -## Fake companies trying to register WeKan domains - -### 2023-12-27 From chinaregistrar.org.cn , about "Yongchen Holdings Ltd" - -Dear Manager, - -(If you are not the person who in charge of this, please forward this to your CEO, because this is urgent. Thanks!)This is a formal email.We are the domain registration and solution center in China. - -On December 23, 2023, we received an application from Yongchen Holdings Ltd requested “wekan” as their internet keyword and China (CN) domain names( wekan.cn/ wekan.com.cn/ wekan.net.cn/ wekan.org.cn). - -After checking it, we find this name conflict with your company name or trademark.In order to deal with this matter better, we send email to you and confirm whether this company is your distributor or business partner in China? - -Best Regards - -Jason - -### 2023-05-22 From Zhihai Ning, zhihaining at 163 dot com, of WeiRong Holdings Ltd - -To whom it concerns, - -We will register the China domain names "wekan.cn" "wekan.com.cn" "wekan.net.cn" "wekan.org.cn" and internet keyword "wekan" and have submitted our application. We are waiting for Mr. Frank Liu's approval. These CN domains and internet keyword are very important for us to promote our business in China. Although Mr. Frank Liu advised us to change another name, we will persist in this name. - -Kind regards - -Zhihai Ning - -### 2023-12-18 From chinaregistrar.org.cn , about "WeiRong Holdings Ltd" - -Dear Manager, - -(If you are not the person who in charge of this, please forward this to your CEO, because this is urgent. Thanks!)This is a formal email.We are the domain registration and solution center in China. - -On December 18, 2023, we received an application from WeiRong Holdings Ltd requested “wekan” as their internet keyword and China (CN) domain names( wekan.cn/ wekan.com.cn/ wekan.net.cn/ wekan.org.cn). - -After checking it, we find this name conflict with your company name or trademark.In order to deal with this matter better, we send email to you and confirm whether this company is your distributor or business partner in China? - -Best Regards - -Jason - -## Fake companies trying to register xet7 domains - -### 2023-12-22 From Hunjun Zhang, hunjun_zhang at 163 dot com, of WeiRong Holdings Ltd - -To whom it concerns, - -We will register the China domain names “xet7.cn” "xet7.com.cn" "xet7.net.cn" "xet7.org.cn" and internet keyword "xet7” and have submitted our application. We are waiting for Mr.Martin Wang approval and think these CN domains and internet keyword are very important for our business. Even though Mr.Martin Wang advises us to change another name, we will persist in this name. - -Best Regards - -Hunjun Zhang - -### 2023-12-20 From tldschina.com , about "WeiRong Holdings Ltd" - -Dear Manager, - -(If you are not the person who in charge of this, please forward this to your CEO, because this is urgent.Thanks!) -I'm Martin Wang, Services & Operating Manager, from Network Service Company which is the domain name registration center in Shanghai, China. - -On December 18, 2023, we received an application from WeiRong Holdings Ltd requested “xet7” as their internet keyword and China (CN) domain names( xet7.cn xet7.com.cn xet7.net.cn xet7.org.cn). - -After checking it, we find this name conflict with your company name or trademark. In order to deal with this matter better, we send email to you and confirm whether or not your company have affiliation with this company in china? - -Kind regards - -Martin - -## Other spam from spam company "WeiRong Holdings Ltd" of domain 163 com - -From: jackyoptic at 163 dot com - -Re: 2.3USD for 1.25G SFP Module 1310nm 20km DDM Cisco Juniper Compatible GLC-LH-SMD - -Hello. - -We produce the Fiber Optical Module Transceiver for many years, our SFP module could compatibled Cisco, Aruba, HPE, Juniper Mikrotik ADVA .... router, switch for many years, - -If you need below equipments, please call me. - -SFP Optical Transceiver 155M, 1.25G - -SFP+ 10G Optical Transceiver - -XFP 10G Optical Transceiver - -X2 10G Optical Transceiver - -25G QSFP+ Optical Transceiver - -40G QSFP+ Optical Transceiver - -100G QSFP28, CFP, CFP2, CFP4, CXP Optical Transceiver - -SFP+ 10G DAC, AOC Cable - -QSFP 40G DAC, AOC Cable - -QSFP100G DAC, AOC Cable - -.... etc - -GLC-LH-SMD, 1.25G 1310NM, 10KM, With DDM - -$2.3/PC - - -10G SFP+ SR, 10G 850NM 300M With DDM - -$4.3/PC - - -All the Optical Transceiver offer 4years warranty, we could offer OEM, print your logo on the labels and offer the SFP code to customer - -Our SFP could change the soft code, if you want compatible with Cisco, Finisar, HP, Mikrotik, Juniper, Extreme, HUAWEI, ZTE...., only need change the SFP code, no need keep many stock. - -If you need catalog and pricelist, please reply our email, I will send you more information. - -Regards, - -Jacky - -## WeKan Enterprise Solutions - -xet7 does not know, what is this company? It is not related to WeKan kanban. - -- https://www.wekanenterprisesolutions.com -- https://www.linkedin.com/company/wekanenterprisesolutions/ -- https://in.linkedin.com/company/wekanenterprisesolutions/ - -## Wekan France - -xet7 does not know, what is this company? It is not related to WeKan kanban. - -- https://www.linkedin.com/company/wekan-france/ diff --git a/docs/FAQ/IRC-FAQ.md b/docs/FAQ/IRC-FAQ.md deleted file mode 100644 index 0d87c9c60..000000000 --- a/docs/FAQ/IRC-FAQ.md +++ /dev/null @@ -1,616 +0,0 @@ -# Wekan - Open Souce kanban - IRC FAQ - -- [Wekan website](https://wekan.github.io) - -### If you are in a hurry, please don't use IRC - -Instead, [please search existing open and closed issues or add new issue to Wekan Feature Requests and Bugs](https://github.com/wekan/wekan/issues) (open issues have not been solved yet), or alternatively [read docs](https://github.io/wekan/wekan/wiki). Thanks! - -### Required license to enter IRC channel - -License: - -[_] If you ask something, you will wait patiently on IRC channel for answer, idling for at least a week, and not leave IRC channel immediately. - -### Congratulations! If you agree with IRC license above, you can join Wekan IRC channel - -Wekan IRC is `#wekan` channel at: -- Libera.Chat -- (or OFTC) - -Unfortunately Freenode `#wekan` was taken over by Freenode admins, so it's no longer in use. - -*** - -## QA, answers by [xet7](https://github.com/xet), Maintainer of Wekan - -## Answers to IRC questions are added to this wiki page, because most coming to IRC channel leave immediately, and don't wait for answer. Real IRC users know idling and stay at IRC channel. It is required that you read everything in this page before coming to IRC channel. -*** -### Q: Max 20 comments visible? -``` -[16:11:09] hi -[16:11:23] and here we go again, again wekan -has been released without enough testing -[16:11:31] Comments can NOT be added any more -[16:11:42] the comments only show in -the comment-counter on the minicard -[16:11:53] but, the comments are -not visible when scrolling down -``` -A: What new Wekan release? I tested newest versions Wekan for Snap/Docker/Sandstorm, and comments can be added to card. Please add new issue with more details https://github.com/wekan/wekan/issues - -If you mean bug about [only 20 newest comments visible](https://github.com/wekan/wekan/issues/2377), that bug is fixed on non-public boards. I will add more fixes to that. - -### Q: Contributing to Wekan? -``` -[16:12:54] yes, it's open source -[16:12:57] yes, it's free -[16:13:02] but this is not okay any more -[16:13:27] if this does not change, I will -gather a group of developers to make a reasonable fork -``` -A: I don't know why you think fork would be necessary. I welcome all new contributors and co-maintainers, and help them to get up to speed. You can send your pull requests to Wekan https://github.com/wekan/wekan/pulls . I do have also [blog post about it](https://blog.wekan.team/2018/02/benefits-of-contributing-your-features-to-upstream-wekan/index.html). All what I do on Wekan is based of feedback at GitHub issues, chats and emails. Wekan is friendly Community driven Open Source project. I do also provide [Commercial Support](https://wekan.team/commercial-support) for features and fixes. - -### Q: CPU usage? -``` -[16:14:01] in my opinion, the board is still in -an eary RC state, and not stable by any means -[16:14:04] so many bugs all the time -[16:14:09] we are not talking about minor bugs. -[17:50:41] oh, and the VERY old bug is also back again: -[17:50:42] https://pastebin.com/raw/qpPiaWp6 -[17:50:53] CPU overload because of wekan -[17:51:43] this is the fastest server we have -ever run, and wekan is the only software on it -[17:51:48] yet, it still overpowers the CPU -[17:51:59] wekan is really not ready to be used on a daily basis -[17:52:12] We have many boards and many users, and we rely on wekan -[17:52:23] it disrupts our work life more than it helps us -[17:53:01] no matter if wekan is open source or not, -some minimum standards of quality should be maintained -[17:55:37] Here, that's a bug from the year 2016 ! -[17:55:38] https://github.com/wekan/wekan/issues/718 -[17:55:44] this bug is 3 years old -[17:56:00] that's again not a minor thing -[17:56:11] that's a major thing that disrupts the work flow -[17:56:20] it means, that the server admin will be called -all the time to restart the board -``` -A: Yes, that bug is back, to fix 2 other bugs. [I added explanation](https://github.com/wekan/wekan/issues/718#issuecomment-561377824). CPU usage is getting improved in newer Wekan releases. - -*** -### Q: Import multiple Trello boards? - -``` -[13:15:32] Hello, i there way how to import multiple -Trello booards? I have over 100 boards which i need to migrate -to Wekan. Importing via add board -> import -> from trello -works more or less but its time consuming. -``` - -A: This will be implemented sometime with [Mass Import from Trello](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license/RNTZ8NAm46mAeEDev) - -### Q: Fork? -``` -[15:24:31] hi -[15:25:13] I don't mean to come across ungrateful. -[15:25:29] But I really want to mention, that wekan should be -tested much better before releasing a new version. -[15:25:46] It's not important to release a new version every day. -[15:25:58] It's okay if there is a new version only every 2 weeks. -[15:26:09] But whenever there is a new version, it should be stable. -[15:26:14] really stable. rocksolid. -[15:26:32] We can not move cards! -[15:26:35] We can not add cards -[15:27:00] and when I run "snap revert wekan", I get the other -version which has the bug of the unsorted columns -[15:28:10] I really understand that it's open source and -free software. -[15:28:24] But people trust wekan in real life. They use it -on a daily basis in their work life. -[15:28:36] It's a nightmare, when you come to work in the -morning, and nothing works any more -[15:28:55] The previous version has a major bug (the lists -that could not be sorted and showed in the wrong order) -[15:29:06] and the current version is also buggy -(can't move cards / can't add new cards) -[15:29:20] These updates come via snap automatically. -[15:29:27] That involves a lot of trust. -[15:30:51] There really must be more testing. -[15:31:14] Also the github issues page has reports already. -[15:32:20] This user also explains what I just said: -[15:32:21] https://github.com/wekan/wekan/issues/2814#issuecomment-555427628 -[15:33:20] "snap revert wekan" messes up the list order -because this was a bug in the previous version -[15:33:30] so there is no bug-free version available now. -[15:33:36] I am not talking about small bugs. -[15:34:03] these are all bugs that massively mess up the -functionality to a degree, that it renders the board useless -[15:34:42] Wekan is such a promising project. -[15:34:47] But the testing must be much better. -[15:54:46] aaaaaaaaaaaand OPENING cards on Samsung -phones & tablets stopped working again! -[15:54:55] it worked in the "edge" version of wekan -[15:54:59] now it does not work any more -[15:55:12] cards can NOT be opened any more on Samsung phones & tablets -[15:55:24] constantly, there is something that breaks -[15:55:53] Really, wekan could be so promising, -but I think it's time for a fork -[15:58:56] https://github.com/wekan/wekan/issues/2814 -[15:59:22] https://github.com/wekan/wekan/issues/2810 -[16:00:14] bye, cya later -``` -A: -- Please test newest Wekan -- Do you have time to be Wekan co-maintainer? -- What is URL to your fork? Please send it to me with email to x@xet7.org . Thanks! Currently there is about 2200 forks of Wekan, it would be hard to find without exact URL. -- What features and fixes have you implemented to Wekan? -- [What usually happens when Wekan gets broken](Test-Edge#what-usually-happens-when-wekan-gets-broken). -- [Benefits of contributing your features to upstream Wekan](https://blog.wekan.team/2018/02/benefits-of-contributing-your-features-to-upstream-wekan/index.html). -- [What was Wekan fork](FAQ#what-was-wekan-fork--wefork). - -*** -### Q: Other mobile browsers? -``` -[12:48:54] For example, on an Oppo phone, clicking on cards -works in Google Chrome. -[12:49:12] On Samsung devices, clicking on cards fails -``` -A: Please try newest Wekan. - -### Q: Colored text? -``` -[13:06:20] Whenever we want to make titles or -descriptions or comments colored, we must use -outdated (deprecate) html tags -[13:06:43] -Important won't work -[13:06:49] so we have to go with: -[13:06:55] Important -[13:07:04] which is really deprecated -[13:07:21] Ideal would be, if the board -understood all kinds of html... -[13:07:25] especially things like: -[13:07:42] font-weight -[13:07:45] text-decoration -[13:07:51] font-variant -[13:07:56] color -[13:08:00] background-color -``` -A: Currently [some GitHub markdown](https://guides.github.com/features/mastering-markdown/) -works. It needs some research is it possible -to enable more html, or have visual editor -elsewhere. - - -### Q: Wekan on mobile Chrome? -``` -[15:49:52] xet7, I saw your answer to the -mobile card question -[15:50:13] it really won't work in Chrome -[15:50:19] everyone in the organization -has the same issue -[15:50:27] every phone, every tablet -[15:50:40] Chrome in the newest version, -even in the dev-version -``` -A: Please try newest Wekan. - -### Q: Older Node version? - -``` -[16:47:42] Is Wekan compatible with older -versions of Node? -``` -A: You can try, but older Node versions have -security issues that are fixed in newest Node version. - -### Q: Wekan crashing? - -``` -[15:20:04] hi -[15:20:12] xet7, are you there by any chance? -[15:20:18] I told you about my problems with -wekan -[15:20:23] now, at this very moment, I am having -one -[15:20:30] Normally I just restart the board to -keep working -[15:20:48] but it's a Saturday, so nobody -currently works on the board, and I can let the board -struggle without restarting it -[15:20:54] this gives us time for finding -out what's wrong -[15:21:21] the error in the browser reads: -[15:21:22] --- -[15:21:24] This page isn’t working -[15:21:24] ***.***.***.*** didn’t send any data. -[15:21:24] ERR_EMPTY_RESPONSE -[15:21:25] --- -[15:21:29] ^ I masked the IP -[15:22:03] I added many cards to the board, and -I had no idea, that the server died in the background -[15:22:15] so, if I restart the board now, -I will loose all the cards which I added -[15:23:21] I heavily depend on wekan for -my life, and it scares me when it glitches -[15:23:31] especially since the board -struggles so much so often -[15:23:49] also an issue is, when I add -cards, and then they vanish -[15:24:09] that happened a short while -ago - I added 2 cards, then they were gone -[15:44:02] xet7, I realized, the -server is not dead. -[15:44:08] It's just very, very, -very slow -[15:44:21] after like... an hour... -a board loaded -[15:44:31] most cards are lost, though -[15:44:55] I don't know how to -bugfix this -``` -A: You should upgrade to newest Wekan, or -be online when xet7 is online to debug. -xet7's own boards are not crashing. - -*** -### Q: Unsaved changes indicator? - -A: Added Feature Request https://github.com/wekan/wekan/issues/2537 - -*** -### Q: Wekan on Sandstorm features? -At IRC #sandstorm -``` -[20:40:57] are desktop notifications from -wekan possible in sandstorm? I see references to -notifications throughout the code, but haven't -been able to answer this question on my own. Thanks. -[21:05:22] pwa2: Wekan does not yet have push -notifications https://github.com/wekan/wekan/issues/2026 , -sometime they will be added. I don't know yet would -they work on Sandstorm, because I can't test yet. -[21:11:38] @xet7 thanks! -[21:12:11] :) -[21:16:59] i've read the issue reports regarding -email notifications in wekan, where they have to be -configured both at the board level and at the member -settings level. However, the wekan app in sandstorm does -not have the "Edit Notifications" menu item. So are -email notifications from Wekan under Sandstorm not -implemented either? Or is there some configuration -switch someplace? "Change Password" and -"Change Language" are also missing from Member Settings -under Sandstorm, which makes some sense. -[21:19:58] pwa2: I need to add code to Wekan -to enable Wekan to send email at Sandtorm -https://github.com/wekan/wekan/issues/2208#issuecomment-469290305 -[21:20:52] pwa2: Sandstorm apps need special -code for accessing outside secure sandboxed grain -[21:21:57] @xet7 thanks again! -[21:23:10] pwa2: It's not possible to change -password in Sandstorm, because Sandtorm does not store -passwords at all, it has 3rd party auth -Google/LDAP/Passwordless etc. I only recently enabled -multiple boards, not all of user management is -implemented yet https://github.com/wekan/wekan/issues/2405 -[21:23:44] pwa2: I will fix all those, -but it takes some time to develop. -``` - -*** -### Q: Board crashes? - -``` - Board crashes on server that has Wekan and RocketChat installed. - /var/log/syslog contains a lot -``` -A: Well, what does /var/log/syslog contain? -Without that info it's kind of hard to debug. - -You could try export that board to Wekan JSON, and then import that Wekan JSON. - -I do have server at AWS LightSail that has 4 GB RAM and 60 GB SSD, -running [Snap versions of Wekan and RocketChat installed this way](OAuth2) -on same server, and it does not crash. - -BTW, I did yesterday release [Wekan v2.95 with these new features](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v295-2019-07-01-wekan-release). - -*** -### Q: Board cleanup? - -``` -[18:02:20] hi -[18:02:29] May I please ask for help bugfixing a wekan board? -[18:02:53] There are many boards with many cards, -and since about 2 days, everything got very, very, very slow -[18:03:06] we must restart the board every -2 minutes to be able to access it -[18:03:11] it's a nightmare -[18:03:23] you add a card / comment, just to realize, -it has not been saved to the server -[18:03:38] the board has stopped working after over 1,5 years -[18:17:03] I'm AFK for a while, but I will check -for answers a little later -[23:44:45] is there still nobody around? -[02:25:22] is anyone here? -[02:25:24] xet7? -[02:25:27] anyone? -``` -A: I was at meeting or sleeping when you asked. When I came back to IRC you were not online. Anyway, you can [make backup](Backup) and do some [cleanup](https://github.com/wekan/wekan-cleanup) to delete 1,5 years worth of activities etc. Next time, if you have questions, you get faster answers at [GitHub issues](https://github.com/wekan/wekan/issues), because I get email notifications of all new issues and comments on issues. - -*** -### Q: Rules as code? - -``` -[23:40:03] Hey does anyone know -if it is possible to code in rules (as opposed to using the front end UI)? -``` -A: Not yet. There are [Rules issues](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+rules+label%3AFeature%3ACards%3AIFTTT-Rules) about Rules variables. If you have ideas how to make translated Rules UI have also translated code, please add new GitHub issue Feature Request or PR. - -*** -### Q: LDAP Bug: [ERROR] InvalidCredentialsError: 80090308: LdapErr: DSID-0C090400 - -``` -[14:58:26] hello everyone. I am getting this erro: -[14:58:30] Error -[14:58:31] [ERROR] InvalidCredentialsError: 80090308: -LdapErr: DSID-0C090400, comment: AcceptSecurityContext error, data 52e, v1db1 -[14:59:19] can someone check this and tell me if I did -something wrong? : https://paste.ee/p/uuUDb -[14:59:33] The credentials are correct -[15:26:09] This is the error in my syslog: https://paste.ee/p/mJdtL -``` -A: https://github.com/wekan/wekan/issues/2490 - -### Q: LDAP Group Filtering - -``` -[13:17:27] hi everyone -[13:18:07] was wondering if i could get some help regarding ldap -group filtering .. documentation is pretty much inexistent -[13:19:58] in particular, what exactly are the keys -ldap-group-filter-member-attribute , -ldap-group-filter-member-format and ldap-group-filter-member-name -supposed to point to -[13:21:15] ldap-group-filter-member-attribute is it -the membership attribute which is part of the user entry, -or is it the member list attribute in the group entry? -[13:21:59] ldap-group-filter-member-format ... -this one i have no idea what might be -[13:23:20] and finally, ldap-group-filter-member-name -is it and enumeration of the group names -(related to ldap-group-filter-member-attribute probably) -which are allowed to login? -[13:25:30] I REALLY would like to limit my groups -available since i have some very large groups .. up to 15k users -``` -A: https://github.com/wekan/wekan/issues/2356#issuecomment-494573761 - -### Q: Copying Checklists? - -``` -[09:25:51] I have now about one year of exp with Wekan -usage somewhat daily, and it has become my favourite productivity tool. -[09:27:36] Initially we used it with Sandstorm, but -because of closed sandbox model we changed into standalone snap install. -[09:28:02] Ldap integration works as expected -[09:34:42] Only situation where I end up using tedious -copy & paste string transferring is when moving checklists -from one card to another. -[12:49:45] sfielding: click card hamburger menu => - Copy Checklist Template to Many Cards -``` - -### Q: LDAP? - -A: [LDAP for Standalone is now available](LDAP). - -``` -[17:56:10] Hi! I'm trying to setup Wekan with LDAP, -but can't seem to get it to work. -Where could I found logs for why LDAP is not working? -[17:56:18] does not seem to send out any LDAP packets -[17:58:31] oh, it does not do anything -``` - -Please see is there existing issues at [LDAP Bugs and Feature Requests](https://github.com/wekan/wekan-ldap/issues), or add a new one. - -### Q: Is there in Wekan: My Cards: List of all boards/lists/cards for every card where person is assigned to card ? -``` -[15:25:23] If I have a Wekan board per project, with people assigned -cards in multiple projects, is there a way to provide a list of the tasks for -a person across all of their projects? -``` - -A: Yes. Click right top your username / My Cards. - -### Q: Wekan Internal Server Error - -2018-11-09 - -``` -[20:45:22] hi -[20:45:35] Before I came here, I tried to find a solution myself -[20:46:17] e.g. I read the error log, read the installation troubleshooting docs, did research, and played around with the SMTP settings -[20:46:52] then I joined #sandstorm but nobody replied -[20:47:07] The problem: -[20:47:31] I always get an "Internal Server Error" when I try to send me the registration email -[20:49:15] https://filebin.net/11q54qsyd7rigpiq/internal_server_error.png?t=ziblx18b -[20:49:28] in theory, sandstorm + wekan is installed -[20:49:35] but, in reality I can not access it -``` - -A: See 4) at https://github.com/wekan/wekan/wiki/Adding-users . This is Stanalone Wekan (Snap, Docker, Source) email setting. This has nothing to do with Sandstorm. - -*** - -### Q: 2018-11-07 Answer speed -``` -[12:50:46] hey -[12:53:45] I won't whine, because I know sometimes it is -hard to answers to user's questions, but I'm here -since several days, I see that other users asks some things, -and no one is answering -[12:58:11] I think that you could close this channel in fact, -it will make win time for users -[12:58:24] and again I don't whine, thanks for the great Wekan :) -``` -A: - -- Fastest: If you want fast answers, get [Commercial Support](https://wekan.team/commercial-support/). -- Medium speed: If you have time to wait, [add new GitHub issue](https://github.com/wekan/wekan/issues). -- Slow: [Wekan Community Chat with webbroser and mobile Rocket.Chat](https://chat.vanila.io/channel/wekan) -- Slowest: If you want to chat on IRC, please stay at IRC idling, and ask question again also at some other day. Sometimes there is Internet connectivity issues, if it looks like xet7 is not online. IRC is very nice, some Wekan users prefer it. Answers to IRC questions are added to this wiki page, because most coming to IRC channel leave immediately, and don't wait for answer. - -*** - -### Q: SMTP sending to own domain but not Gmail -``` -[16:18:47] Does anybody have an idea why I can send e-mail from Wekan -to my personal domain, but not to a Gmail address? -[17:34:16] And now Wekan doesn't actually work. I set it up -from Snap on Ubuntu 18.04. -[17:34:32] (Wekan doesn't work after I reboot Ubuntu) -[17:38:51] Like, I get 502 Bad Gateway from my nginx reverse proxy -``` - -A: Did you set your domain SPF records (as TXT records) and DKIM records on your domain that your SMTP server uses? Problem is not in Wekan, it's your SMTP server. For example AWS SES works. Also see [Troubleshooting Email](Troubleshooting-Mail). - -*** - -### Q: Integrating Wekan -``` -[03:32:12] Hi can anyone tell me how to integrate wekan in -other applications -[03:32:50] i am want to integrate it in QGIS for task management -[03:33:01] *i want -``` -A: Use [Wekan REST API](REST-API). For example, see [Wekan Gogs integration](https://github.com/wekan/wekan-gogs). You can also use [Outgoing Webhooks](Outgoing-Webhook-to-Discord) to send data to some Incoming Webhook. There is also [IFTTT Rules](IFTTT) for some automations. - -*** - -### QA: Rescuing Subtask board -``` -[18:33:29] hello I have a wekan board that -never loads, I just get the spinner. all the other -boards are working fine. This happened after we moved -some subtasks from a subtask board to the main board. -any tips would be appreciated. thanks. -[18:33:58] wekanuser: What Wekan version? -[18:34:45] Can you move subtasks back to subtask board? -[18:42:02] v 1.55.0. re: move tasks back to -subtask board - I can't, since the parent board will not load. -[18:42:35] - I was in subtask board, and moved -manually each subtask over to parent board. Then went to -parent board and it will not load. -[18:43:28] - the cards would not load on -the main board, but I was able to make an "export" -of the board from the GUI and re-imported it, to another -board but only a fraction of the stories and swimlanes were there. -[18:43:58] - when I accessed the parent board -via the rest api, I see all my cards, looks like everything is there -[18:44:07] - so something is hanging on loading the board -[18:44:32] Do you still need subtasks on board? -[18:45:09] no, since the subtasks on the subtasks -board have been moved, there should be nothing "linking" there -[18:46:11] Do you see any subtask related in -exported JSON file? So you could remove subtasks from it before importing? -[18:47:06] thanks, I will check -[18:47:34] Does the exported JSON file have all data of -that board? You could check do you see same as with API -[18:47:56] You can also create new board that is -similar structure of your exported board, and compare structure -[18:48:52] Also please add new issue to -https://github.com/wekan/wekan/issues about what happened, -so somebody can think how to prevent that happening. -[18:52:53] it appears the json file has all the data -[18:54:04] Nice :) Then you can compare it with similar -working board, what is different -[18:54:39] Does it have any custom fields? -[18:55:02] sometimes removing custom fields makes import work -[18:56:05] yes there are custom fields, I will consider -trying that. re: removing subtasks, you mean the subtask cards? -or the subtask references in parent cards? -[18:56:27] Try first remove subtask references -[18:56:49] compare to other exported board JSON that -does not have any subtasks -[18:57:38] You don't need to try removing -custom fields yet, there has been some custom fields fixes -[18:58:14] I would think that when there is -references to not existing subtasks then that could bring those problems -[19:10:37] thanks, working on remove subtask refs' -[19:12:31] I assume that is making -parentId :"" empty, -as I see only subtasks referencing parents, -not parents referencing subtasks -[21:54:39] update: process of elimination -lead to the import board working if I remove all all -activities from the json file before import -[21:56:47] Nice :) Then I think I should not -include activities in export. -[22:03:06] is there an option to exclude -things from export? I only see the "BUTTON" that does an export -[22:06:16] not yet -[22:07:19] I am probing for possible bad activity item -[22:08:00] Probably some activity types are not imported correctly -[19:22:59] thanks for the help yesterday, -board has been restored. I will document my issue in a real ticket, -hopefully it will help someone else. Thanks again -[19:23:13] :) -``` - -*** - -### QA: Wekan in iFrame -``` -[17:42:12] Hi, I want to embed my Kanban -from wekan in my website using iframe. Does Wekan -support this feature? -[18:13:59] siqueira: Yes, set trusted-url to -your web address that iframes Wekan -https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys -[18:15:35] siquiera: If you have problems with browser -javascript console, or something not working, you can -also set browser-policy-enabled='false' that enables -all iframing - but that has a little less security -[18:18:13] siquiera: Problem with iframing -Wekan is that link to card does not work well. -For that it's better to have Wekan in sub-url, and -add "iframe" replacing HTML/CSS at beginning of -body tag, and at end of body tag, but that -feature is not yet in Wekan, I'm currently developing it. -[19:25:07] xet7, Thanks a lot -for the information! I just want to have my -public tasks on my website. I think the -browser-policy-enabled can solve my problem, -until I wait for the new feature. Thanks :) -[19:25:51] siqueira: You can set -board as public, and provide that public link in iframe. -[19:27:32] I will try it :) -``` -A: Currently having Wekan in iframe is broken, because browser APIs changed. See [this issue for progress](https://github.com/wekan/wekan/issues/3875). - - -*** - -### Q: Docker reverse proxy - -``` -yogab> Hi! How are you today ? Can i ask -a docker x reverse proxy x wekan question here ? -``` - -A: Hmm, it seems you did not ask. Just guessing, maybe it's about [Traefik reverse proxy and Docker](Traefik-and-self-signed-SSL-certs). - -*** - -## Still reading? - -Wow, you are so cool ! You gonna be an expert guru soon. - -Check out here for more wild stuff: https://github.com/wekan/wekan/wiki - -There is: -- Info about translations, dev stuff, changelog, and huge amount of Wekan features. \ No newline at end of file diff --git a/docs/FAQ/NOT-related-to-Wekan.md b/docs/FAQ/NOT-related-to-Wekan.md deleted file mode 100644 index a2fb56dd6..000000000 --- a/docs/FAQ/NOT-related-to-Wekan.md +++ /dev/null @@ -1,38 +0,0 @@ -Also: [Hall of Shame: Fake companies](https://github.com/wekan/wekan/wiki/Hall-of-Shame) - -## These are NOT in any way related to WeKan - -### Birds -- [Weka](https://en.wikipedia.org/wiki/Weka) - -### Music -- [Wekan - Skid](https://www.youtube.com/watch?v=XkqabSLgfxQ) -- [Wekan Reworked Skid (Touché Remix)](https://www.youtube.com/watch?v=SAOfzuwOtHg) -- [Love & Dream Trance Progressive Mix By Harris Wekan](https://www.youtube.com/watch?v=iUgerssvY5U) -- [Trance Electro By Harris Wekan](https://www.youtube.com/watch?v=uop8DwsC7W0) -- [Trance Sympho by Harris Wekan](https://www.youtube.com/watch?v=4ajJae6vO6Y) -- [Trance Techno House Mix By Harris Wekan](https://www.youtube.com/watch?v=YEfye_IJLXM) -- [Harris Wekan Vs ULTRAVOICE](https://www.youtube.com/watch?v=-NEnLzH-DTY) -- [Vegas Acceptable In The 80's Mashup Remix By Harris Wekan](https://www.youtube.com/watch?v=_wiMZ0U0uIY) -- [The Beatles - We Can Work it Out](https://www.youtube.com/watch?v=Qyclqo_AV2M) -- [WeKaN- Zatańcz Dziś Dla Mnie - (Karaoke) - NOWOŚĆ 2015](https://www.youtube.com/watch?v=JrhDvcF8tBo) -- [GWEWEKA BY JOY TENDO MATA@GOSPELMODES](https://www.youtube.com/watch?v=ak-6NC-2AJ8) -- [APOSTLE JONATHAN GWE WEKKA OFFICIAL VIDEO FEELINGZ 256 FILMZ PRODUCTIONZ](https://www.youtube.com/watch?v=oJhwgUIsfX0) -- [Bunda Yang Berduka - Agung Weka & St. Petrus 1 Choir](https://www.youtube.com/watch?v=yEtVcdj5D50) -- [Richard Ronald Wekan](https://www.youtube.com/channel/UCL_DFLxVEby7MkuyTQ7W0hg) -- [Weka Waka - Ouma Omore](https://www.youtube.com/watch?v=3FXPmRs6rDM) -- [WEKA WEGA by joyce irungu (Official video 2018) skiza code 8633220](https://www.youtube.com/watch?v=YpIuFASiK5M) -- [Gwe Weka Ulala Spice Diana Music](https://www.youtube.com/watch?v=-t2udMMsqJo) -- [Dangdut New Weka Music - Egois - Yuni - Live Gabus - RJM AUDIO](https://www.youtube.com/watch?v=leRfhAcYqHE) - -### Village Promotion -- [Wekan Village Promotion](https://www.youtube.com/watch?v=buXuTRTysN4) - -### Machine Learning Environment -- [Weka](https://en.wikipedia.org/wiki/Weka_(machine_learning)) - -### Kansas -- Kansas Sampler Foundation https://www.kansassampler.org/wekan/ - -### Drilling -- https://www.kopadi.fi/fi/timanttityokalut/poraus/timanttiporakoneet/weka-dks-32-timanttiporakone/ diff --git a/docs/FAQ/Press.md b/docs/FAQ/Press.md deleted file mode 100644 index 29ccb5fa1..000000000 --- a/docs/FAQ/Press.md +++ /dev/null @@ -1,59 +0,0 @@ -# In English - -### News about Wekan - -* [Wekan v1.0 relased 2018-05-21](https://blog.wekan.team/2018/05/wekan-v1-00-released/index.html), link to it also at [HN](https://news.ycombinator.com/item?id=17120252) - -* [Hacker News 2018-05-12: Myth of Dying Programming Language and Framework](https://news.ycombinator.com/item?id=17054264) - -* [Hacker News 2018-05-12: Upcoming Wekan v1.00 and Platforms](https://news.ycombinator.com/item?id=17054245) - -* [Hacker News 2018-04-07: Ask HN: Is Meteor.js dead?](https://news.ycombinator.com/item?id=16782266) - xet7 did answer about releasing Wekan v0.81 at 2018-04-10, and Wekan being used in companies that have thousands of users, so Meteor.js is not dead. - -* [Hacker News 2018-04-02: Show HN: See GitHub issues on a Kanban board (kaizenboard.xyz)](https://news.ycombinator.com/item?id=16732329) - has comments by xet7, current maintainer of Wekan - -* [Hacker News 2018-02-20: Transparency](https://news.ycombinator.com/item?id=16421782) - -* [Hacker News 2018-02-15: Time Well Spent](https://news.ycombinator.com/item?id=16382544) - -* [Hacker News 2018-02-13: Benefits of contributing your features to upstream Wekan](https://news.ycombinator.com/item?id=16366387) - -* [Hacker News 2018-01-23: Wekan progress on x64 and ARM](https://news.ycombinator.com/item?id=16209090) - -* [Hacker News 2017-12-23: 2 years of Wekan: what we archieved](https://news.ycombinator.com/item?id=15994145) - -* [Hacker News 2017-11-04 Ask HN: Is Meteor.js still a thing?](https://news.ycombinator.com/item?id=15624623) - has links to Wekan as Meteor.js project - -* [Hacker News 2017-08-17 Wekan: An open-source Trello-like kanban](https://news.ycombinator.com/item?id=15039587) - has comments by xet7, current maintainer of Wekan - -### YouTube - -Maxime Quandalle, original author of Wekan - -* [Wekan: The Open-Source Trello-like Kanban 2015-12-03](https://www.youtube.com/watch?v=N3iMLwCNOro) - -* [Wekan (ex-LibreBoard= - OuiShare Labs Camp #3](https://www.youtube.com/watch?v=iTQt8YitlMA) - -### Upcoming Wekan Platforms - -* [EthKan](https://github.com/EthKan) - -* [Friend](Friend) - -# In Spanish - -* Linuxaditos.com 2018-05-27 [Wekan: una aplicación para la gestión de los flujos de producción](https://www.linuxadictos.com/wekan-una-aplicacion-para-la-gestion-de-los-flujos-de-produccion.htm) -* 2017-12 [YouTube: Alternativa a Trello Wekan - Eugenio Chaparro](https://www.youtube.com/playlist?list=PLCTD_CpMeEKTcv63j09oPz0L4JHHSNahp) - -# In German - -* Shorter mention: [Heise.de 2017-20-25 Open Source und lokal statt Cloud: Wekan als Trello-Alternative]( https://www.heise.de/ix/meldung/Open-Source-und-lokal-statt-Cloud-Wekan-als-Trello-Alternative-3871747.html) -* Above page has link to longer article: [Heise.de 2017-10 Tools und Tipps: Trello-Alternative Wekan](https://www.heise.de/ix/heft/Kartendeck-3838575.html) - -# In French - -### YouTube - -Maxime Quandalle, original author of Wekan - -* [Le web temps-réel avec Meteor - Maxime Quandalle](https://www.youtube.com/watch?v=ZZfiQXkssH0) \ No newline at end of file diff --git a/docs/FAQ/Requirements.md b/docs/FAQ/Requirements.md deleted file mode 100644 index c929bff5e..000000000 --- a/docs/FAQ/Requirements.md +++ /dev/null @@ -1 +0,0 @@ -WeKan Requiremens are at https://wekan.github.io/install/ \ No newline at end of file diff --git a/docs/FAQ/Roadmap.md b/docs/FAQ/Roadmap.md deleted file mode 100644 index 1847c4745..000000000 --- a/docs/FAQ/Roadmap.md +++ /dev/null @@ -1,53 +0,0 @@ -Please read Etiquette at [FAQ](FAQ) and [Developer Documentation](Developer-Documentation). - -# New Roadmap - -[New Roadmap is at GitHub Projects](https://github.com/wekan/wekan/projects/2). xet7 is testing functionality of GitHub Projects vs this wiki vs Wekan board where Roadmap previously was. Sometime Roadmap moves back to Wekan board. - -*** - -# Old Roadmap below, not up-to-date - -# In progress - -GitHub Username | Feature | Status | Sponsor ------------- | ------------- | ------------ | ------------ -[xet7](https://github.com/xet7) | [Calendar View](https://github.com/wekan/wekan/issues/808) | In Progress | [Bountysource](https://www.bountysource.com/issues/41780513-add-feature-calendar-view) -[GhassenRjab](https://github.com/GhassenRjab) | [Search](https://github.com/wekan/wekan/issues/552) | In Progress | [Bountysource](https://www.bountysource.com/issues/32132712-feature-request-search-items) and nm11 -[Serubin](https://github.com/Serubin) | [Top-level projects](https://github.com/wekan/wekan/issues/641) | In Progress | [Bountysource](https://www.bountysource.com/issues/36035028-top-level-projects) -[xet7](https://github.com/xet7), [thuanpq ](https://github.com/thuanpq) | [Teams/Organizations similar to Trello](https://github.com/wekan/wekan/issues/802) . Beginnings of user admin [already implemented](https://github.com/wekan/wekan/pull/1325) at [Wekan v0.55](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v055-2017-11-19-wekan-release) | In Progress | [FUUG.fi](https://fuug.fi/2017/wekan-kanban-taulun-perustoimintojen-kehitys-alkuun/) and [Bountysource](https://www.bountysource.com/issues/41780380-add-feature-teams-organizations-similar-to-trello) -[andresmanelli](https://github.com/andresmanelli) | [Gogs issue/commit integration](https://github.com/wekan/wekan/issues/253) | [Part 1 in Wekan already](https://github.com/wekan/wekan/pull/1189) | -[papoola](https://github.com/papoola) | [Custom Fields](https://github.com/wekan/wekan/issues/807) | In Progress | -[mfshiu](https://github.com/mfshiu) | [Custom Fields, Moving card on mobile phone, Filter cards by keyword](https://github.com/wekan/wekan/issues/1022#issuecomment-337646110), Integrate Wekan with [RIOT](http://riot.im) so user can be notified immediately on cell phone when Wekan cards change | Works, no pull request yet - -# Not started yet - -GitHub Username | Feature | Status | Sponsor ------------- | ------------- | ------------ | ------------ -[xet7](https://github.com/xet7) | [Add direct SQLite/MySQL/PostgreSQL/etc support](https://github.com/wekan/wekan/issues/787) | Not started yet | -[xet7](https://github.com/xet7) | Have all settings (SMTP etc) in environment variables or Docker Compose file, no need to setup manually at Admin Panel | Not started yet | -[xet7](https://github.com/xet7) | [LDAP for Standalone](https://github.com/wekan/wekan/issues/119) | Not started yet | [FUUG.fi](https://fuug.fi/2017/wekan-kanban-taulun-perustoimintojen-kehitys-alkuun/) and d -[xet7](https://github.com/xet7) | [IFTTT support](https://github.com/wekan/wekan/issues/1160) | Not started yet | [Bountysource](https://www.bountysource.com/issues/47991500-feature-request-if-this-then-that-style-support-i-e-recurring-cards) -[xet7](https://github.com/xet7) | [Board templates](https://github.com/wekan/wekan/issues/786) | Not started yet | [Bountysource](https://www.bountysource.com/issues/41724710-add-feature-board-templates) -[xet7](https://github.com/xet7) | [Scheduling events](https://github.com/wekan/wekan/issues/1101) | Not started yet | [Bountysource](https://www.bountysource.com/issues/46762619-scheduling-events) -[xet7](https://github.com/xet7) | [Better mobile web support](https://github.com/wekan/wekan/issues/953) | Not started yet | [FUUG.fi](https://fuug.fi/2017/wekan-kanban-taulun-perustoimintojen-kehitys-alkuun/) and
[Bountysource](https://www.bountysource.com/issues/43608850-hard-sometimes-impossible-to-use-wekan-on-mobile-android-ios-because-of-ui-ux-issues) | In progress | [FUUG.fi](https://fuug.fi/2017/wekan-kanban-taulun-perustoimintojen-kehitys-alkuun/) and [Bountysource](https://www.bountysource.com/issues/41780380-add-feature-teams-organizations-similar-to-trello) -[xet7](https://github.com/xet7) | [Advanced WebHooks with Mattermost](https://github.com/wekan/wekan/issues/1297) | Not started yet | d -[xet7](https://github.com/xet7) | [Add Company logo above Wekan logo at login page, with custom CSS.](https://github.com/wekan/wekan/issues/1196) | Not started yet | d -[xet7](https://github.com/xet7) | [Wekan <=> MongoDB <=> ToroDB => MySQL read-only mirroring](https://github.com/torodb/stampede/issues/203) | Not started yet. There is [PosgreSQL version](https://github.com/wekan/wekan-postgresql) already. | -[xet7](https://github.com/xet7) | Update wiki to have newest Features, Integrations, Team etc info | Not started yet. | -[xet7](https://github.com/xet7) | [Copy URL of card](https://github.com/wekan/wekan/issues/1188) | At Sandstorm: Not started yet. | -[xet7](https://github.com/xet7) | A bot that responds to translation pull requests with link to [translations at Transifex](https://app.transifex.com/wekan/), etc documentation. Also other maintainer routine tasks. | Not started yet. | - -Also see [other bounties at Bountysource](https://www.bountysource.com/teams/wekan) - -## Done - -GitHub Username | Feature | Status | Sponsor ------------- | ------------- | ------------ | ------------ -[xet7](https://github.com/xet7) | Added fixes for [Excessive CPU usage](https://github.com/wekan/wekan-mongodb/issues/2) from various contributors to encourage [mfshiu](https://github.com/mfshiu) to contribute his Wekan features in progress | Done | -[GhassenRjab](https://github.com/GhassenRjab), [thuanpq ](https://github.com/thuanpq) | [Move or copy cards from one board to another on Standalone](https://github.com/wekan/wekan/issues/797) | Done | [Bountysource](https://www.bountysource.com/issues/41780302-add-feature-move-or-copy-cards-from-one-board-to-another) -[xet7](https://github.com/xet7) | [Copy URL of card](https://github.com/wekan/wekan/issues/1188) | Done at Standalone. | -[xet7](https://github.com/xet7) and [ocdtrekkie](https://github.com/ocdtrekkie) | [Newest Wekan for Sandstorm](https://github.com/wekan/wekan/issues/799) | Done | -[GhassenRjab](https://github.com/GhassenRjab) | [Import activities from Trello and Wekan](https://github.com/wekan/wekan/pull/1187) | Done | -[soohwa](https://github.com/soohwa) | [REST API : Better error output](https://github.com/wekan/wekan/issues/1037#issuecomment-301271356)| Done | -[brooksbecton](https://github.com/brooksbecton) | [Swipebox for attachment images](https://github.com/wekan/wekan/issues/201) | Done | \ No newline at end of file diff --git a/docs/FAQ/Team.md b/docs/FAQ/Team.md deleted file mode 100644 index 4e266c5b4..000000000 --- a/docs/FAQ/Team.md +++ /dev/null @@ -1,78 +0,0 @@ -# Current Team - -GitHub Username | Location | Position | Details ------------- | ------------ | ------------ | ------------ -[xet7](https://github.com/xet7) | Finland | Maintainer since 2016-12 | Source/Docker/Ubuntu snap/VirtualBox releases, testing and merging pull requests, organizing and answering issues, updating wiki and website, some features. - -If anyone finds what issue can be closed, is already fixed, you find how to fix it, or can check with Docker version tags in what version something broke and in next was fixed, please add comment to issue about it. xet7 gets email from every new issue and comment to issue. Pull requests very welcome. Thanks! - -# Current most frequent Testers - -GitHub Username | Location | Position | Details ------------- | ------------ | ------------ | ------------ -[jinthakur](https://github.com/jinthakur) | USA | Contributor | Can help testing bundle on Windows and finding in which Wekan version Docker tag something worked and in next version broke, please tag @jinthakur when that is needed, he saves a lot of time of xet7 -[juliensl](https://github.com/juliensl) | Universe | Contributor | Can help finding in which Wekan version Docker tag something worked and in next version broke, please tag @juliensl when that is needed, he saves a lot of time of xet7 - -# Current most frequent Contributors - -Also, see newest contributors at [ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) - -GitHub Username | Location | Position | Details ------------- | ------------ | ------------ | ------------ -[marc1006](https://github.com/marc1006) | Universe | Contributor | XSS fix, etc many features and fixes -[NicoP-S](https://github.com/NicoP-S) | Germany | Contributor | Added Card voting, fixed Change slug on card rename, etc -[habenamare](https://github.com/habenamare) | Ethiopia | Contributor | Added the 'Currency' Custom Field type, etc -[helioguardabaxo](https://github.com/helioguardabaxo) | Brazilia | Contributor | Added Theme: Modern. Etc. -[CidKramer](https://github.com/CidKramer) | Universe | Contributor | Added Clearblue theme. Etc. -[gvespignani70](https://github.com/gvespignani70) | Universe | Contributor | Added an API to get the cards for a specific custom field value. Etc. -[hgustafsson](https://github.com/hgustafsson) | Universe | Contributor | Alignment and spacing of minicard labels -[GitGramm](https://github.com/GitGramm) | Universe | Contributor | Added dates & assignees to REST API calls, etc -[krupupakku](https://github.com/krupupakku) | Spain | Contributor | Fixed Swimlanes ID missing in new boards. Fixed avatar-image class. Etc. -[wackazong](https://github.com/wackazong) | Universe | Contributor | Fixed Create card does not allow an empty member list. Etc. -[bentiss](https://github.com/bentiss) | Universe | Contributor | Added OpenAPI docs generation, swimlanes etc. -[jimmyjones2](https://github.com/jimmyjones2) | Universe | Contributor | OpenShift template updates -[salleman33](https://github.com/salleman33) | France | Contributor | Created Wekan LDAP code. Etc. -[Akuket](https://github.com/Akuket) | Universe | Contributor | Added salleman33's LDAP code to Wekan. Etc. -[justinr1234](https://github.com/justinr1234) | Universe | Contributor | Added more MongoDB indexes for huge Wekan speedup. Added prettier that formats code style. Etc. -[road42](https://github.com/road42) | Germany | Contributor | Devcontainer etc. -[urakagi](https://github.com/urakagi) | Taiwan | Contributor | Fixed app hang. [In the filter menu, 1) Turning on "show archive" will request archived lists and show them on the ListView. 2) Turning on "hide empty lists" will hide empty lists on the ListView](https://github.com/wekan/wekan/pull/2632). Etc. - -*** - -# Previous Contributors - -This page lists some of the contributors that have donated their time, resources or code to the project. This list is not up-to-date. - -GitHub Username | Chat Username | Location | Position | Details ------------- | ------------- | ------------ | ------------ | ------------ -[brymut](https://github.com/brymut) | Kenya | Contributor | Added export CSV/TSV. Etc. -[lkisme](https://github.com/lkisme) | - | China | Contributor | [Admin Panel](https://github.com/wekan/wekan/pull/871) -[jymcheong](https://github.com/jymcheong) | Universe | Contributor | Added Card Open Webhook. -[Serubin](https://github.com/Serubin) | serubin | Universe | Contributor | [Fix Double slash problem](https://github.com/wekan/wekan/pull/932) -[liske](https://github.com/liske) | Germany | Contributor | Added card REST API fix, card time fix etc. -[rhelsing](https://github.com/rhelsing) | ryan.helsing | USA | Contributor | [Comment permissions](https://github.com/wekan/wekan/pull/1008) -[BaobabCoder](https://github.com/BaobabCoder) | BaobabCoder | France | Contributor | [Delete List](https://github.com/wekan/wekan/pull/1050) -[whodafly](https://github.com/whodafly) | superfly | USA | Contributor | [Troubleshooting Mail](Troubleshooting-Mail), [Import Checklists from Trello](https://github.com/wekan/wekan/pull/894) -[stephenmoloney](https://github.com/stephenmoloney) | - | Ireland | Contributor | Dockerfile and Travis config, Meteor 1.4 and Node 4.x port -[GhassenRjab](https://github.com/GhassenRjab) | ghassen.rjab | Universe | Contributor | [Fix Export Board](https://github.com/wekan/wekan/pull/1067), [Fix "W" shortcut](https://github.com/wekan/wekan/pull/1066), [Sort languages](https://github.com/wekan/wekan/pull/1070), [Add Breton language name](https://github.com/wekan/wekan/pull/1071), [Edit card description with invalid markdown](https://github.com/wekan/wekan/pull/1073), [Fix importing Trello board](https://github.com/wekan/wekan/pull/1080), [Import due date from Trello](https://github.com/wekan/wekan/pull/1082), [Import Wekan board](https://github.com/wekan/wekan/pull/1117), [Export and import attachments as base64 encoded files](https://github.com/wekan/wekan/pull/1134), [Export and import checklists](https://github.com/wekan/wekan/pull/1140), [Export and import boards in Sandstorm](https://github.com/wekan/wekan/pull/1144), [FIX SECURITY ISSUE Files accessible without authentication](https://github.com/wekan/wekan/issues/1105) -[nztqa](https://github.com/nztqa) | - | Universe | Contributor | [Delete card when deleting list](https://github.com/wekan/wekan/pull/1054), [Disable unnecessary link feature](https://github.com/wekan/wekan/pull/1042), [Fix IE 11 drag board to scroll](https://github.com/wekan/wekan/pull/1052), [Fix filter reset on moving between starred boards](https://github.com/wekan/wekan/pull/1074), [Fix Admin Panel link available to all users, only link is hidden](https://github.com/wekan/wekan/pull/1076), [Fix Case-sensitive email handling](https://github.com/wekan/wekan/issues/675), [Fix admin panel route for subfolder](https://github.com/wekan/wekan/pull/1084), [Fix i18n route for subfolder](https://github.com/wekan/wekan/pull/1085), [Fix incorrect attachment link with subfolder in the url](https://github.com/wekan/wekan/pull/1086), [Fix link to card](https://github.com/wekan/wekan/pull/1087), [Fix duplicate id generation](https://github.com/wekan/wekan/pull/1093), [When finished input of checklist item, open new checklist item](https://github.com/wekan/wekan/pull/1099), [Fix Possible to add empty item to checklist](https://github.com/wekan/wekan/pull/1107), [Improve UI design of checklist items](https://github.com/wekan/wekan/pull/1108), [Outgoing Webhooks](https://github.com/wekan/wekan/pull/1119), [Adding user to board causes node.js to crash](https://github.com/wekan/wekan/issues/1131), [Fix double shashes](https://github.com/wekan/wekan/issues/962), [GitHub Issue template](https://github.com/wekan/wekan/pull/1146), [Fix showing card activity history in IE11](https://github.com/wekan/wekan/pull/1152), [Add display Wekan version number and runtime environment to Admin Panel](https://github.com/wekan/wekan/pull/1156), [Change Email address](https://github.com/wekan/wekan/pull/1161) -[jtickle](https://github.com/jtickle) | - | USA | Contributor | [Fix Double slash problem](https://github.com/wekan/wekan/pull/1114) -[huneau](https://github.com/huneau) | - | Universe | Contributor | REST API, [Console, file, and zulip logger on database changes](https://github.com/wekan/wekan/pull/1010) -[mayjs](https://github.com/mayjs) | - | Universe | Contributor | REST API -[zarnifoulette](https://github.com/zarnifoulette) | - | Universe | Contributor | [REST API: Add PUT method to update a card](https://github.com/wekan/wekan/pull/1095) and [related fix](https://github.com/wekan/wekan/pull/1097), [Fix Activity user messed up when creating a card using the REST-API](https://github.com/wekan/wekan/pull/1116) -[Zokormazo](https://github.com/Zokormazo) | Zokormazo | Spain | Contributor | [Add isAdmin to user Schema](https://github.com/wekan/wekan/pull/970), [Add TLS toggle to Admin Panel SMTP setting](https://github.com/wekan/wekan/pull/960) -[shtefcs](https://github.com/shtefcs) | kinder | Universe | [Vanila](https://vanila.io) Founder | [Chat](https://chat.vanila.io/channel/wekan), growth hacking -[jelenajjo](https://github.com/jelenajjo) | jelena | Universe | [Vanila](https://vanila.io) Web Developer | [Themes](https://github.com/wekan/wekan/issues/781), upcoming new website -[dwrensha](https://github.com/dwrensha) | - | USA | [Sandstorm](https://sandstorm.io) Developer | Packaging Wekan releases for Sandstorm -[kentonv](https://github.com/kentonv) | - | USA | [Sandstorm](https://sandstorm.io) Developer | [Cap’n Proto](https://capnproto.org) and [node-capnp](https://github.com/kentonv/node-capnp) -[ocdtrekkie](https://github.com/ocdtrekkie) | ocdtrekkie | USA | [Sandstorm](https://sandstorm.io) user from beginning of Sandstorm | Testing and accepting Wekan releases for Sandstorm -[JamborJan](https://github.com/JamborJan) | - | Universe | [Sandstorm](https://sandstorm.io) Developer | [Add bigger screenshots](https://github.com/wekan/wekan/pull/940) -[nebulade](https://github.com/nebulade) | - | Germany | [Cloudron](https://cloudron.io) Developer | [Re-enable export](https://github.com/wekan/wekan/pull/1059) -[kubiko](https://github.com/kubiko) | - | UK | [Canonical](https://www.canonical.com) Developer | [snap package](https://github.com/wekan/wekan-snap), [Adding snapcraft build support from source](https://github.com/wekan/wekan/pull/1091), [Use version scriptlet in snap](https://github.com/wekan/wekan/pull/1164) -[whowillcare](https://github.com/whowillcare) | Universe | Contributor | Added WYSIWYG card comment editor that can be turned off with `sudo snap set wekan richer-card-comment-editor='false'`, Global webhook to Admin Panel, etc a lot of features. - -# Previous Team members - -GitHub Username | Location | Position | Details ------------- | ------------- | ------------ | ------------ -[mquandalle](https://github.com/mquandalle) | France | Author | xet7 still has direct contact with him \ No newline at end of file diff --git a/docs/Features/Adding-users.md b/docs/Features/Adding-users.md deleted file mode 100644 index 405f9e5f8..000000000 --- a/docs/Features/Adding-users.md +++ /dev/null @@ -1,32 +0,0 @@ -## Standalone Wekan: Snap, (Docker, Source, VirtualBox) - -1) [Install Wekan Snap](https://github.com/wekan/wekan-snap/wiki/Install) - -2) Go to your Wekan URL like https://example.com/sign-up (your address + /sign-up) - -3) Register your username, email address and password. First registered user will be admin, and next ones normal users. If you want other admins too, you can change their permission to admin at Admin Panel. - -4) **If you get Internal Server Error when creating account, it's because you have not configured email, and you can ignore it. WORKING EMAIL IS NOT REQUIRED. Wekan works without setting up email.** - -If you really want email sending, do for example: -``` -sudo snap set wekan mail-url='smtps://user:pass@mailserver.example.com:457/' -sudo snap set wekan mail-from='Example Wekan Support ' -``` -For more options see [Troubleshooting Email](Troubleshooting-Mail) - -5) Login to Wekan at https://example.com/sign-in (your address + /sign-in) - -6) Click on top right your username / Admin Panel. You can change permissions, name, email address and password in Admin Panel. - -![Admin Panel](https://wekan.github.io/wekan-admin-panel.png) - -7) For registering other users: - -a) Let them self-register, or open webbrowser incongnito window, and register them at https://example.com/sign-up (your address + /sign-up) - -b) If your email works, click Admin Panel / Settings / Registration / [X] Disable self-registration. Then invite new users to selected boards by email address. - -## Deleting Users - -[No delete feature yet](https://github.com/wekan/wekan/issues/1289) \ No newline at end of file diff --git a/docs/Features/Allow-private-boards-only.md b/docs/Features/Allow-private-boards-only.md deleted file mode 100644 index 38ad03329..000000000 --- a/docs/Features/Allow-private-boards-only.md +++ /dev/null @@ -1,3 +0,0 @@ -[Wekan v5.55 and newer](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v555-2021-08-31-wekan-release) - -Allow private boards only \ No newline at end of file diff --git a/docs/Features/Archive-and-Delete.md b/docs/Features/Archive-and-Delete.md deleted file mode 100644 index a5802ef48..000000000 --- a/docs/Features/Archive-and-Delete.md +++ /dev/null @@ -1,31 +0,0 @@ -These are on Standalone Wekan: Snap/Docker/Source/VirtualBox. Some of these are also at Sandstorm Wekan. - -## Move to Archive: Restore possible - -Board => ☰ => Move Board to Archive - -Swimlane => ☰ => Move Swimlane to Archive - -List => ☰ => Move List to Archive - -Card => ☰ => Move Card to Archive - -## Restore Card/List/Swimlane from Archive - -Board => ☰ => Archive => Cards/Lists/Swimlanes Restore (or Delete - but that has no undo!! It's FINAL DELETE). - -## Restore or Delete board - -All Boards => Archive => Restore (or Delete - but that has no undo!! It's FINAL DELETE). - -## Deleting - NO UNDO - -Deleting Board: All Boards => Archive => Delete - -Deleting Card: Card => ☰ => More => Delete (at right bottom corner) - -Deleting List: List => ☰ => More => Delete (at right bottom corner) - -Deleting Swimlane: -1) Swimlane => ☰ => Move Swimlane to Archive -2) Board => ☰ => Archive => Cards/Lists/Swimlanes Restore (or Delete - but that has no undo!! It's FINAL DELETE). diff --git a/docs/Features/Cover.md b/docs/Features/Cover.md deleted file mode 100644 index 065375fe3..000000000 --- a/docs/Features/Cover.md +++ /dev/null @@ -1,11 +0,0 @@ -## Description - -- Cover image = Image that you see first at not yet opened minicard, book, or magazine. -- Minicard = At board, small card, that you have not yet clicked to open card. -- Thumbnail Image = Small Picture of Attachment Image, like at Minicard and Card. -- At opened card, when you click thumbnail, it opens big picture slideshow. - -## Minicard Cover Image and Count of attachments - -Minicard Cover Image and Count of attachments - diff --git a/docs/Features/Custom-Fields.md b/docs/Features/Custom-Fields.md deleted file mode 100644 index 6e2212090..000000000 --- a/docs/Features/Custom-Fields.md +++ /dev/null @@ -1,29 +0,0 @@ -[Custom Fields issue](https://github.com/wekan/wekan/issues/807) - -## To translators, about the word Custom - -See other feature for description of Custom https://github.com/wekan/wekan/wiki/Customize-Translations - -## 1) Click: Board hamburger menu / Custom Fields - -Custom Field Step 1 - -## 2) Click: Create Field, add details and Save - -Custom Field Step 1 - -## 3) Click: Card Details hamburger menu / Edit custom fields - -Custom Field Step 1 - -## 4) Click: Your Custom Field name to insert it to Card - -Custom Field Step 1 - -## 5) Click: Your selection from your Custom Field - -Custom Field Step 1 - -## 6) Custom Field is shown at Minicard and Card Details - -Custom Field Step 1 \ No newline at end of file diff --git a/docs/Features/Custom-Logo.md b/docs/Features/Custom-Logo.md deleted file mode 100644 index 97e019ccd..000000000 --- a/docs/Features/Custom-Logo.md +++ /dev/null @@ -1,24 +0,0 @@ -In Wekan v4.40 and newer: - -- Custom Logo for Login and Top Left Corner. -- Optional link when clicking logo. -- Settings at Admin Panel / Settings / Layout. - -Added [with this commit](https://github.com/wekan/wekan/commit/a7c3317ed696fad8e211b22afbb3012f3a4f2ddb). As you can see from that commit: -- Height 27 px in Top Left Corner Logo. Width auto = automatic. -- Width 300 px in Login Logo. Height auto = automatic. - -Image can be for example jpg/png/gif/svg. - -For those sizes, if logo is a little bigger or smaller, it will be zoomed. - -## Storing logo images elsewhere - -Add image like `https://example.com/logo.png` - -## Storing logos in Wekan - -1. Create board and change it from private to public (visible to everyone at Internet) -2. Add card -3. Add logo images to card as attachment -4. Right click on top image and copy image link to Admin Panel/Settings/Layout/Logo image URL diff --git a/docs/Features/Features.md b/docs/Features/Features.md deleted file mode 100644 index 55e7b50f6..000000000 --- a/docs/Features/Features.md +++ /dev/null @@ -1,228 +0,0 @@ -# Current - -Not all from [CHANGELOG](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) are added to here yet. - -## Kanban - -### WIP Limits - -![Wekan WIP Limits screenshot](https://wekan.github.io/screenshot-wip-limit.png) - -### Boards: List of all your public and private boards, board shortcuts at top of page - -![Wekan boards screenshot](https://wekan.github.io/screenshot-boards.png) - -### Wekan full screen or window on desktop (without browser buttons etc) - -[Info about browser standalone app mode](https://github.com/wekan/wekan/pull/1184) - -### Wekan full screen on mobile Firefox - -[Instructions and screenshot](https://github.com/wekan/wekan/issues/953#issuecomment-336537875) - -### Restore archived board - -![Wekan boards screenshot](https://wekan.github.io/screenshot-restore-board.png) - -### Star board - -![Wekan star board screenshot](https://wekan.github.io/screenshot-star-board.png) - -### Watch board - -![Wekan watch board screenshot](https://wekan.github.io/screenshot-muted-watch.png) - -### Keyboard shortcuts button at bottom right corner - -![Wekan watch board screenshot](https://wekan.github.io/screenshot-keyboard-shortcuts.png) - -### Board menu when clicking 3 lines "hamburger" menu on right - -![Wekan board menu screenshot](https://wekan.github.io/screenshot-board-menu.png) - -### Member setting when clicking your username on top right corner - -![Wekan member settings screenshot](https://wekan.github.io/screenshot-member-settings.png) - -NOTE: Edit Notification duplicate was removed from above menu at https://github.com/wekan/wekan/pull/1948 so Edit Notification is only available at below menu screenshot. - -### Member settings / Edit Notification - -![Wekan edit notification screenshot](https://wekan.github.io/screenshot-member-settings-edit-notification.png) - -### Member settings / Change settings - -![Wekan hide system messages screenshot](https://wekan.github.io/screenshot-member-settings-hide-system-messages.png) - -### Members: Click member initials or avatar - -![Wekan members screenshot](https://wekan.github.io/screenshot-member-filter.png) - -### Members: Click member initials or avatar => Permissions Admin/Normal/Comment only - -![Wekan boards permissions screenshot](https://wekan.github.io/screenshot-member-comment-only.png) - -### Lists: Add, archive and restore archived, delete list. - -![Wekan kanban screenshot](https://wekan.github.io/screenshot-member-settings-archive.png) - -### Cards: Description, Customizable Labels, Checklists, Attachment images and files, Comments. Archive and restore archived card. Delete card. - -Tip: Normally you archive a card so you can restore it back. If you want to delete cards faster, drag cards to new list, and delete that new list. Deleting cannot be undone, more clicks are by design. There was previously easily clicked button to delete a list and people deleted important list by accident, and that bug report was fixed. - -### [Markdown in card description and comments](https://github.com/wekan/wekan/issues/1038) -### [International Date Formatting for Due Date according to language](https://github.com/wekan/wekan/issues/838) - -![Wekan kanban screenshot](https://wekan.github.io/screenshot.png) - -### Cards: Drag and drop images to card. Paste images with Ctrl-V. - -### 1) First attachment: Select Card 3 lines "hamburger" menu / Edit Attachments - -![Wekan kanban screenshot](https://wekan.github.io/screenshot-drag1.png) - -### 2) Select: Clipboard or drag and drop - -![Wekan kanban screenshot](https://wekan.github.io/screenshot-drag4.png) - -### 3) Drag and drop image, or Ctrl-V. - -![Wekan kanban screenshot](https://wekan.github.io/screenshot-drag2.png) - -### 4) Second image attachment and others can be added from Add Attachment button near first attachment. - -![Wekan kanban screenshot](https://wekan.github.io/screenshot-drag3.png) - -### Multi-selection => Checkmark select cards => drag-drop all selected to some list - -![Wekan multi-selection screenshot](https://wekan.github.io/screenshot-multi-selection.png) - -### Filtered views - -![Wekan multi-selection screenshot](https://wekan.github.io/screenshot-filter.png) - -## Authentication, Admin Panel, SMTP Settings - -NOTE: There is user admin as "People" in Admin Panel, but no screenshot here yet. - -* Source and Docker platforms: [Admin Panel](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v0111-rc2-2017-03-05-wekan-prerelease): Self-registration, or change to invite-only and inviting users to boards. SMTP Settings. - -![Wekan Admin Panel registration disable screenshot](https://wekan.github.io/screenshot-admin-panel-registration.png) - -![Wekan Admin Panel email screenshot](https://wekan.github.io/screenshot-admin-panel-email.png) - -* Sandstorm Platform: Admin: LDAP, passwordless email, SAML, GitHub and Google Auth. Add and remove users. SMTP Settings. Wekan, Rocket.Chat, etc apps available with one click install. - -## Import - -* Import Trello board: Text, labels, images, comments, checklists. Not imported yet: stickers, etc. -* [Import Wekan board](https://github.com/wekan/wekan/pull/1117): Text, labels, images, comments, checklists. - -## Export - -* Export Wekan board: [Export menu item above the board archive item, when you click the sandwich bar icon on the top right](https://github.com/wekan/wekan/pull/1059). If Export menu is not visible, you can change [Export menu to be visible by setting yourself as board admin in MongoDB](https://github.com/wekan/wekan/issues/1060). - -## Working with big boards - -* [JSON tools, copying files to clipboard](https://github.com/wekan/wekan/issues/610#issuecomment-310862951) - -## API - -* [REST API Issue](https://github.com/wekan/wekan/issues/1037) -* [REST API Docs](REST-API) -* [Python client to REST API](https://github.com/wekan/wekan-python-api-client) -* [Wekan Sandstorm cards to CSV using Python](Wekan-Sandstorm-cards-to-CSV-using-Python) - -## Webhooks -Sending notifications for board activities. Tested with [Slack](https://slack.com/) and [Rocket.chat](https://rocket.chat/). -``` -Content-type: application/json -{ - "text": "board activities" - [...] -} -``` - -Different activities send different webhook data. You can find the details in the wiki page [Webhook data](Webhook-data) - -* [Outgoing Webhooks](https://github.com/wekan/wekan/pull/1119) - -### Enabled -#### 1) Board menu when clicking 3 lines "hamburger" menu on right - -![Wekan board menu screenshot](https://wekan.github.io/screenshot-board-menu.png) - -#### 2) Outgoing Webhooks - -![Wekan Outgoing Webhooks screenshot](https://wekan.github.io/screenshot-outgoing-webhooks.png) - -### Disabled - -Leave the URL field blank. - -## Cleanup - -* [Wekan database cleanup script](https://github.com/wekan/wekan-cleanup) -* [Docker cleanup](https://github.com/wekan/wekan/issues/985) - -## Stats - -* [Daily export of Wekan changes as JSON to Logstash and -ElasticSearch / Kibana (ELK)](https://github.com/wekan/wekan-logstash) -* [Statistics Python script for Wekan Dashboard](https://github.com/wekan/wekan-stats) -* [Console, file, and zulip logger on database changes](https://github.com/wekan/wekan/pull/1010) with [fix to replace console.log by winston logger](https://github.com/wekan/wekan/pull/1033) - -## Versions of Meteor and Node - -* Upgraded to [Meteor 1.4](https://github.com/wekan/wekan/pull/957) and [Node v4](https://github.com/wekan/wekan/issues/788) on [meteor-1.4 branch](https://github.com/wekan/wekan/tree/meteor-1.4) - -## Translations - -* [Translate Wekan at Transifex](https://app.transifex.com/wekan/) - -![Wekan translations screenshot](https://wekan.github.io/screenshot-change-language.png) - -# Already merged, will be at next version - -* [Changelog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) - -# Wishes for pull requests - -### Existing pull requests, cleanup/cherry-picking/new pull requests welcome - -* [Export/Import Excel TSV/CSV data](https://github.com/wekan/wekan/pull/413) -* [Move/Clone Board/List](https://github.com/wekan/wekan/pull/446) and [Move or copy cards from one board to another](https://github.com/wekan/wekan/issues/797) that [needs help in implementation](https://github.com/wekan/wekan/issues/979) -* [Replace CollectionFS with meteor-file-collection](https://github.com/wekan/wekan/pull/875) - -### Wishes for API pull requests - -* [Using API to script Email to board/card, notifications on cards to email, etc](https://github.com/wekan/wekan/issues/794) - -### Wishes for Admin Panel - -* [SMTP test, show possible errors on that test webpage](https://github.com/wekan/wekan/issues/949) -* [Teams/Organizations](https://github.com/wekan/wekan/issues/802) including Add/Modify/Remove Teams/Users/Passwords and Private/Public Team settings -* [Themes](https://github.com/wekan/wekan/issues/781) and making custom apps with Themes - -### Wishes for Boards - -* [Custom fields](https://github.com/wekan/wekan/issues/807) -* [Children/Related cards](https://github.com/wekan/wekan/issues/709), subtasks. Dependencies. -* [Top Level Projects](https://github.com/wekan/wekan/issues/641) -* [Swimlanes (rows)](https://github.com/wekan/wekan/issues/955) -* Kanban workflows -* Gantt charts -* [WIP limits](https://github.com/wekan/wekan/issues/783) -* [Timesheet/Time tracking](https://github.com/wekan/wekan/issues/812) -* Managing website -* [Same cards, multiple column sets](https://github.com/wekan/wekan/issues/211), related to [Themes](https://github.com/wekan/wekan/issues/781) -* [Calendar view](https://github.com/wekan/wekan/issues/808) -* [Vote on cards, number of votes, average](https://github.com/wekan/wekan/issues/796) -* [Board templates](https://github.com/wekan/wekan/issues/786) -* [Checklist templates](https://github.com/wekan/wekan/issues/904) - -# More - -[Platforms](Platforms) - -[Integrations](Integrations) \ No newline at end of file diff --git a/docs/Features/IFTTT.md b/docs/Features/IFTTT.md deleted file mode 100644 index 2f4ac77ed..000000000 --- a/docs/Features/IFTTT.md +++ /dev/null @@ -1,35 +0,0 @@ -## 1) Click: Menu item for the rules - -Navigation menu for the rule dialog - - -## 2) Rule Menu: Overview, deleting and adding new rules -Dialog Overview for the rules - - -## 2a) Add new rule : Triggers -Currently, there are three types of triggers: board, card and checklist - -| Board | Card | Checklist | -| ------------- | ------------- | ------------- | -| create card | added/removed label, attachment, person | checklist added/removed | -| card moved to | | check item checked/unchecked | -| card moved from | | checklist completed | - - -## 2b) Add new rule : Actions -For every trigger, there are 4 types of actions: board, card, checklist and mail - -| Board | Card | Checklist | Mail | -| ------------- | ------------- | ------------- | ------------- | -| move card to list | add/remove label, attachment, person | checklist add/remove | send email to | -| move to top/bottom | set title/description | check/uncheck item | | -| archive/unarchive | | checklist complete | | - - -# Example : How the rule works -* Rule 1: When a card is added to the board -> Add label yellow -* Rule 2: When a card is moved to List 2 -> Add checklist ToDo -* Rule 3: When a card is added to List 1 -> Add label blue - -gif animation for rules diff --git a/docs/Features/If-board-does-not-open-and-keeps-loading.md b/docs/Features/If-board-does-not-open-and-keeps-loading.md deleted file mode 100644 index 45134ca39..000000000 --- a/docs/Features/If-board-does-not-open-and-keeps-loading.md +++ /dev/null @@ -1,5 +0,0 @@ -1. As Wekan Admin user, at `All Boards` page on top of board, click `Clone Board` -2. If cloned board does open correctly, check does it have any data missing. -3. If original board does not open correctly, at `All Boards` page on top of board icon click `Archive` -4. At `All Boards` page top right if buttons `Archive` and `Templates`. Click `Archive`. -5. If you don't need that original board anymore, click `Delete` to delete that original board permanently. \ No newline at end of file diff --git a/docs/Features/LaTeX.md b/docs/Features/LaTeX.md deleted file mode 100644 index 9bbe4d1ab..000000000 --- a/docs/Features/LaTeX.md +++ /dev/null @@ -1,40 +0,0 @@ -[Original issue](https://github.com/wekan/wekan/issues/4589) - -[Commit](https://github.com/wekan/wekan/commit/82fa632197a0e3b88d26c557f1dc8cc18b05b18b) - -## Examples - -[Examples From NPM package](https://www.npmjs.com/package/markdown-it-mathjax3) - -**Inline** - -Surround your LaTeX with a single $ on each side for inline rendering. - -`$\sqrt{3x-1}+(1+x)^2$` - -**Block** - -Use two ($$) for block rendering. This mode uses bigger symbols and centers the result. -``` -$$\begin{array}{c} - -\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & -= \frac{4\pi}{c}\vec{\mathbf{j}} \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\ - -\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\ - -\nabla \cdot \vec{\mathbf{B}} & = 0 - -\end{array}$$ -``` -## Syntax - -Math parsing in markdown is designed to agree with the conventions set by pandoc: -``` -Anything between two $ characters will be treated as TeX math. The opening $ must -have a non-space character immediately to its right, while the closing $ must -have a non-space character immediately to its left, and must not be followed -immediately by a digit. Thus, $20,000 and $30,000 won’t parse as math. If for some -reason you need to enclose text in literal $ characters, backslash-escape them and -they won’t be treated as math delimiters. -``` \ No newline at end of file diff --git a/docs/Features/Linked-Cards.md b/docs/Features/Linked-Cards.md deleted file mode 100644 index 36575a292..000000000 --- a/docs/Features/Linked-Cards.md +++ /dev/null @@ -1,11 +0,0 @@ -Linked Card feature was added at https://github.com/wekan/wekan/pull/1592 - -With Linked Card feature, it's possible to create new board as dashboard. At dashboard board, you add new card Link, and there link to some card at other board, so you see realtimes changes from all those cards at dashboard board. - -Search is for searching card, to be as linked card, I presume. - -There is also Linked Board, but I'm not sure is it useful. - -Related PRs at https://github.com/wekan/wekan/pulls?q=is%3Apr+is%3Aclosed+linked+card+ - -Related issue https://github.com/wekan/wekan/issues/5550 \ No newline at end of file diff --git a/docs/Features/Multiline.md b/docs/Features/Multiline.md deleted file mode 100644 index d5aab1c15..000000000 --- a/docs/Features/Multiline.md +++ /dev/null @@ -1,23 +0,0 @@ -## Multiple lines to Checklist - -1. Click Add new Checklist -2. Click Add new Checklist Item -3. Toggle `One line of text = one checklist item` -4. Paste multiple lines of text -5. Click Save - -Multiple lines to Checklist - -## Card ☰ Menu / Copy Checklist Template to Many Cards - -Checklist Template to Many Cards 1 - -## Edit titles and descriptions of Many Cards -``` -[ {"title": "First card title", "description":"First card description"}, -{"title":"Second card title","description":"Second card description"}, -{"title":"Last card title","description":"Last card description"} ] -``` - -Checklist Template to Many Cards 2 - diff --git a/docs/Features/Numbered-text.md b/docs/Features/Numbered-text.md deleted file mode 100644 index 4c0710a86..000000000 --- a/docs/Features/Numbered-text.md +++ /dev/null @@ -1,35 +0,0 @@ -If in List titles you like to create numbered text like this: -``` -3. Something -``` -Write it this way (to escape dot), so it shows correctly: -``` -3\. Something -``` -This happens because of markdown support for autonumbering in input fields. - -For example, if you write numbered list like: -``` -1. Something nice -1. Something cool -1. Something great -``` -It will be autonumbered like this, so you can cut/paste reorder list freely, without manually reordering numbers: -``` -1. Something nice -2. Something cool -3. Something great -``` -For example, when you reorder numbered list like this: -``` -1. Something great -1. Something nice -1. Something cool -``` -It will show automatically numbered like this: -``` -1. Something great -2. Something nice -3. Something cool -``` - diff --git a/docs/Features/PWA.md b/docs/Features/PWA.md deleted file mode 100644 index 0abe49786..000000000 --- a/docs/Features/PWA.md +++ /dev/null @@ -1,168 +0,0 @@ -[Browser compatibility matrix](Browser-compatibility-matrix) - -## Install your Wekan server as an app - -- At below info, `Navigate to login page of Wekan` is your Wekan server, example https://wekan.yourcompany.com/sign-in -- App icon at Windows desktop, mobile etc -- App does not have webbrowser buttons like address bar -- Works in Wekan v4.02 and newer - -### Windows desktop: Windows Chromium Edge - -1. Open Chromium Edge. - -2. Navigate to login page of Wekan - -3. From Edge menu, install site as app, by clicking top right `⋮` and this menu, that can be used to install and manage/remove apps: - -Wekan logo - -4. In next popup, give name to app, like `YourCompany Wekan`, and click `Add` - -5. Now new app is in your Windows Start menu. - -### iOS Safari - -1. Open Safari. - -2. Navigate to login page of Wekan. - -3. At middle bottom click Share button that is box with arrow up. - -4. Scroll down and click "Add to Home Screen" and "Add". - -### Android Chrome - -1. Open Chrome - -2. Navigate to login page of Wekan. - -3. Click top right menu `⋮` / Add to home screen. - -4. Follow the onscreen instructions to install. - -### Android Firefox (if that feature works and is not removed) - -1. Open Firefox. - -2. Navigate to login page of Wekan. - -3. At right side of URL address, click button that has + inside of home icon. - -4. Follow the onscreen instructions to install. - -### Android Brave - -1. Open Brave. - -2. Navigate to login page of Wekan. - -3. Click bottom right menu `⋮` / Add to home screen. - -4. Follow the onscreen instructions to install. - -### Android Opera - -1. Open Opera. - -2. Navigate to login page of Wekan. - -3. Click top right menu `⋮` / Add to / Home screen. - -4. Follow the onscreen instructions to install. - -### Android Vivaldi - -1. Open Vivaldi. - -2. Navigate to login page of Wekan. - -3. At right side of URL address, click [V] / Add to home screen. - -4. Follow the onscreen instructions to install. - -## Fullscreen Android app with Caddy and WeKan Server - -These are mostly just notes to WeKan maintainer xet7 itself, how xet7 did get official WeKan Android Play Store app working at fullscreen of Android phone and Android tablet. Requires a lot time to setup, not recommended. - -Related, for creating apps to other appstores: https://github.com/wekan/wekan/wiki/Browser-compatibility-matrix - -1. https://www.pwabuilder.com to create Android app. Select fullscreen when creating app, also requires correctly installed assetlinks.json with below Caddy config to get fullscreen. When creating app, make your own signing key if you don't have one yet. Releasing Android app is at Play Console https://play.google.com/console/ . - -2. PWABuilder has about 100+ downloadable icons etc webmanifest requirements like is at https://github.com/wekan/wekan/tree/main/public - -3. Clone WeKan repo, add favicons etc from step 2 to wekan/public/ , and build WeKan bundle from source like at https://github.com/wekan/wekan/wiki/Emoji . Note: Currently WeKan does not have feature for custom favicons, it would require a lot of work for 100+ favicons etc customizations. - -4. Run bundle at server like https://github.com/wekan/wekan/wiki/Offline or https://github.com/wekan/wekan/wiki/Raspberry-Pi - -5. Install Caddy like https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config , with this config for PWA at https://boards.example.com , there add assetlinks.json details you got when you downloaded Android .zip file from https://pwabuilder.com , see assetlinks issue about where at Play Console those 2 SHA256 keys https://github.com/pwa-builder/PWABuilder/issues/3867#issuecomment-1450826565 - -6. At Play Console https://play.google.com/console/ there is `App Integrity` button in the sidemenu (highlighted blue in the screenshot) where you find required 2 SHA256 keys for Caddyfile: - -![image](https://user-images.githubusercontent.com/8823093/222261921-1afc64bd-6bcf-4ba1-9620-88572162746e.png) - -7. Caddy uses tabs for indenting. At `/etc/caddy` you can also `caddy format > ca` to format output and forward to new file, and if it works then `mv ca Caddyfile` and validate it `caddy validate` and reload `caddy reload`. Sometimes update caddy with `caddy upgrade` and after that `caddy stop` and `caddy start`. - -8. Also related is Parallel Snaps install to one server at encrypted VM at https://github.com/wekan/wekan-snap/wiki/Many-Snaps-on-LXC - -9. In newest requirements installing assetlinks.json is to PWA URL (like https://boards.example.com), when it before was to main domain (like https://example.com), so here just in case it's installed to both, as text in `/etc/caddy/Caddyfile`. Also see https://docs.pwabuilder.com/#/builder/android - -10. For figuring out Caddy 2 config, xet7 found related tips from Caddy forum https://caddy.community/t/well-known-file-location/16632/4 - -`/etc/caddy/Caddyfile` - -``` -# Redirecting http to https - -(redirect) { - @http { - protocol http - } - redir @http https://{host}{uri} -} - -example.com { - tls { - alpn http/1.1 - } - header /.well-known/* Content-Type application/json - header /.well-known/* Access-Control-Allow-Origin * - respond /.well-known/assetlinks.json `[ - { - "relation": ["delegate_permission/common.handle_all_urls"], - "target": { - "namespace": "android_app", - "package_name": "team.example.boards.twa", - "sha256_cert_fingerprints": [ - "AA:AA... FIRST SHA256 KEY", - "61:41... 2nd SHA256 KEY" - ] - } - } -]` - root * /data/websites/example.com - file_server -} - -boards.example.com { - tls { - alpn http/1.1 - } - header /.well-known/* Content-Type application/json - header /.well-known/* Access-Control-Allow-Origin * - respond /.well-known/assetlinks.json `[ - { - "relation": ["delegate_permission/common.handle_all_urls"], - "target": { - "namespace": "android_app", - "package_name": "team.example.boards.twa", - "sha256_cert_fingerprints": [ - "AA:AA... FIRST SHA256 KEY", - "61:41... 2nd SHA256 KEY" - ] - } - } -]` - reverse_proxy 192.168.100.3:3025 -} -``` diff --git a/docs/Features/Planning-Poker.md b/docs/Features/Planning-Poker.md deleted file mode 100644 index 7c1809bf2..000000000 --- a/docs/Features/Planning-Poker.md +++ /dev/null @@ -1,8 +0,0 @@ -## Planning Poker / Scrum Poker - -Click Card => `☰` => `Edit Planning Poker` - -- https://en.wikipedia.org/wiki/Planning_poker -- [Original Wekan Feature Request and Description](https://github.com/wekan/wekan/issues/3751) -- [Pull Request that implements Planning Poker](https://github.com/wekan/wekan/pull/3836) -- [Bug: Planning Poker Setting End Date only works in English](https://github.com/wekan/wekan/issues/3837) \ No newline at end of file diff --git a/docs/Features/Python.md b/docs/Features/Python.md deleted file mode 100644 index 64b62abe9..000000000 --- a/docs/Features/Python.md +++ /dev/null @@ -1,15 +0,0 @@ -Some Python etc code in WeKan, that is not yet added directly to WeKan: -- [LDAP sync script, that also correctly removes users](https://github.com/wekan/wekan/blob/main/docs/Login/ldap-sync/ldap-sync.py) -- [Email notifications to AWS SES](https://github.com/wekan/wekan/issues/3543#issuecomment-1199897164) -- [Prometheus Exporter](https://github.com/wekan/wekan-prometheus-exporter) -- [Burndown Chart](Burndown-and-Velocity-Chart) -- [Scheduler](https://github.com/wekan/wekan-scheduler) -- [Cleanup](https://github.com/wekan/wekan-cleanup) -- [API client, most complete](https://github.com/wekan/python-wekan) (modelled after Trello API client) -- [API CLI](https://github.com/wekan/wekan/blob/main/api.py) -- [2nd API client](https://github.com/wekan/wekan-python-api-client) -- [Stats](https://github.com/wekan/wekan-stats) -- [Logstash and ElasticSearch](https://github.com/wekan/wekan-logstash) -- iCal server in [Python](https://github.com/wekan/wekan-ical-server) and [PHP](https://github.com/wekan/wekan-ical-php) -- [Sandstorm CSV related Python code](Wekan-Sandstorm-cards-to-CSV-using-Python) -- [Trello API test code](https://github.com/wekan/wekan/tree/main/docs/ImportExport/trello) diff --git a/docs/Features/Subtasks.md b/docs/Features/Subtasks.md deleted file mode 100644 index 6ad0a4a6d..000000000 --- a/docs/Features/Subtasks.md +++ /dev/null @@ -1,14 +0,0 @@ -## Fix: If you are unable to create Subtasks - -This can happen on old boards: You have Subtasks board missing. - -1) Create new board similar to your original board, but with `^` at beginning and end of your boardname. For example, if your boardname is `MyProject`, create new board with name `^MyProject^`. At keyboard that character is `Shift-^-Space`. - -Subtask workaround part 1 - -2) Set your `MyProject` board to have subtask board `^MyProject^` - -Subtask workaround part 2 - -3) Now you are able to create Subtasks to your board `MyProject`. - diff --git a/docs/Features/Swimlanes.md b/docs/Features/Swimlanes.md deleted file mode 100644 index 28bc2cff5..000000000 --- a/docs/Features/Swimlanes.md +++ /dev/null @@ -1,15 +0,0 @@ -# Swimlanes are in Production! - -Swimlanes divide a Kanban board into horizontal bands. Each lane can represent a person, group, or any other useful category for organizing and segmenting your cards. - -## To Add Swimlanes -Click the **`Lists`** button (near the top right) to switch to the Swimlanes view. The **`Add Swimlane`** button is at far right of the lists. You may have to scroll horizontally to the right and minimize the righthand sidebar to see it. - -## To Rename Swimlanes -You can change the name of a swimlane name by clicking the name. You may have to scroll all the way to the left, if your page is wider than the screen. - -## To Reorder Swimlanes -You can reorder any swimlane by clicking (and holding) the name-area of the swimlane (on the left) and dragging it up or down into a new position. - -## To Archive Swimlanes -You can archive any swimlane by clicking on the hamburger button (3 horizontal stacked lines). It is directly above the name of the swimlane on the left of the lane. You may have to scroll all the way to the left, if your page is wider than the screen. \ No newline at end of file diff --git a/docs/Features/Templates.md b/docs/Features/Templates.md deleted file mode 100644 index 800a8a1b6..000000000 --- a/docs/Features/Templates.md +++ /dev/null @@ -1,81 +0,0 @@ -[VIDEO ABOUT HOW TO USE BOARD TEMPLATES](https://www.youtube.com/watch?v=K0_cP85Bvas) - -[More about templates explained here](https://github.com/wekan/wekan/issues/3127#issuecomment-634348524) - -[Templates feature requests and bugs](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+templates+label%3AFeature%3ATemplates) - -*** -There is currently: -- [Per-user templates](https://github.com/wekan/wekan/issues/2209), it works as described below. -- Card hamburger menu / Copy Checklist Template to Many Cards - -At [Roadmap](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license) of xet7, Maintainer of Wekan, these already have [some funding](https://wekan.team/commercial-support/): -- [Collapsible Swimlanes with count](https://github.com/wekan/wekan/issues/2804) -- [Single fixed list titles static at top of swimlanes view](https://github.com/wekan/wekan/issues/2805). -- [Main Boards/Organizing Boards/Nested Tabs](https://github.com/wekan/wekan/issues/2796) + [Shared templates](https://github.com/wekan/wekan/issues/2209) + [Top Level Projects](https://github.com/wekan/wekan/issues/641). -- [Teams/Organization Templates](https://github.com/wekan/wekan/issues/802). -- [Bug: Board templates aren't created automatically whenever the user was created by REST API or OAuth2](https://github.com/wekan/wekan/issues/2339). - -These don't yet have [funding](https://wekan.team/commercial-support/): -- [Notification Email templates](https://github.com/wekan/wekan/issues/2148). -- [Email templates](https://github.com/wekan/wekan/issues/2022). -- [Import and Export Checklists](https://github.com/wekan/wekan/issues/904). - -At Roadmap of some other Wekan Contributors: - -- Prettify email notifications. - -*** - -# Current Per-User Templates Feature - -## 1) All Boards page, top right: Templates - -### a) Create Card templates - -1. Create a new list to Card Templates Swimlane -2. Add template cards to that new list. - -### b) Create List templates - -1. Create Lists to List Templates Swimlane -2. Add cards etc content to lists. - -### c) Create Board Templates - -1. Create List to Board Templates Swimlane. -2. Create Card to List that is at Board Templates Swimlane -3. Clicking black folder icon on that card goes to your new Board Template full screen view. -4. Add content to your Board Template - -## 2) Insert new Cards/Lists/Boards from Templates - -### a) Insert Card Templates - -1. Go to some board. -2. Click Add Card. (Do not write card text). -3. Click Template. -5. Write new Title for template card you are planning to add. -4. Search for Template Card name or see that Template Card name is visible. -6. Click that Template Card. -7. Now Template Card is inserted with your new title. - -### b) Insert List Templates - -1. Go to some board. -2. At right edge or all lists, click Add List. (Do not add list name). -3. Click Template. -4. Write new Title for Template List you are planning to add. -5. Search for Template List Name or see if Template List Name is visible. -6. Click that Template List Name. -7. Now Template List is inserted with your new title. - -### c) Insert Board Templates - -1. Go to All Boards. -2. Click Add Board. (Do not add new board name). -3. Click Template. -4. Write new Title for Template Board you are planning to add. -5. Search for Template Board Name or see if Template Board Name is visible. -6. Click that Template Board Name. -7. Now Template Board is inserted with your new title. \ No newline at end of file diff --git a/docs/Features/Wait-Spinners.md b/docs/Features/Wait-Spinners.md deleted file mode 100644 index 2bf2c7a87..000000000 --- a/docs/Features/Wait-Spinners.md +++ /dev/null @@ -1,53 +0,0 @@ -# Description - -When Wekan is loading big board, selected Wait Spinner animation is shown. - -# Allowed Wait Spinners - -[Source](https://github.com/wekan/wekan/blob/main/config/const.js#L52-L61) - -Currently: -``` - 'Bounce', - 'Cube', - 'Cube-Grid', - 'Dot', - 'Double-Bounce', - 'Rotateplane', - 'Scaleout', - 'Wave' -``` - -# Settings at Admin Panel - -Admin Panel / Layout / Wait Spinner - -# Source - -``` -export WAIT_SPINNER=Bounce -``` - -# Docker - -``` -- WAIT_SPINNER=Bounce -``` - -# Snap - -``` -sudo snap set wekan wait-spinner='Bounce' - -sudo snap set wekan-gantt-gpl wait-spinner='Bounce' -``` - -# Non-English Translations, done at web only - -https://app.transifex.com/wekan/ - -# Original English source - -https://github.com/wekan/wekan/blob/main/i18n/en.i18n.json - - diff --git a/docs/Features/Wekan-Markdown.md b/docs/Features/Wekan-Markdown.md deleted file mode 100644 index ff23d68d2..000000000 --- a/docs/Features/Wekan-Markdown.md +++ /dev/null @@ -1,38 +0,0 @@ -UPDATE: Wekan now uses markdown-it and markdown-it-emoji plugin, see [Emoji page](Emoji) - -## Numbered text - -If in List titles you like to create numbered text like this: -``` -3. Something -``` -Write it this way (to escape dot), so it shows correctly: -``` -3\. Something -``` - - -*** - - -Wekan uses GFM (Github Flavored Markdown). -We use the following project that ports GFM to meteor: https://github.com/wekan/markdown with updated newest markdown, that is fork of https://github.com/perak/markdown. - -Newest Wekan uses newest markdown. - -[Adding markdown to more places at Wekan progress](https://github.com/wekan/wekan/issues/2334) - -[Related formatting tips for numbered lists](https://github.com/wekan/wekan/issues/2425) - -**Note**: In order to use gfm checklist and other v0.28+ features, you need Wekan v2.61+. - -[Checklist on markdown does not work yet](https://github.com/wekan/wekan/issues/2419) - -## List of guides (from web archive): -* [Guide](https://guides.github.com/features/mastering-markdown/). -* [List of features](https://github.github.com/gfm/). - -## Where can I use the markdown? -* Card name. -* Board name - Works on board view only. -* Card description, list and task list. \ No newline at end of file diff --git a/docs/Home.md b/docs/Home.md deleted file mode 100644 index 34b26df95..000000000 --- a/docs/Home.md +++ /dev/null @@ -1,21 +0,0 @@ -Wekan logo - -Wekan is an open-source [kanban board][] which allows a card-based task and to-do management. - -Wekan allows to create **Boards**, on which **Cards** can be moved around between a number of **Columns**. Boards can have many members, allowing for easy collaboration, just add everyone that should be able to work with you on the board to it, and you are good to go! You can assign colored **Labels** to cards to facilitate grouping and filtering, additionally you can add members to a card, for example to assign a task to someone. - -## What is special about Wekan? -Wekan is distributed under the [MIT License], allowing anyone to easily work with it and modify it. It is perfect for anyone that needs a slick kanban board but doesn't want to use third party services, which are out of user control. Wekan can be hosted on your own server with very little effort, guaranteeing that you have all the time full control over your data and can make sure no one else has access to it and that it won't just vanish from one day to another, that is, if you do backups. - -## Getting started -There are various ways to get started with Wekan: - -* you can use the [Sandstorm app demo], -* you could [[install|Install-and-Update]] it right away on your own server, or -* you could look through our [[contributing guidelines|Developer Documentation]] to get involved in the project. - -If you still have questions, check out the [[FAQ]]! - -[kanban board]: https://en.wikipedia.org/wiki/Kanban_board -[mit license]: https://github.com/wekan/wekan/blob/main/LICENSE -[sandstorm app demo]: https://demo.sandstorm.io/appdemo/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h \ No newline at end of file diff --git a/docs/ImportExport/Asana.md b/docs/ImportExport/Asana.md deleted file mode 100644 index 05cd00fa3..000000000 --- a/docs/ImportExport/Asana.md +++ /dev/null @@ -1,5 +0,0 @@ -2022-03-02 - -[Added Perl scripts for Asana export to WeKan ®](https://github.com/wekan/wekan/tree/main/asana) - -Thanks to GeekRuthie ! \ No newline at end of file diff --git a/docs/ImportExport/CSV.md b/docs/ImportExport/CSV.md deleted file mode 100644 index ed18e66fd..000000000 --- a/docs/ImportExport/CSV.md +++ /dev/null @@ -1,18 +0,0 @@ -Right to click your username / All Boards / Add Board / Import / From CSV/TSV - -[Original Import CSV issue](https://github.com/wekan/wekan/issues/395) - -[CSV import was added at PR 3081](https://github.com/wekan/wekan/pull/3081) - -Here's a copy of the CSV and TSV to test out the functionality: -- [board-import.csv](https://wekan.github.io/csv/board-import.csv) -- [board-import.tsv](https://wekan.github.io/csv/board-import.tsv) - -Frontend: -- [Import CSV code](https://github.com/wekan/wekan/tree/main/client/components/import) - -Backend: -- [Import CSV code](https://github.com/wekan/wekan/blob/main/models/csvCreator.js) and [General Import code](https://github.com/wekan/wekan/blob/main/models/import.js) - -Related: -- [Related PRs](https://github.com/wekan/wekan/pulls?q=is%3Apr+is%3Aclosed+csv) diff --git a/docs/ImportExport/Delete-Board.md b/docs/ImportExport/Delete-Board.md deleted file mode 100644 index 6713715ba..000000000 --- a/docs/ImportExport/Delete-Board.md +++ /dev/null @@ -1,7 +0,0 @@ -## 1) Move board to Archive - -Move board to Archive - -## 2) All Boards => Archive => Delete Board - -Delete Board from Archive \ No newline at end of file diff --git a/docs/ImportExport/Excel-and-VBA.md b/docs/ImportExport/Excel-and-VBA.md deleted file mode 100644 index e5993a684..000000000 --- a/docs/ImportExport/Excel-and-VBA.md +++ /dev/null @@ -1,75 +0,0 @@ -Related projects: -* [VBA-Web](https://github.com/VBA-tools/VBA-Web) - using REST APIs with VBA -* [VBA-JSON](https://github.com/VBA-tools/VBA-JSON) -* [VBA to Javascript translator](https://github.com/mha105/VBA-to-JavaScript-Translator) -* [Tcl and Excel](http://www.xet7.org/tcl) - -For accessing Wekan with Excel VBA, you can use Wekan REST API: - -https://github.com/wekan/wekan/wiki/REST-API - -For example, with using curl, you first login with admin credentials, -by sending username and password to url. -Change your server url etc details to below: - -Login with as JSON https://github.com/wekan/wekan/wiki/REST-API#example-call---as-json -``` -curl -H "Content-type:application/json" \ - http://localhost:3000/users/login \ - -d '{ "email": "my@email.com", "password": "mypassword" }' -``` -=> -``` -{ - "id": "ABCDEFG123456", - "token": "AUTH-TOKEN", - "tokenExpires": "2018-07-15T14:23:18.313Z" -} -``` -Then you update card content by sending to card URL the new content: - -``` -curl -H "Authorization: Bearer AUTH-TOKEN" \ - -H "Content-type:application/json" \ - -X PUT \ -http://localhost:3000/api/boards/ABCDEFG123456/lists/ABCDEFG123456/cards/ABCDEFG123456 \ --d '{ "title": "Card new title", "listId": "ABCDEFG123456", "description": "Card new description" }' -``` - -When using VBA, you can optionally: -* Use direct VBA commands to send and receive from URLs -* Download curl for Windows, and in VBA call curl.exe with those parameters, and get the result. - -You can also google search how you can use JSON format files in VBA, -converting them to other formats etc. There could be something similar that -exists in PHP, that JSON file can be converted to PHP array, and array items accessed -individually, and array converted back to JSON. - -Current Wekan REST API does not yet cover access to all data that is in MongoDB. -If you need that, REST API page also has link to Restheart, that adds REST API -to MongoDB, so you can use all of MongoDB data directly with REST API. -https://github.com/wekan/wekan/wiki/REST-API - -Wekan boards also have export JSON, where also attachments are included in JSON as -base64 encoded files. To convert them back to files, you first get whole one board exported -after authentication like this: - -``` -curl https://Bearer:APIKEY@ip-address/api/boards/BOARD-ID/export?authToken=#APIKEY > wekanboard.json -``` - -Then you read that JSON file with VBA, and get that part where in JSON is the base64 text -of the file. Then you use VBA base64 function to convert it to binary, and write content to file. - -# CSV/TSC Import/Export - -There is [CSV/TSV pull request](https://github.com/wekan/wekan/pull/413), but it has been made -a long time ago, it would need some work to add all the new tables, columns etc from -MongoDB database, so that it would export everything correctly. - -Options are: - -a) Some developer could do that work and contribute that code to Wekan as -new pull request to Wekan devel branch. - -b) Use [Commercial Support](https://wekan.team) and pay for the time to get it implemented. \ No newline at end of file diff --git a/docs/ImportExport/From-Previous-Export.md b/docs/ImportExport/From-Previous-Export.md deleted file mode 100644 index eddb0f303..000000000 --- a/docs/ImportExport/From-Previous-Export.md +++ /dev/null @@ -1,26 +0,0 @@ -## Paste big JSON in Linux - -1. Copy WeKan board JSON to clipboard - -``` -sudo apt install xclip - -cat board.json | xclip -se c -``` -2. At some Chromium-based browser, click right top your username / All Boards / New Board / From Previous Export. - -3. At input field, right click / Paste as Text. - -4. Click Import. - -## JSON to SQLite3 - -``` -sqlite3 wekan.db - -.mode json - -.load wekan-export-board.json board -``` - -To be continued \ No newline at end of file diff --git a/docs/ImportExport/Integrations.md b/docs/ImportExport/Integrations.md deleted file mode 100644 index f8110a2c7..000000000 --- a/docs/ImportExport/Integrations.md +++ /dev/null @@ -1,53 +0,0 @@ -# Current - -* [PostgreSQL](https://github.com/wekan/wekan/tree/main/torodb-postgresql) -* [Webhooks](Features#webhooks), works by showing board activities with [Slack](https://slack.com/), [Rocket.chat](https://rocket.chat/) and others that supports Webhooks. -* [Gogs Integration](https://github.com/wekan/wekan-gogs) as separate project. - -# Wishes for pull requests - -## IFTTT - -* [Huginn or Flogo](https://github.com/wekan/wekan/issues/1160) - -## Chat - -* [Rocket.Chat more integrations](https://github.com/RocketChat/Rocket.Chat/issues/672#issuecomment-328469079) - -## Issue / Commit - -* [GitLab](https://github.com/wekan/wekan/issues/109) -* GitHub -* Gitea - -## Time Tracking - -* [Time Tracking](https://github.com/wekan/wekan/issues/812) -* [Super-Productivity](https://github.com/johannesjo/super-productivity/issues/7) after [Themes](https://github.com/wekan/wekan/issues/781) and [API scripting](https://github.com/wekan/wekan/issues/794) is done. - -## Complete replacement - -* Jira, plan at [Themes](https://github.com/wekan/wekan/issues/781) - -## File Sync, Groupware - -* [ownCloud / Nextcloud](https://github.com/wekan/wekan/issues/687) - -## Authentication - -Most are these are already available at [Sandstorm](https://sandstorm.io), for example see -[screenshots of SAML support](https://discourse.wekan.io/t/sso-passing-variables-through-url/493/8). -Following are for Source/Docker installs: - -* [Google/GitHub/OAuth](https://github.com/wekan/wekan/issues/234) -* [[LDAP]] ([#119](https://github.com/wekan/wekan/issues/#119)) -* [SAML](https://github.com/wekan/wekan/issues/708) -* [OpenID](https://github.com/wekan/wekan/issues/538) - -## Import / Export - -* [Taskwarrior tasks](https://github.com/wekan/wekan/issues/827) - -# More - -[Features](Features) \ No newline at end of file diff --git a/docs/ImportExport/Jira.md b/docs/ImportExport/Jira.md deleted file mode 100644 index 800f57d27..000000000 --- a/docs/ImportExport/Jira.md +++ /dev/null @@ -1,35 +0,0 @@ -Originally from @webenefits at https://github.com/wekan/wekan/discussions/3504 - -## Migrate from Jira Server (Atlassian) to Wekan - -Hello all, - -I wanted to share here my experience with migrating data from Jira (Server) to Wekan. It took me 1 - 2 days to find a solution and I think it makes sense to record it here so that successors have it easier. - -In order to not transfer everything manually and still keep all comments and (at least) links to attachments from Jira, my plan was to first migrate everything from **Jira → Trello** and then from **Trello → Wekan**, since importing from Trello works very well. :ok_hand: - -Unfortunately there is no "easy" variant to transfer data from Jira to Tello. -First of all, I found "TaskAdpater" through various threads, which allows you to transfer data between different tools (including Jira and Trello). This would have been a nice way to do it, since the data would not have gone through a third party. Unfortunately, this didn't work because of the newer API token authentication in combination with Jira server. Also other suggested things like "Zapier" were not really functional. - -## Related - -- https://www.theregister.com/2023/10/16/atlassian_cloud_migration_server_deprecation/ -- https://news.ycombinator.com/item?id=37897351 -When I had almost given up, I had the idea to look for "Power Ups" (Addons) in Trello. And indeed, I found what I was looking for! The power up is called "Unito Sync". It allows you to synchronize individual projects in both directions between tools like Jira and Trello. And the best: There is a 14-day trial version. - -That's how it worked in the end. You have to migrate each project separately and make some fine adjustments afterwards. However, all data including comments and attachments (as links) are integrated! - -Here again briefly the way: - -1. Create a Trello dummy account -2. Create a new board there -3. Install and register Power Up Unito Sync -4. Create a new "flow" for the current project in Unito Sync -5. Synchronize -6. Export data from Trello again afterwards -7. Import JSON into Wekan - - -I hope I could save you some work with this. Good luck! :four_leaf_clover: -Greetings -Alexander \ No newline at end of file diff --git a/docs/ImportExport/Leo.md b/docs/ImportExport/Leo.md deleted file mode 100644 index cda202271..000000000 --- a/docs/ImportExport/Leo.md +++ /dev/null @@ -1,12 +0,0 @@ -https://leo-editor.github.io/leo-editor/ - -Install at Linux arm64: -``` -sudo apt -y install build-essential python3-dev pytho3-pip python3-pyqt5* - -pip3 install pip --user --upgrade - -pip3 install leo --user --upgrade - -leo -``` diff --git a/docs/ImportExport/Migrating-from-old-Wekan-manually.md b/docs/ImportExport/Migrating-from-old-Wekan-manually.md deleted file mode 100644 index 4f8c09a21..000000000 --- a/docs/ImportExport/Migrating-from-old-Wekan-manually.md +++ /dev/null @@ -1,46 +0,0 @@ -Migrations from every possible old Wekan version are not implemented yet. - -Here are some starting points. - -## 1) Required: Backups - -https://github.com/wekan/wekan/wiki/Backup - -Do backups to multiple places. And test does restore work, with restore script already made. - -## 2) You can save all data from MongoDB to .json files and compare them - -That way you can also edit files to fix something, and also save back to MongoDB: -- https://forums.rocket.chat/t/big-issue-with-custom-javascript/261/3 - -## 3) Change text in all files in current directory in-place - -Take backup before runnning this. - -Using sed on Linux or Mac. -``` -sed -i 's|FindThisText|ReplaceWithThisText|g' * -``` -## 4) Example: From v0.77 to newest - -### v0.77 -- Schema https://github.com/wekan/wekan/tree/v0.77/models -- Migrations https://github.com/wekan/wekan/blob/v0.77/server/migrations.js - -### Newest -- Schema https://github.com/wekan/wekan/tree/devel/models -- Migrations https://github.com/wekan/wekan/blob/main/server/migrations.js - -## 5) Some migrations could be missing - -Some of the database schema can be different. If you see difference in these files, you could fix it for everybody by adding new code to migrations, so old schema is converted to new one automatically when Wekan starts. - -## 6) Inform Wekan about what is missing - -### a) Add issue -- [Add issue](https://github.com/wekan/wekan/issues) - -### b) Create pull request -- [Build from source or build on VirtualBox image](Platforms) -- [Please try to fix lint error before creating pull request](Developer-Documentation#preventing-travis-ci-lint-errors-before-submitting-pull-requests) -- [Making Pull Request](https://help.github.com/articles/creating-a-pull-request/) \ No newline at end of file diff --git a/docs/ImportExport/Sync.md b/docs/ImportExport/Sync.md deleted file mode 100644 index a32595f02..000000000 --- a/docs/ImportExport/Sync.md +++ /dev/null @@ -1,64 +0,0 @@ -# [Big Picture Roadmap](https://github.com/wekan/wekan/blob/main/FUTURE.md): Import/Export/Sync with WeKan - -## Partial - -[More](https://github.com/wekan/wekan/issues/4578) - -### WeKan kanban - -From | Import | Export | Sync | In Progress ------------- | ------------- | ------------- | ------------- | ------------- -[CSV/TSV](https://github.com/wekan/wekan/wiki/CSV) | CSV/TSV | [Custom Fields](https://github.com/wekan/wekan/issues/3386), [Hours](https://github.com/wekan/wekan/issues/1907), [Custom Fields value and name](https://github.com/wekan/wekan/issues/3769) | | [Error 500](https://github.com/wekan/wekan/issues/5132) -JSON | [Checklists](https://github.com/wekan/wekan/issues/904), [Sandstorm Header](https://github.com/wekan/wekan/issues/1850), [Upload](https://github.com/wekan/wekan/issues/4615) [File](https://github.com/wekan/wekan/issues/2178), [Templates Name](https://github.com/wekan/wekan/issues/2727), [Cards/Lists](https://github.com/wekan/wekan/issues/2340), [List Order](https://github.com/wekan/wekan/issues/1602), [Invisible](https://github.com/wekan/wekan/issues/5154), [List Color](https://github.com/wekan/wekan/issues/3615), [Comments](https://github.com/wekan/wekan/issues/4228), [Labels](https://github.com/wekan/wekan/issues/813), [Subtasks](https://github.com/wekan/wekan/issues/4420) | JSON, [Checklists](https://github.com/wekan/wekan/issues/904), [Cards/Lists](https://github.com/wekan/wekan/issues/2340), [Card](https://github.com/wekan/wekan/issues/4197), [Labels](https://github.com/wekan/wekan/issues/813), [List Order](https://github.com/wekan/wekan/issues/1602), [Version](https://github.com/wekan/wekan/issues/1922) | [Bidirectional](https://github.com/wekan/wekan/issues/1322) | -[Any](https://github.com/wekan/wekan/issues/3775) -Excel | | XLSX | | -Board HTML | | [Card Content](https://github.com/wekan/wekan/issues/4004), [Link to Minicard](https://github.com/wekan/wekan/issues/3812) | | -Clipboard | [Markdown](https://github.com/wekan/wekan/issues/2142) | [Markdown](https://github.com/wekan/wekan/issues/2142), [Board JSON](https://github.com/wekan/wekan/issues/1918) | | -Text | [DragDrop](https://github.com/wekan/wekan/issues/1941) | [Boards/Swimlanes](https://github.com/wekan/wekan/issues/2185) | | -Print | | [Board](https://github.com/wekan/wekan/issues/2794) | | -CLI | [Sandstorm](https://github.com/wekan/wekan/issues/1695) | [Sandstorm](https://github.com/wekan/wekan/issues/1695) | | -WeKan All Boards | | [ZIP](https://github.com/wekan/wekan/issues/4902) | | - -### Other kanban - -From | Import | Export | Sync | In Progress ------------- | ------------- | ------------- | ------------- | ------------- -[Trello](https://github.com/wekan/wekan/wiki/Migrating-from-Trello) | JSON, [Feedback](https://github.com/wekan/wekan/issues/1467), [File Upload](https://github.com/wekan/wekan/issues/529) | | | [Attachments](https://github.com/wekan/wekan/issues/4877), [Sandstorm Attachments](https://github.com/wekan/wekan/issues/2893), [CheckLists UserId](https://github.com/wekan/wekan/issues/4417) -[Jira](https://github.com/wekan/wekan/wiki/Jira) | | | | -[Asana](https://github.com/wekan/wekan/wiki/Asana) | | | | -[Zenkit](https://github.com/wekan/wekan/wiki/ZenKit) | | | | - -## Wishes - -### Other Kanban - -From | Import | Export | Sync | In Progress ------------- | ------------- | ------------- | ------------- | ------------- -[Focalboard](https://github.com/wekan/wekan/issues/4659) | | | | -[Google Tasks](https://github.com/wekan/wekan/issues/5182) | | | | -[Notion](https://github.com/wekan/wekan/issues/4659) | | | | -[TaskWarrior](https://github.com/wekan/wekan/issues/827) | | | | -[Todo.txt](https://github.com/wekan/wekan/issues/152) | | | | -[Todoist](https://github.com/wekan/wekan/issues/4659) | | | | -[Redmine](https://github.com/wekan/wekan/issues/1150) | | | | -[RestyaBoard](https://github.com/wekan/wekan/issues/3181) | | | | -[Rust Kanban](https://github.com/yashs662/rust_kanban) | | | | -[Leo and Emacs Org mode](https://github.com/wekan/wekan/issues/2186) | | | | -[Microsoft Planner](https://github.com/wekan/wekan/issues/2642) | | | | - -### Issues and SCM - -From | Import | Export | Sync | In Progress ------------- | ------------- | ------------- | ------------- | ------------- -[GitHub](https://github.com/wekan/wekan/issues/5145) | | | | -[GitLab](https://github.com/wekan/wekan/issues/5145) | | | | -[Fossil SCM](https://github.com/wekan/wekan/issues/5145) | | | | -[Git-Bug](https://github.com/wekan/wekan/issues/5145) | | | | -Gitea -Gogs | | | [wekan-gogs](https://github.com/wekan/wekan-gogs) | - -### Wiki - -From | Import | Export | Sync | In Progress ------------- | ------------- | ------------- | ------------- | ------------- -Confluence | | | | \ No newline at end of file diff --git a/docs/ImportExport/ZenKit.md b/docs/ImportExport/ZenKit.md deleted file mode 100644 index 3dabae54d..000000000 --- a/docs/ImportExport/ZenKit.md +++ /dev/null @@ -1,5 +0,0 @@ -https://github.com/wekan/wekan/discussions/4487 - -https://github.com/kjgcoop/very-rough-wekan-from-zk - -https://github.com/wekan/very-rough-wekan-from-zk \ No newline at end of file diff --git a/docs/ImportExport/trello/Migrating-from-Trello.md b/docs/ImportExport/trello/Migrating-from-Trello.md deleted file mode 100644 index 57892fd88..000000000 --- a/docs/ImportExport/trello/Migrating-from-Trello.md +++ /dev/null @@ -1,49 +0,0 @@ -Importing attachments from Trello: -- https://github.com/wekan/wekan/tree/main/trello -- https://github.com/wekan/trello-board-exporter -- https://github.com/wekan/wekan/issues/4877 -- https://github.com/wekan/trello-backup - -If you're already a Trello user, migrating to Wekan is easy: - -1. install Wekan -2. create users -3. export your boards from Trello -4. import them into Wekan -5. be aware of some limitations - -# 1. Install Wekan - -Detailed instructions are on this wiki at the page [Install and Update](Install-and-Update) - -# 2. Create users - -Once Wekan is installed, register a user for you. Then register a user for each of your other Trello board members. This is a bit cumbersome, as you have to logout then register in the name of each user. - -Pro-tip: your import will be much facilitated if you use the exact same **username** in Wekan that your users had in Trello. But if you can't / don't want to, it's not blocking - it's just going to be a little more work when importing (step 4). - -# 3. Export your boards from Trello - -Log into Trello, and for each of your boards, go to the board menu (click "Show Menu"), then "More", then "Print and Export", then "Export JSON". Save the resulting page on your computer. - -If you have a high number of boards, here is a script that automates these steps (this script it **not** part of the Wekan project): https://github.com/mattab/trello-backup - -# 4. Import your boards into Wekan - -In Wekan, on the boards list, click on "Add a new board". In the popup, click on "import from Trello". -Then, copy the content of one exported board file into the input field and hit "Import". - -If your board had members, you will need to tell Wekan which of its users should replace each of your Trello users: Wekan will display a list of the users found in your Trello board, and let you select which Wekan user to map it to. If the usernames are the same, that mapping will have been done for you. Then hit "Done". - -Once imported, Wekan will put you straight into your new board. Enjoy! - -# 5. Limitations - -The Trello import will import your board, your labels, your lists, your cards, your comments, your attachments, and will map Trello users to Wekan users as you requested it, all pretty quickly. - -Yet, it has a few limitations: - -- Wekan does not import your activity history (who did what when) -- it does not map non-member users: if you had a public board, all non-member contributions (like comments) will be attached to the user doing the importation -- Trello does not export comments posted earlier than around December 2014 (this is empirical data), so Wekan can't import it. -- when importing attachments, Wekan will download them and host them on your server. But the download process is not particularly robust and there is no feedback on it, so if you have lots of (or heavy) attachments, you'll have to give it some time and it may timeout without you knowing about it. \ No newline at end of file diff --git a/docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md b/docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md deleted file mode 100644 index 5d86ef83b..000000000 --- a/docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md +++ /dev/null @@ -1,303 +0,0 @@ -## Update 2023-09-23 - -### FOSS Kanban - -MIT: - -- WeKan (MIT, Node.js/Meteor/MongoDB) https://github.com/wekan/wekan is maintained, major features being added, see https://github.com/wekan/wekan/wiki/Deep-Dive-Into-WeKan -- Kanboard (MIT, PHP) https://github.com/kanboard/kanboard is at maintenance mode, no major new feature development. There is still security fixes etc. -- 4gaBoards (MIT, Node.js/Sails.js/PostgreSQL) https://github.com/RARgames/4gaBoards is maintained fork of Planka -- Godello (MIT, Godot) https://github.com/alfredbaudisch/Godello can save locally, maybe no multi-user support yet -- Rust TUI kanban (MIT, Rust) https://github.com/yashs662/rust_kanban is maintained - -GPL/AGPL: - -- OpenProject (GPL-3.0, RoR) https://github.com/opf/openproject is maintained -- Leantime (AGPL-3.0, PHP8/MySQL) https://github.com/Leantime/leantime is maintained -- NextCloud said at NextCloud Conference https://www.youtube.com/watch?v=H8KHXnH4NKs , that Deck (AGPL-3.0, PHP) https://github.com/nextcloud/deck is for being lightweight kanban, and to not have full Project Management features like OpenProject (GPL-3.0, RoR) https://github.com/opf/openproject -- Planka (AGPL-3.0, Node.js/Sails.js/PostgreSQL) https://github.com/plankanban/planka changed from MIT to AGPL-3.0, so there is MIT fork at https://github.com/RARgames/4gaBoards -- Planify (GPL-3.0, Vala) https://github.com/alainm23/planify is maintained - -Not maintained: - -- RestyaBoard (OSL-3.0, PHP/Python/Java/JS) is not developed anymore, there is no commits after Mar 12, 2022: https://github.com/RestyaPlatform/board/issues/4426 - -Other kanbans maybe listed at https://github.com/KanRule - -### Propietary kanban - -- Atlassian is retiring self-managed server offerings https://www.atlassian.com/blog/platform/atlassian-server-is-going-away-next-steps - - -## Please [search from ChangeLog page](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) instead - -Please [search from ChangeLog page](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) instead about does Wekan have some feature. - -This comparison below is over one year old and very outdated. All of Wekan/Trello/Restyaboard have changed very much and have many new features and fixes. - -## Basic features - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Price | Free and Open Source, [MIT license](https://github.com/wekan/wekan/blob/main/LICENSE). Free for Commercial Use. | Free with limitations, Monthly payment, Annual Subscription, Quote-based | Open Core -Whitelabeling | Yes. Admin Panel/Layout: Hide Logo, Custom Product Name. | No | $ Yes -Theming | [Yes](Custom-CSS-themes) | No | $ Yes -Redistributing | Yes | No | $ Yes -Hosting | [Self-host or SaaS provider](Platforms) | SaaS | Self-host - -## Basic features: Board - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Activities fetch | WebSocket | WebSocket | Polling (Better, for easy scaling) -Multiple language | Yes 70 | Yes 29 | Yes 38 -Keyboard shortcuts | Yes | Yes | Yes -Boards | Yes | Yes | Yes -Closed boards listing | Yes, at Archive | Yes | Yes -Starred boards listing | No, starred and non-starred at All Boards | No | Yes -Add board with predefined templates | Personal templates, Import Board from Trello or Wekan | No | Yes -Board stats | [Yes](Features#stats) | No | Yes -Board - Add members | Yes | Yes | Yes -Board - Remove members | Yes | Yes | Yes -Close board | Yes, move to Archive | Yes | Yes -Delete board | Yes, from Archive | Yes | Yes -Subscribe board | Yes | Yes | Yes -Copy board | Export / Import board | Yes | Yes -Starred board | Yes | Yes | Yes -Unstarred board | Yes | Yes | Yes -Board text list view | [No](https://github.com/wekan/wekan/issues/1862) | No | Yes -Board calendar view | Yes, for Start/End Date | Yes | Yes -Board sync with google calendar | No | Yes | Yes - -## Basic features: Swimlanes - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Swimlanes | Yes | External [Chrome Add-On](https://chrome.google.com/webstore/detail/swimlanes-for-trello/lhgcmlaedabaaaihmfdkldejjjmialgl) and [Firefox Add-On](https://addons.mozilla.org/en-US/firefox/addon/swimlanes-for-trello/) | No -Change Swimlane Color | Yes | ? | ? - -## Basic features: Lists - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Create list | Yes | Yes | Yes -List color | Yes | No | Yes -Copy list | No | Yes | Yes -Move list | No. Only at same board with dragging. | Yes | Yes -Subscribe list | Yes | Yes | Yes -Remove list | Yes | Yes | Yes -Move all cards in this list | No. Only multiselect-drag to the same board. | Yes | Yes -Archive all cards in this list | No | Yes | Yes -Archive this list | Yes | Yes | Yes -Show attachments in list | No. Only on card. | No | Yes - -## Basic features: Cards - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Map card | [Not yet](https://github.com/wekan/wekan/issues/755) | No | ? -Filter cards | Yes, also with Regex | Yes | Yes -Archived items | Yes | Yes | Yes -Card stickers | No | Yes | No -Card labels | Yes | Yes | Yes -Card labels color change | Yes | Yes | Yes -Cards | Yes | Yes | Yes -Paste multiline text as one or many cards | No | Yes | ? -Create cards | Yes | Yes | Yes -Delete cards | Yes | Yes | Yes -Instant add card | No | No | $ Yes -Add cards & reply via Email | No | Yes | Yes -Multiple card view | No | No | Yes -Expandable card view | No | No | Yes -Card ID display | [Not yet](https://github.com/wekan/wekan/issues/2450) | No | Yes -Card color | Yes | No | ? -Card color on card list | No | No | Yes -Card action on card list | Only multiple selection and WIP Limit | Yes | No -Card - Set due date | Yes | Yes | Yes -Card - Add members | Yes | Yes | Yes -Card - Remove members | Yes | Yes | Yes -Card - Add labels | Yes | Yes | Yes -Card - Add checklist | Yes | Yes | Yes -Card - Add attachment | Yes | Yes | Yes -Move card | Yes | Yes | Yes -Copy card | Yes | Yes | Yes -Subscribe card | Yes | Yes | Yes -Archive card | Yes | Yes | Yes -Vote card | No | Yes | Yes -Share card | No | Yes | Yes -Print card | No | Yes | No -Add comment on card | Yes | Yes | Yes -Reply comment on card | No, only adding another comment | No | Yes -Remove comment on card | Yes | Yes | Yes -Nested comments | No | No | Yes -Card resizable view | No | No | Yes -Show attachments in card | JPG/PNG/GIF images in slideshow. | Yes | Yes -Card history filtering | No | No | Yes -Button to delete all archived items | [Not yet](https://github.com/wekan/wekan/issues/1625) | No | Yes - -## Basic features: Checklists - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Checklist - Add item | Yes | Yes | Yes -Copy multiple lines from Excel/Project and paste as one or many checklist items | [Not yet](https://github.com/wekan/wekan/issues/1846) | Yes | ? -Checklist - Remove item | Yes | Yes | Yes -Checklist - Convert to card | No | Yes | Yes -Checklist - Mention member | No | Yes | Yes -Checklist - Select emoji | [No](https://github.com/wekan/wekan/issues/1537) | Yes | Yes - -## Basic features: Search - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Search | Only on one board, also with regex. And add linked card search from any board. | Yes | $ Yes -Save search | No | Yes | No - -## Basic features: Organizations - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Organizations list on profile | Yes, at All Boards page | Yes | Yes -Organizations | [Yes](https://github.com/wekan/wekan/issues/802) | Yes | Yes -Change organization on board | [Yes](https://github.com/wekan/wekan/issues/802#issuecomment-416474860) | Yes | Yes -Organizations - Add members | Yes | Yes | Yes -Organizations - Remove members | Yes | Yes | Yes -Organizations - Members change permissions | No | Yes | Yes -Create organization with types | No | Yes | No -Organizations - Sorting list | No | No | Yes -Organizations - Activities list | No | Yes | Yes -Organizations settings | Yes | Yes | Yes -Organizations visibility | No | Yes | Yes -Organizations - Membership restrictions | Yes | Yes | Yes -Organizations - Board creation restrictions | No | Yes | Yes -Remove organization | No | Yes | Yes - -## Basic features: Offline - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Offline sync - use without internet | No. You can install Wekan to your own computer and use it locally. | No | Yes - -## Basic features: Diff, Revisions and Undo - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Undo from activities | No | No | Yes - -## Basic features: JSON API - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -API explorer | No | No | Yes -OpenAPI | [Yes](https://github.com/wekan/wekan/tree/main/openapi) [here](https://wekan.github.io/api/) | ? | ? -Developer applications | Yes, using REST API | Yes | Yes -Authorized OAuth applications | No, REST API [login as admin to get Bearer token](REST-API#example-call---as-form-data) | Yes | Yes -Webhooks | Yes, per board or global at Admin Panel | Yes | Yes -Zapier (IFTTT like workflow automation with 500+ websites) | Yes | Yes | $ Yes -Integrated IFTTT | [Yes](IFTTT) | No | No - -## Basic features: Email and Notifications - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Email-to-board settings | No, requires your code to use REST API | Yes | Yes -Email templates management | No | No | Yes -Notifications settings | [Not yet](https://github.com/wekan/wekan/issues/2471) | Yes | Yes -Disable desktop notification | [No desktop/push notifications yet](https://github.com/wekan/wekan/issues/2026) | No | Yes -User configuration to change default subscription on cards and boards | Yes | No | Yes -Card notification & highlight | No | No | Yes -Notification for card overdue | Yes, see snap/docker-compose.yml email settings | Yes | Yes - -## Basic features: Settings - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Additional settings | No in Web UI, most settings at CLI | Yes | Yes (Basic only) -Profile | Yes | Yes | Yes -Add a new email address | Register / Invite | Yes | No -Roles management | On web board+[API](REST-API-Role) | No | Yes -Settings management | Only some at Web UI, most settings at CLI | No | Yes -Users management | Add/Remove Orgs/Teams/Users | Yes? | Yes -Permanently delete your entire account forever? | No | Yes | Yes (Admin can delete) - -## Apps for productivity: Login - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Login with username or email | Yes | Yes | Yes -LDAP login | Standalone: [Yes](LDAP). Sandstorm: Yes. | No | $ Yes -SAML login | Standalone: [Not yet](https://github.com/wekan/wekan/issues/708). Sandstorm: Yes | No | No -Google login | Not yet, needs fixes to [OAuth2](OAuth2) | Yes | No -GitHub login | Standalone: Not yet, needs fixes to [OAuth2](OAuth2). Sandstorm: Yes. | No | No -Passwordless email login | Standalone: No. Sandstorm: Yes. | No | No - -## Apps for productivity: Import / Export - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Import board from Trello | Yes | No | Yes -Import board from Wekan | Yes | No | Yes -Import from GitHub | No | No | $ Yes -Export board to Wekan JSON, includes attachments | Yes | No | ? -Export board to CSV | Yes | $ Yes | $ Yes -Export board to Excel | Yes | ? | ? -Export JSON card | No | Yes | No -Export CSV card | No | No | Yes -Change visibility | Yes | Yes | Yes -Change visibility in boards listing | No | No | Yes -Activities difference between previous version | No | No | Yes -Change background | Color only | Color and image | Color and image -Change background - custom | No | $ Gold or Business Class Only | Yes -Background image from flickr | No | No | Yes -Productivity beats | No | No | Yes (Alpha) -Show attachments in board | No, only at each card | No | Yes - -## Apps for productivity - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Apps (Power-ups) | All integrated in, no separate plugin/app install | Yes | Yes -Custom Field App | [Yes](Custom-Fields) | Yes | $ Yes -Estimated Time Custom Field App / Time Tracking | Reveived/Start/End/Due/End Date, Spent time, Requested By, Assigned By. No reports. For more advanced, [Not yet](https://github.com/wekan/wekan/issues/812) | Yes, 3rd party Burndown, Harvest etc | $ Yes -Analytics | [Magento integration](https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys) | No | No -Hide card additional information | Yes, card and board activities | Yes, card activities | Yes, card activities -Linked Cards and Boards | [Yes](https://github.com/wekan/wekan/pull/1592) | Yes, Related Cards and Boards | ? -Subtasks | [Yes](https://github.com/wekan/wekan/pull/1723) | Yes, Hello Epics Power-Up | ? -Board Gantt view | No | No | $ Yes -Gogs (Git Service) Integration | [Yes](https://github.com/wekan/wekan-gogs) | No | No -Activities listing | No, only at board | No | Yes -Introduction video | No | No | Yes -List sorting by due date | No | No | Yes -Home screen | No | No | Yes -Apps Integration | All integrated in | Yes | Yes -Chat | No. You could use [Rocket.Chat](OAuth2) | No | $ Yes -Dashboard Charts | [Not yet](https://github.com/wekan/wekan-dashing-go) | No | $ Yes -Hide Card Created Date App | No | No | Yes -Hide Card ID App | No | No | Yes -Canned Response App | No | No | $ Yes -Auto Archive Expired Cards App | No | No | $ Yes -Support Desk | No | No | $ Yes -Card Template App | Copy Checklist Template to Multiple Cards | Yes | $ Yes -Slack | [Yes](Outgoing-Webhook-to-Discord) | Yes | $ Yes -Amazon Echo | No | No | $ Yes -Collaborate/TogetherJS | [Not yet](Friend) | No | Yes -Gmail Add-on | No | Yes | Yes -Hangouts Chat bot | No | Yes | $ Yes -Print board | No | No | $ Yes - -## Apps for productivity: Checklist Templates - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -Website QA Checklist | No | No | $ Yes -SEO Checklist | No | No | $ Yes - -## Apps for productivity: Mobile Apps - -Features | Wekan | Trello | Restyaboard ------------- | ------------- | ------------- | ------------- -iOS Mobile App | [Not yet](Friend). Mobile Chrome browser works. | Yes | Yes -Android Mobile App | [Yes](Browser-compatibility-matrix) | Yes | Yes -Windows Microsoft Store App | [Yes](Browser-compatibility-matrix) | ? | ? -Ubuntu Touch OpenStore App | [Yes](Browser-compatibility-matrix) | ? | ? - diff --git a/docs/Login/ADFS.md b/docs/Login/ADFS.md deleted file mode 100644 index f4684fc06..000000000 --- a/docs/Login/ADFS.md +++ /dev/null @@ -1,22 +0,0 @@ -## ADFS 4.0 using OAuth 2 and OpenID - -[Related issue](https://github.com/wekan/wekan/issues/3184) - -There is these settings. - -## Snap -``` -sudo snap set oauth2-enabled='true' -sudo snap set oauth2-adfs-enabled='true' -``` -Unset: -``` -sudo snap unset oauth2-enabled -sudo snap unset oauth2-adfs-enabled -``` -## Docker and .sh/.bat -``` -OAUTH2_ENABLED=true -OAUTH2_ADFS_ENABLED=true -``` -To disable, uncomment or remove that line. diff --git a/docs/Login/Accounts-Lockout.md b/docs/Login/Accounts-Lockout.md deleted file mode 100644 index a0f07dd1f..000000000 --- a/docs/Login/Accounts-Lockout.md +++ /dev/null @@ -1,14 +0,0 @@ -## Brute force protection - -For settings, see: -- Snap: `wekan.help | grep lockout` -- Docker: Search lockout from docker-compose.yml at https://github.com/wekan/wekan - -[Removing lockout from users](https://github.com/wekan/wekan/issues/3306) - -For UCS, it's UCS VM and inside it Docker container. You just ssh your ucs VM like this, with same username password you used when installin UCS and administering UCS apps, su to root: -``` -ssh Administrator@192.168.0.100 -su -``` -And then use those Docker commands https://github.com/wekan/wekan/issues/3306#issuecomment-712743002 \ No newline at end of file diff --git a/docs/Login/B2C.md b/docs/Login/B2C.md deleted file mode 100644 index e22cf1d2a..000000000 --- a/docs/Login/B2C.md +++ /dev/null @@ -1,47 +0,0 @@ -## Azure AD B2C using OAuth2 - -- Original issue: https://github.com/wekan/wekan/issues/5242 -- B2C feature added: https://github.com/wekan/wekan/commit/93be112a9454c894c1ce3146ed377e6a6aeca64a -- Similar like [ADFS](ADFS), but `email` is first of array `userinfo[emails]` - -## Snap - -``` -sudo snap set wekan oauth2-enabled='true' -sudo snap set wekan oauth2-b2c-enabled='true' -sudo snap set wekan oauth2-username-map='sub' -sudo snap set wekan oauth2-request-permissions='openid email profile' -sudo snap set wekan oauth2-client-id='xxxxxxxx' -sudo snap set wekan oauth2-secret='xxxxxxx' -sudo snap set wekan oauth2-server-url='https://B2C_TENANT_NAME.b2clogin.com/B2C_TENANT_NAME.onmicrosoft.com/B2C_POLICY_NAME' -sudo snap set wekan oauth2-auth-endpoint='/oauth2/v2.0/authorize' -sudo snap set wekan oauth2-token-endpoint='/oauth2/v2.0/token' -sudo snap set wekan oauth2-username-map='sub' -sudo snap set wekan oauth2-email-map='email' -sudo snap set wekan oauth2-fullname-map='name' -sudo snap set wekan oauth2-id-map='sub' -``` - -## Docker - -https://github.com/wekan/wekan/blob/main/docker-compose.yml - -``` - - OAUTH2_ENABLED=true - - OAUTH2_B2C_ENABLED=true - - OAUTH2_USERNAME_MAP=sub - - OAUTH2_REQUEST_PERMISSIONS=openid email profile - - OAUTH2_CLIENT_ID=xxxxxxxx - - OAUTH2_SECRET=xxxxxxx - - OAUTH2_SERVER_URL=https://B2C_TENANT_NAME.b2clogin.com/B2C_TENANT_NAME.onmicrosoft.com/B2C_POLICY_NAME - - OAUTH2_AUTH_ENDPOINT=/oauth2/v2.0/authorize - - OAUTH2_TOKEN_ENDPOINT=/oauth2/v2.0/token - - OAUTH2_USERNAME_MAP=sub - - OAUTH2_EMAIL_MAP=email - - OAUTH2_FULLNAME_MAP=name - - OAUTH2_ID_MAP=sub -``` - -## Others - -Similar like above Docker. \ No newline at end of file diff --git a/docs/Login/CAS.md b/docs/Login/CAS.md deleted file mode 100644 index 043b54089..000000000 --- a/docs/Login/CAS.md +++ /dev/null @@ -1,13 +0,0 @@ -[CAS Issue](https://github.com/wekan/wekan/issues/3204) - -[CAS settings commit](https://github.com/wekan/wekan/commit/214c86cc22f4c721a79ec0a4a4f3bbd90d673f93) - -Please send pull requests if CAS login does not work. - -Wekan clientside code is at `wekan/client/components/main/layouts.*` - -Wekan serverside code is at: -- `wekan/server/authentication.js` at bottom -- `wekan/packages/*cas*/*` - -Originally before moving to `wekan/packages/*cas*/*` CAS code was at https://github.com/wekan/meteor-accounts-cas \ No newline at end of file diff --git a/docs/Login/Disable-Password-Login.md b/docs/Login/Disable-Password-Login.md deleted file mode 100644 index 95a9df2dd..000000000 --- a/docs/Login/Disable-Password-Login.md +++ /dev/null @@ -1,32 +0,0 @@ -## Description - -At login screen, do not show password login. Only show login button (OAuth2, LDAP, etc). - -## Snap - -``` -sudo snap set wekan password-login-enabled='false' -``` -https://github.com/wekan/wekan/blob/main/snap-src/bin/wekan-help#L614 - -## Docker -``` -- PASSWORD_LOGIN_ENABLED=false -``` -https://github.com/wekan/wekan/blob/main/docker-compose.yml#L693 - -## Windows On-Premise - -https://github.com/wekan/wekan/wiki/Offline -``` -SET PASSWORD_LOGIN_ENABLED=false -``` -https://github.com/wekan/wekan/blob/main/start-wekan.bat#L467 - -## Linux On-Premise - -https://github.com/wekan/wekan/wiki/Raspberry-Pi -``` -export PASSWORD_LOGIN_ENABLED=false -``` -https://github.com/wekan/wekan/blob/main/start-wekan.sh#L529 diff --git a/docs/Login/Forgot-Password.md b/docs/Login/Forgot-Password.md deleted file mode 100644 index bca97811d..000000000 --- a/docs/Login/Forgot-Password.md +++ /dev/null @@ -1,209 +0,0 @@ -## Snap - -**a) Wekan Snap** -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu -export PATH="$PATH:/snap/wekan/current/bin" -mongo --port 27019 -``` -If you have disabled new user registration at Admin Panel, you can enable it, and create new user your https://wekan.example.com/sign-up : -``` -db.settings.update({},{$set: {"disableRegistration":false}}) -``` -Find what users there are: -``` -db.users.find() -``` -Set some user as admin: -``` -db.users.update({username:'admin-username-here'},{$set:{isAdmin:true}}) -``` -Check are there any failed logins with wrong password, that brute force login prevention has denied login: -``` -db.AccountsLockout.Connections.find() -``` -If there are, delete all those login preventions: -``` -db.AccountsLockout.Connections.deleteMany({}) -``` -Then exit: -``` -exit -``` -Then login to Wekan and change any users passwords at `Admin Panel / People / People`. - -**b) Wekan Gantt GPL Snap** -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan-gantt-gpl/current/lib/x86_64-linux-gnu -export PATH="$PATH:/snap/wekan-gantt-gpl/current/bin" -mongo --port 27019 -``` -If you have disabled new user registration at Admin Panel, you can enable it, and create new user your https://wekan.example.com/sign-up : -``` -db.settings.update({},{$set: {"disableRegistration":false}}) -``` -Find what users there are: -``` -db.users.find() -``` -Set some user as admin: -``` -db.users.updateOne({username:'admin-username-here'},{$set:{isAdmin:true}}) -``` -Check are there any failed logins with wrong password, that brute force login prevention has denied login: -``` -db.AccountsLockout.Connections.find() -``` -If there are, delete all those login preventions: -``` -db.AccountsLockout.Connections.deleteMany({}) -``` -Then exit: -``` -exit -``` - -Then login to Wekan and change any users passwords at `Admin Panel / People / People`. - -**c) Use DBGate or Nosqlbooster** to edit wekan database users table to have admin true: -- https://github.com/wekan/wekan/wiki/Backup#dbgate-open-source-mongodb-gui -- https://github.com/wekan/wekan/wiki/Forgot-Password - -## Set user as BoardAdmin on all boards user is member of - -[Source](https://github.com/wekan/wekan/issues/2413#issuecomment-1239249563) - -``` -db.boards.updateMany( -{ members: { $elemMatch: { userId: “USER-ID-HERE”, isAdmin: false } } }, -{ -$set: { “members.$.isAdmin”: true }, -} -); -``` - -## Docker - -1. Change to inside of wekan database Docker container: -``` -docker exec -it wekan-db bash -``` -2. Start MongoDB Shell -``` -/bin/mongosh -``` -3. List databases -``` -show dbs -``` -4. Change to wekan database -``` -use wekan -``` -5. Show collections/tables -``` -show collections -``` -6. Count users -``` -db.users.count() -``` -7. If you have disabled new user registration at Admin Panel, you can enable it, and create new user your https://wekan.example.com/sign-up : -``` -db.settings.update({},{$set: {"disableRegistration":false}}) -``` -8. Find what users there are: -``` -db.users.find() -``` -9. Set some user as admin: -``` -db.users.update({username:'admin-username-here'},{$set:{isAdmin:true}}) -``` -10. Check are there any failed logins with wrong password, that brute force login prevention has denied login: -``` -db.AccountsLockout.Connections.find() -``` -11. If there are, delete all those login preventions: -``` -db.AccountsLockout.Connections.deleteMany({}) -``` -12. Then exit: -``` -exit -``` -13. Then login to Wekan and change any users passwords at `Admin Panel / People / People`. - -More info: -- https://github.com/wekan/wekan/wiki/Backup -- https://github.com/wekan/wekan/wiki/Docker - -*** - - -## OLD INFO BELOW: - -1) Download [Robo 3T](https://robomongo.org) on your Linux or Mac computer. Or, using ssh shell to server, [login to MongoDB database using mongo cli](Backup#mongodb-shell-on-wekan-snap) - -2) Make SSH tunnel to your server, from your local port 9000 (or any other) to server MongoDB port 27019: -``` -ssh -L 9000:localhost:27019 user@example.com -``` -3) Open Robo 3T, create new connection: Name, address: localhost : 9000 - -a) If you don't have self-registration disabled, register new account at /sign-up, and make yourself admin in MongoDB database: - -1) Use database that has wekan data, for example: -``` -use wekan -``` -2) Add Admin rights to some Wekan username: -``` -db.users.update({username:'admin-username-here'},{$set:{isAdmin:true}}) -``` - -b) If someone else remembers their password, and his/her login works, copy their bcrypt hashed password to your password using Robo 3T. - -c) Install Wekan elsewhere, create new user, copy bcrypt hashed password to your password. - -d) Backup, New install, Create User, Copy Password, Restore: - -1. [Backup Snap](https://github.com/wekan/wekan-snap/wiki/Backup-and-restore) -2. stop wekan `sudo snap stop wekan.wekan` -3a. Empty database by dropping wekan database in Mongo 3T -3b. Empty database in [mongo cli](mongo cli](Backup#mongodb-shell-on-wekan-snap): -``` -mongo --port 27019 -``` -Look what databases there are: -``` -show dbs -``` -Probably database is called wekan, so use it: -``` -use wekan -``` -Delete database: -``` -db.dropDatabase() -``` -4. Start wekan: -``` -sudo snap stop wekan.wekan -``` -5. Register at /sign-up -6. Copy bcrypt hashed password to text editor -7. [Restore your backup](https://github.com/wekan/wekan-snap/wiki/Backup-and-restore) -8. Change to database your new bcrypt password. - -## Don't have Admin Rights to board - -1. In Robo 3T, find where your ID that your username has: -``` -db.getCollection('users').find({username: "YOUR-USERNAME-HERE"}) -``` -2. Find board where you are not admin, using user ID you found above: -``` -db.getCollection('boards').find({members: {$elemMatch: { userId: "YOUR-USER-ID-HERE", isAdmin: false} } }) -``` -And set yourself as admin. \ No newline at end of file diff --git a/docs/Login/Google-Cloud.md b/docs/Login/Google-Cloud.md deleted file mode 100644 index 2ceebef74..000000000 --- a/docs/Login/Google-Cloud.md +++ /dev/null @@ -1 +0,0 @@ -Needs info how to enable websockets. Wekan requires working websockets support. \ No newline at end of file diff --git a/docs/Login/Google-login.md b/docs/Login/Google-login.md deleted file mode 100644 index 199be03b8..000000000 --- a/docs/Login/Google-login.md +++ /dev/null @@ -1,29 +0,0 @@ -### NOTE: BEFORE 2020-09-07 THERE WAS WRONG SETTING BELOW, IT CAUSED LOGIN WITH WRONG USER, YOU SHOULD FIX YOUR SETTINGS -### CORRECT SETTINGS ARE: -### snap set wekan oauth2-email-map='email' -### snap set wekan oauth2-username-map='email' - -[Thanks to @mlazzje for this info below](https://github.com/wekan/wekan/issues/2527#issuecomment-654155289) - -To create Google OAuth 2 credentials, you can follow this tutorial: https://developers.google.com/identity/sign-in/web/sign-in - -Then replace `CLIENT_ID` and `CLIENT_SECRET` below. - -The redirect URL is your Wekan root-url+_oauth/oidc like this: https://boards.example.com/_oauth/oidc - -If you have existing password account, and would like to switch to Google auth account, you need to rename that username and email address, so you can autoregister with your Google auth email address. Then share your boards from password account to Google auth account and set that to Google auth user as BoardAdmin. - -In your wekan config, you have to set the following information in snap: -``` -sudo snap set wekan oauth2-enabled='true' -sudo snap set wekan oauth2-client-id='CLIENT_ID' -sudo snap set wekan oauth2-secret='CLIENT_SECRET' -sudo snap set wekan oauth2-auth-endpoint='https://accounts.google.com/o/oauth2/v2/auth' -sudo snap set wekan oauth2-token-endpoint='https://oauth2.googleapis.com/token' -sudo snap set wekan oauth2-userinfo-endpoint='https://openidconnect.googleapis.com/v1/userinfo' -sudo snap set wekan oauth2-id-map='sub' -sudo snap set wekan oauth2-email-map='email' -sudo snap set wekan oauth2-username-map='email' -sudo snap set wekan oauth2-fullname-map='name' -sudo snap set wekan oauth2-request-permissions='openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email' -``` \ No newline at end of file diff --git a/docs/Login/Keycloak.md b/docs/Login/Keycloak.md deleted file mode 100644 index 296d6ea23..000000000 --- a/docs/Login/Keycloak.md +++ /dev/null @@ -1,68 +0,0 @@ -[2022 KEYCLOAK CERTIFICATE FIX HERE](https://github.com/wekan/wekan/issues/4525) - -[Somebody got Keycloak working](https://github.com/wekan/wekan/issues/3277#issuecomment-696333794) - -NOTE: Is that preffered_username setting wrong? Correct settings should be for OIDC login: - -``` -sudo snap set wekan oauth2-username-map='email' - -sudo snap set wekan oauth2-email-map='email' -``` - -[Outstanding Bug](https://github.com/wekan/wekan/issues/1874#issuecomment-460802250): Create the first user (admin) with the regular process. Then the remaining users can use the Register with OIDC process. - -Keycloak settings: [realm-export.zip](https://wekan.github.io/keycloak/realm-export.zip) - -[Keycloak at Docker Hub](https://hub.docker.com/r/jboss/keycloak) - -Environment Variables that need to be set in your Wekan environment: - -> When creating a Client in keycloak, ensure the access type is confidential under the settings tab. After clicking save, you will have a Credentials tab. You can retrieve the secret from that location. - -## Snap -Copy below commands to `auth.sh` textfile, make it executeable `chmod +x auth.sh` and run it with `./auth.sh`. -``` -sudo snap set wekan oauth2-enabled='true' -sudo snap set wekan oauth2-client-id='' -sudo snap set wekan oauth2-secret='' -sudo snap set wekan oauth2-server-url='/auth' -sudo snap set wekan oauth2-auth-endpoint='/realms//protocol/openid-connect/auth' -sudo snap set wekan oauth2-userinfo-endpoint='/realms//protocol/openid-connect/userinfo' -sudo snap set wekan oauth2-token-endpoint='/realms//protocol/openid-connect/token' -sudo snap set wekan oauth2-id-map='preferred_username' -sudo snap set wekan oauth2-username-map='preferred_username' -sudo snap set wekan oauth2-fullname-map='given_name' -sudo snap set wekan oauth2-email-map='email' -``` -### Debugging, if Snap OIDC login does not work -``` -sudo snap set wekan debug='true' -``` -Click Oidc button. Then: -``` -sudo snap logs wekan.wekan -sudo systemctl status snap.wekan.wekan -``` - -## Docker - -[docker-compose.yml](https://github.com/wekan/wekan/blob/main/docker-compose.yml) -``` -- DEBUG=true -- OAUTH2_ENABLED=true -- OAUTH2_CLIENT_ID= -- OAUTH2_SERVER_URL=/auth -- OAUTH2_AUTH_ENDPOINT=/realms//protocol/openid-connect/auth -- OAUTH2_USERINFO_ENDPOINT=/realms//protocol/openid-connect/userinfo -- OAUTH2_TOKEN_ENDPOINT=/realms//protocol/openid-connect/token -- OAUTH2_SECRET= -- OAUTH2_ID_MAP=preferred_username -- OAUTH2_USERNAME_MAP=preferred_username -- OAUTH2_FULLNAME_MAP=given_name -- OAUTH2_EMAIL_MAP=email -``` -### Debugging, if Docker OIDC login does not work -``` -docker logs wekan-app -``` \ No newline at end of file diff --git a/docs/Login/LDAP-AD-Simple-Auth.md b/docs/Login/LDAP-AD-Simple-Auth.md deleted file mode 100644 index 4968b9a32..000000000 --- a/docs/Login/LDAP-AD-Simple-Auth.md +++ /dev/null @@ -1,89 +0,0 @@ -- [**OTHER LDAP Settings**](LDAP-AD-Simple-Auth) and [**RELATED Search Filter Settings**](https://github.com/wekan/wekan/issues/3908#issuecomment-887545168): - -``` -- LDAP_USER_SEARCH_FILTER=(objectClass=user) -- LDAP_EMAIL_FIELD=mail -``` - -- [Original PR](https://github.com/wekan/wekan/pull/3909). Thanks to indika-dev. -- [Added settings for all remainin Wekan Standalone (non-Sandstorm) platforms](https://github.com/wekan/wekan/commit/fe40f35d6d9b6293f3bdbf5bc0f3e8e708c59518) and Docs to this wiki page. Thanks to xet7. -- When enabled, LDAP_BASEDN is not needed. Example: `true` -- Also change `mydomain.com` to your domain. -- If you use LDAP Sync, also change those settings. - -## Docker - -Uncomment settings lines this wasy at [docker-compose.yml](https://github.com/wekan/wekan/blob/main/docker-compose.yml) to enable: -``` - #----------------------------------------------------------------- - # ==== LDAP AD Simple Auth ==== - # - # Set to true, if you want to connect with Active Directory by Simple Authentication. - # When using AD Simple Auth, LDAP_BASEDN is not needed. - # - # Example: - #- LDAP_AD_SIMPLE_AUTH=true - # - # === LDAP User Authentication === - # - # a) Option to login to the LDAP server with the user's own username and password, instead of - # an administrator key. Default: false (use administrator key). - # - # b) When using AD Simple Auth, set to true, when login user is used for binding, - # and LDAP_BASEDN is not needed. - # - # Example: - #- LDAP_USER_AUTHENTICATION=true - # - # Which field is used to find the user for the user authentication. Default: uid. - #- LDAP_USER_AUTHENTICATION_FIELD=uid - # - # === LDAP Default Domain === - # - # a) In case AD SimpleAuth is configured, the default domain is appended to the given - # loginname for creating the correct username for the bind request to AD. - # - # b) The default domain of the ldap it is used to create email if the field is not map - # correctly with the LDAP_SYNC_USER_DATA_FIELDMAP - # - # Example : - #- LDAP_DEFAULT_DOMAIN=mydomain.com - # - #----------------------------------------------------------------- -``` - -## Snap - -Wekan, enable: -``` -sudo snap set wekan ldap-ad-simple-auth='true' - -sudo snap set wekan ldap-user-authentication='true' - -sudo snap set wekan ldap-default-domain='mydomain.com' -``` -Wekan, disable: -``` -sudo snap unset wekan ldap-ad-simple-auth - -sudo snap unset wekan ldap-user-authentication - -sudo snap unset wekan ldap-default-domain -``` - -[Wekan Gantt GPL](https://github.com/wekan/wekan/issues/2870#issuecomment-721364824), enable: -``` -sudo snap set wekan-gantt-gpl ldap-ad-simple-auth='true' - -sudo snap set wekan-gantt-gpl ldap-user-authentication='true' - -sudo snap set wekan-gantt-gpl ldap-default-domain='mydomain.com' -``` -Wekan Gantt GPL, disable: -``` -sudo snap unset wekan-gantt-gpl ldap-ad-simple-auth - -sudo snap unset wekan-gantt-gpl ldap-user-authentication - -sudo snap unset wekan-gantt-gpl ldap-default-domain -``` diff --git a/docs/Login/LDAP.md b/docs/Login/LDAP.md deleted file mode 100644 index 33f885ea6..000000000 --- a/docs/Login/LDAP.md +++ /dev/null @@ -1,471 +0,0 @@ -## LDAP info - -- [LDAP sync script, that also correctly removes users](https://github.com/wekan/wekan/blob/main/docs/Login/ldap-sync/ldap-sync.py) -- [LDAP AD Simple Auth](LDAP-AD-Simple-Auth) 2021-07-24 and related [Search Filter Settings](https://github.com/wekan/wekan/issues/3908#issuecomment-887545168): - -``` -- LDAP_USER_SEARCH_FILTER=(objectClass=user) -- LDAP_EMAIL_FIELD=mail -``` - -- [MS AD with Windows 2012 server](https://github.com/wekan/wekan/issues/3292#issuecomment-703246384) -- [Additional info about LDAP docs here](https://github.com/wekan/wekan-ldap/issues/77) -- [LDAP issues](https://github.com/wekan/wekan-ldap/issues) -- [Univention LDAP related issues](https://github.com/wekan/univention/issues) -- [Teams/Organizations feature related LDAP plans](https://github.com/wekan/wekan/issues/802). Needs info from LDAP experts to describe how LDAP works. -- [Wekan LDAP code](https://github.com/wekan/wekan/tree/main/packages/wekan-ldap) - -*** - -## Snap - -LDAP is available on Snap Stable channel. Settings can be seen with command `wekan.help` and from repo https://github.com/wekan/wekan-ldap . More settings at https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys - -You see all settings with: -``` -wekan.help | less -``` -For root-url, see [Settings](Settings) - -For Caddy/Wekan/RocketChat Snap settings, see [Snap install page](https://github.com/wekan/wekan-snap/wiki/Install), [OAuth2 page](OAuth2#snap) and [Caddy page](Caddy-Webserver-Config). Instead of Caddy you can also use [Nginx](Nginx-Webserver-Config) or [Apache](Apache). - -## LDAP Filter settings - -For better working LDAP filter setting than those below, settings info here: -https://github.com/wekan/univention/issues/5 - -### Active Directory LDAP part -[Source](https://github.com/wekan/wekan/issues/2822#issuecomment-568314135) -``` -sudo snap set wekan ldap-enable='true' -sudo snap set wekan default-authentication-method='ldap' -sudo snap set wekan ldap-port='389' -sudo snap set wekan ldap-host='192.168.1.100' -sudo snap set wekan ldap-basedn='OU=Domain Users,DC=sub,DC=domain,DC=tld' -sudo snap set wekan ldap-login-fallback='false' -sudo snap set wekan ldap-reconnect='true' -sudo snap set wekan ldap-timeout='10000' -sudo snap set wekan ldap-idle-timeout='10000' -sudo snap set wekan ldap-connect-timeout='10000' -sudo snap set wekan ldap-authentication='true' -sudo snap set wekan ldap-authentication-userdn='CN=LDAP-User,OU=Service Accounts,DC=sub,DC=domain,DC=tld' -sudo snap set wekan ldap-authentication-password='' -sudo snap set wekan ldap-log-enabled='true' -sudo snap set wekan ldap-background-sync='true' -# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds -# The format must be as specified in: -# https://bunkat.github.io/later/parsers.html#text -#sudo snap set wekan ldap-background-sync-interval='every 1 hours' -# At which interval does the background task sync in milliseconds. -# If not in use, Leave this unset, so it uses default, and does not crash. -# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 -#sudo snap set wekan ldap-background-sync-interval='' -sudo snap set wekan ldap-background-sync-interval='every 1 hours' -sudo snap set wekan ldap-background-sync-keep-existant-users-updated='true' -sudo snap set wekan ldap-background-sync-import-new-users='true' -sudo snap set wekan ldap-encryption='false' -sudo snap set wekan ldap-user-search-field='sAMAccountName' -sudo snap set wekan ldap-username-field='sAMAccountName' -sudo snap set wekan ldap-fullname-field='cn' -``` - -### FreeIPA v4.6.6 - -[Source](https://github.com/wekan/wekan/issues/3357) - -```bash -snap set wekan ldap-enable='true' -snap set wekan ldap-host='ldap.example.com' - -# Use 'tls' and port 389 for STARTTLS, which is more secure than standard LDAPS. -snap set wekan ldap-port='389' -snap set wekan ldap-encryption='tls' - -snap set wekan ldap-timeout='10000' -snap set wekan ldap-idle-timeout='10000' -snap set wekan ldap-connect-timeout='10000' -snap set wekan ldap-authentication='true' -snap set wekan ldap-authentication-userdn='uid=ldapuser,cn=users,cn=accounts,dc=example, dc=com' -snap set wekan ldap-authentication-password='password' - -# This must be set to "false" for self-signed certificates to work - enable it -# for better security if you are using a certificate verified by a commercial -# Certificate Authority (like DigiCert, Let's Encrypt, etc.) -snap set wekan ldap-reject-unauthorized='false' - - -# This must be the plaintext certificate data, which you can get by running the -# follwing command: -# cat ca.example.com.pem | tr -d '\n' -# This removes the hidden newline characters, and allows you to copy it -# straight from your terminal and past it into the snap set command. -# -# Pointing it to a file doesn't work - I tried. -snap set wekan ldap-ca-cert='-----BEGIN CERTIFICATE-----[blahblahblah]-----END CERTIFICATE-----' - -snap set wekan ldap-log-enabled='true' -snap set wekan ldap-basedn='dc=example,dc=com' -snap set wekan ldap-background-sync='true' -snap set wekan ldap-background-sync-keep-existant-users-updated='true' -snap set wekan ldap-background-sync-import-new-users='true' -# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds -# The format must be as specified in: -# https://bunkat.github.io/later/parsers.html#text -#sudo snap set wekan ldap-background-sync-interval='every 1 hours' -# At which interval does the background task sync in milliseconds. -# If not in use, Leave this unset, so it uses default, and does not crash. -# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 -#sudo snap set wekan ldap-background-sync-interval='' -snap set wekan ldap-background-sync-interval='every 1 hours' -snap set wekan ldap-merge-existing-users='true' -snap set wekan ldap-user-search-field='uid' -snap set wekan ldap-user-search-filter='(&(objectclass=person))' -snap set wekan ldap-user-search-scope='sub' -snap set wekan ldap-username-field='uid' -snap set wekan ldap-fullname-field='displayName' -snap set wekan ldap-email-field='mail' -snap set wekan ldap-sync-user-data='true' -snap set wekan ldap-sync-user-data-fieldmap='{"displayName":"name", "mail":"email", "initials":"initials"}' -``` - -### OpenLDAP -[Source](https://github.com/wekan/wekan/issues/2822#issuecomment-564451384) -``` -sudo snap set wekan default-authentication-method='ldap' -sudo snap set wekan ldap-authentication='true' -sudo snap set wekan ldap-authentication-password='********' -sudo snap set wekan ldap-authentication-userdn='cn=admin,dc=*******,dc=lan' -sudo snap set wekan ldap-background-sync='true' -sudo snap set wekan ldap-background-sync-import-new-users='true' -# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds -# The format must be as specified in: -# https://bunkat.github.io/later/parsers.html#text -#sudo snap set wekan ldap-background-sync-interval='every 1 hours' -# At which interval does the background task sync in milliseconds. -# If not in use, Leave this unset, so it uses default, and does not crash. -# https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 -#sudo snap set wekan ldap-background-sync-interval='' -sudo snap set wekan ldap-background-sync-interval='every 1 hours' -sudo snap set wekan ldap-basedn='dc=*****,dc=lan' -sudo snap set wekan ldap-email-field='mail' -sudo snap set wekan ldap-enable='true' -sudo snap set wekan ldap-fullname-field='cn' -sudo snap set wekan ldap-group-filter-enable='false' -sudo snap set wekan ldap-group-filter-id-attribute='cn' -sudo snap set wekan ldap-group-filter-objectclass='groupOfUniqueNames' -sudo snap set wekan ldap-host='192.168.100.7' -sudo snap set wekan ldap-log-enabled='false' -sudo snap set wekan ldap-login-fallback='true' -sudo snap set wekan ldap-merge-existing-users='true' -sudo snap set wekan ldap-port='389' -sudo snap set wekan ldap-sync-admin-groups='administrator' -sudo snap set wekan ldap-user-search-field='uid' -sudo snap set wekan ldap-user-search-filter='(&(objectclass=inetOrgPerson))' -sudo snap set wekan ldap-user-search-scope='sub' -sudo snap set wekan ldap-username-field='uid' -``` - -## Docker - -LDAP login works now by using this docker-compose.yml file: -https://raw.githubusercontent.com/wekan/wekan/edge/docker-compose.yml -adding ROOT_URL, LDAP settings etc to that file. - -Using this docker-compose: -https://docs.docker.com/compose/install/ - -With this command: -``` -docker-compose up -d --no-build -``` - -## Bugs and Feature Requests - -[LDAP Bugs and Feature Requests](https://github.com/wekan/wekan-ldap/issues) -## Example LDAP settings for Docker - -Note: Some newer settings could be missing from example below. Someone could copy newest missing settings from docker-compose.yml above to example below. Some examples are also at closed and open issues at https://github.com/wekan/wekan-ldap/issues - -``` -version: '2' - -services: - - wekandb: - # All Wekan data is stored in MongoDB. For backup and restore, see: - # https://github.com/wekan/wekan/wiki/Export-Docker-Mongo-Data - image: mongo:4.0.3 - container_name: wekan-db - restart: always - command: mongod --smallfiles --oplogSize 128 - networks: - - wekan-tier - expose: - - 27017 - volumes: - - wekan-db:/data/db - - wekan-db-dump:/dump - - wekan: - # Wekan container only has Node.js and related code, - # there is no data stored here. - # - # Docker Hub, usually broken: - #image: wekanteam/wekan:latest - # - # Quay, usually works, updates faster: - image: quay.io/wekan/wekan:meteor-1.8 - container_name: wekan-app - restart: always - networks: - - wekan-tier - #--------------------------------------------------------------- - # For running Wekan in different port like 3000, use: 3000:80 - ports: - - 3000:3000 - environment: - #--------------------------------------------------------------- - # == ROOT_URL SETTING == - # Change ROOT_URL to your real Wekan URL, for example: - # http://example.com - # http://example.com/wekan - # http://192.168.1.100 - #--------------------------------------------------------------- - - ROOT_URL= - #--------------------------------------------------------------- - # == PORT SETTING == - # Not needed on Docker, but if you had installed from source, - # you could also have setup Wekan Node.js port at localhost - # with setting: PORT=3001 - # and have Nginx proxy to port 3001, see Wekan wiki. - #--------------------------------------------------------------- - - PORT=3000 - #--------------------------------------------------------------- - # == MONGO URL AND OPLOG SETTINGS == - # https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-378343587 - # We've fixed our CPU usage problem today with an environment - # change around Wekan. I wasn't aware during implementation - # that if you're using more than 1 instance of Wekan - # (or any MeteorJS based tool) you're supposed to set - # MONGO_OPLOG_URL as an environment variable. - # Without setting it, Meteor will perform a pull-and-diff - # update of it's dataset. With it, Meteor will update from - # the OPLOG. See here - # https://blog.meteor.com/tuning-meteor-mongo-livedata-for-scalability-13fe9deb8908 - # After setting - # MONGO_OPLOG_URL=mongodb://:@/local?authSource=admin&replicaSet=rsWekan - # the CPU usage for all Wekan instances dropped to an average - # of less than 10% with only occasional spikes to high usage - # (I guess when someone is doing a lot of work) - #--------------------------------------------------------------- - - MONGO_URL=mongodb://wekandb:27017/wekan - #--------------------------------------------------------------- - # - MONGO_OPLOG_URL=mongodb://:@/local?authSource=admin&replicaSet=rsWekan - #--------------------------------------------------------------- - # == EMAIL SETTINGS == - # Email settings are required in both MAIL_URL and Admin Panel, - # see https://github.com/wekan/wekan/wiki/Troubleshooting-Mail - # For SSL in email, change smtp:// to smtps:// - # NOTE: Special characters need to be url-encoded in MAIL_URL. - #--------------------------------------------------------------- - - MAIL_URL='smtp://:25/?ignoreTLS=true&tls={rejectUnauthorized:false}' - - MAIL_FROM='Wekan Notifications ' - - #--------------------------------------------------------------- - # == WEKAN API == - # Wekan Export Board works when WITH_API='true'. - # If you disable Wekan API, Export Board does not work. - - WITH_API=true - #--------------------------------------------------------------- - ## Optional: Integration with Matomo https://matomo.org that is installed to your server - ## The address of the server where Matomo is hosted: - # - MATOMO_ADDRESS=https://example.com/matomo - ## The value of the site ID given in Matomo server for Wekan - # - MATOMO_SITE_ID=123456789 - ## The option do not track which enables users to not be tracked by matomo" - # - MATOMO_DO_NOT_TRACK=false - ## The option that allows matomo to retrieve the username: - # - MATOMO_WITH_USERNAME=true - #--------------------------------------------------------------- - # Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside. - # Setting this to false is not recommended, it also disables all other browser policy protections - # and allows all iframing etc. See wekan/server/policy.js - - BROWSER_POLICY_ENABLED=true - # When browser policy is enabled, HTML code at this Trusted URL can have iframe that embeds Wekan inside. - - TRUSTED_URL='' - #--------------------------------------------------------------- - # What to send to Outgoing Webhook, or leave out. Example, that includes all that are default: cardId,listId,oldListId,boardId,comment,user,card,commentId . - # example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId - - WEBHOOKS_ATTRIBUTES='' - #--------------------------------------------------------------- - # LDAP_ENABLE : Enable or not the connection by the LDAP - # example : LDAP_ENABLE=true - - LDAP_ENABLE=true - # LDAP_PORT : The port of the LDAP server - # example : LDAP_PORT=389 - - LDAP_PORT=389 - # LDAP_HOST : The host server for the LDAP server - # example : LDAP_HOST=localhost - - LDAP_HOST= - # LDAP_BASEDN : The base DN for the LDAP Tree - # example : LDAP_BASEDN=ou=user,dc=example,dc=org - - LDAP_BASEDN=ou=prod,dc=mydomain,dc=com - # LDAP_LOGIN_FALLBACK : Fallback on the default authentication method - # example : LDAP_LOGIN_FALLBACK=true - - LDAP_LOGIN_FALLBACK=false - # LDAP_RECONNECT : Reconnect to the server if the connection is lost - # example : LDAP_RECONNECT=false - - LDAP_RECONNECT=true - # LDAP_TIMEOUT : Overall timeout, in milliseconds - # example : LDAP_TIMEOUT=12345 - - LDAP_TIMEOUT=10000 - # LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds - # example : LDAP_IDLE_TIMEOUT=12345 - - LDAP_IDLE_TIMEOUT=10000 - # LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds - # example : LDAP_CONNECT_TIMEOUT=12345 - - LDAP_CONNECT_TIMEOUT=10000 - # LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search - # example : LDAP_AUTHENTIFICATION=true - - LDAP_AUTHENTIFICATION=true - # LDAP_AUTHENTIFICATION_USERDN : The search user DN - # example : LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org - - LDAP_AUTHENTIFICATION_USERDN=cn=wekan_adm,ou=serviceaccounts,ou=admin,ou=prod,dc=mydomain,dc=com - # LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user - # example : AUTHENTIFICATION_PASSWORD=admin - - LDAP_AUTHENTIFICATION_PASSWORD=pwd - # LDAP_LOG_ENABLED : Enable logs for the module - # example : LDAP_LOG_ENABLED=true - - LDAP_LOG_ENABLED=true - # LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background - # example : LDAP_BACKGROUND_SYNC=true - - LDAP_BACKGROUND_SYNC=false - # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds - # The format must be as specified in: - # https://bunkat.github.io/later/parsers.html#text - #- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours - # At which interval does the background task sync in milliseconds. - # Leave this unset, so it uses default, and does not crash. - # https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 - - LDAP_BACKGROUND_SYNC_INTERVAL='' - # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : - # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true - - LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false - # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS : - # example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true - - LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false - # LDAP_ENCRYPTION : If using LDAPS - # example : LDAP_ENCRYPTION=true - - LDAP_ENCRYPTION=false - # LDAP_CA_CERT : The certification for the LDAPS server - # example : LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+zCCA+OgAwIBAgIkAhwR/6TVLmdRY6hHxvUFWc0+Enmu/Hu6cj+G2FIdAgIC...-----END CERTIFICATE----- - #- LDAP_CA_CERT='' - # LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate - # example : LDAP_REJECT_UNAUTHORIZED=true - - LDAP_REJECT_UNAUTHORIZED=false - # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed - # example : LDAP_USER_SEARCH_FILTER= - - LDAP_USER_SEARCH_FILTER= - # LDAP_USER_SEARCH_SCOPE : Base (search only in the provided DN), one (search only in the provided DN and one level deep), or subtree (search the whole subtree) - # example : LDAP_USER_SEARCH_SCOPE=one - - LDAP_USER_SEARCH_SCOPE= - # LDAP_USER_SEARCH_FIELD : Which field is used to find the user - # example : LDAP_USER_SEARCH_FIELD=uid - - LDAP_USER_SEARCH_FIELD=sAMAccountName - # LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited) - # example : LDAP_SEARCH_PAGE_SIZE=12345 - - LDAP_SEARCH_PAGE_SIZE=0 - # LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited) - # example : LDAP_SEARCH_SIZE_LIMIT=12345 - - LDAP_SEARCH_SIZE_LIMIT=0 - # LDAP_GROUP_FILTER_ENABLE : Enable group filtering - # example : LDAP_GROUP_FILTER_ENABLE=true - - LDAP_GROUP_FILTER_ENABLE=false - # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering - # example : LDAP_GROUP_FILTER_OBJECTCLASS=group - - LDAP_GROUP_FILTER_OBJECTCLASS= - # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : - # example : - - LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE= - # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : - # example : - - LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE= - # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : - # example : - - LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT= - # LDAP_GROUP_FILTER_GROUP_NAME : - # example : - - LDAP_GROUP_FILTER_GROUP_NAME= - # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier) - # example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid - - LDAP_UNIQUE_IDENTIFIER_FIELD= - # LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8 - # example : LDAP_UTF8_NAMES_SLUGIFY=false - - LDAP_UTF8_NAMES_SLUGIFY=true - # LDAP_USERNAME_FIELD : Which field contains the ldap username - # example : LDAP_USERNAME_FIELD=username - - LDAP_USERNAME_FIELD=sAMAccountName - # LDAP_MERGE_EXISTING_USERS : - # example : LDAP_MERGE_EXISTING_USERS=true - - LDAP_MERGE_EXISTING_USERS=false - # LDAP_SYNC_USER_DATA : - # example : LDAP_SYNC_USER_DATA=true - - LDAP_SYNC_USER_DATA=false - # LDAP_SYNC_USER_DATA_FIELDMAP : - # example : LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"} - # LDAP_SYNC_GROUP_ROLES : - # example : - - LDAP_SYNC_GROUP_ROLES='' - # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP - # example : - - LDAP_DEFAULT_DOMAIN=mydomain.com -#--------------------------------------------------------------- - - depends_on: - - wekandb - - wekanproxy - - - wekanproxy: - image: nginx:1.12 - container_name: wekan-proxy - restart: always - networks: - - wekan-tier - ports: - - 443:443 - - 80:80 - volumes: - - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro - - ./nginx/ssl/ssl.conf:/etc/nginx/conf.d/ssl/ssl.conf:ro - - ./nginx/ssl/testvm-ehu.crt:/etc/nginx/conf.d/ssl/certs/mycert.crt:ro - - ./nginx/ssl/testvm-ehu.key:/etc/nginx/conf.d/ssl/certs/mykey.key:ro - - ./nginx/ssl/pphrase:/etc/nginx/conf.d/ssl/pphrase:ro - -#------------------------------------------------------------------ -# When using Wekan both at office LAN and remote VPN: -# 1) Have above Wekan docker container config with LAN IP address -# 2) Copy all of above Wekan config below, change name to different -# like wekan2 or wekanvpn, and change ROOT_URL to server VPN IP -# address. -# 3) This way both Wekan containers can use same MongoDB database -# and see the same Wekan boards. -# 4) You could also add 3rd Wekan container for 3rd network etc. -#------------------------------------------------------------------ -# wekan2: -# ....COPY CONFIG FROM ABOVE TO HERE... -# environment: -# - ROOT_URL='http://10.10.10.10' -# ...COPY CONFIG FROM ABOVE TO HERE... - -volumes: - wekan-db: - driver: local - wekan-db-dump: - driver: local - -networks: - wekan-tier: - driver: bridge -``` - diff --git a/docs/Login/Let's-Encrypt-and-Google-Auth.md b/docs/Login/Let's-Encrypt-and-Google-Auth.md deleted file mode 100644 index d2ab07ec1..000000000 --- a/docs/Login/Let's-Encrypt-and-Google-Auth.md +++ /dev/null @@ -1,70 +0,0 @@ -Tested on Ubuntu 16.04 based distro. - -Wekan installed with https://github.com/wekan/wekan/wiki/Export-Docker-Mongo-Data - -## A) Let's Encrypt support, without Google Auth: - -1) https://caddyserver.com config Caddyfile: -```bash -my.domain.com { - proxy / localhost:8080 -} -``` - -2) Depending with what user you use to run Caddy, adding privileges to that user: -```bash -sudo setcap cap_net_bind_service=+ep ./caddy -``` - -## B) Caddy Let's Encrypt => Google Auth only allowed email addresses => Wekan - -1) https://caddyserver.com config Caddyfile: -```bash -my.domain.com { - proxy / localhost:7000 -} -``` - -2) Depending with what user you use to run Caddy, adding privileges to that user: -```bash -sudo setcap cap_net_bind_service=+ep ./caddy -``` - -3) Adding Google Auth, so only those email addresses can login: - -https://www.npmjs.com/package/proxybouncer - -4) Create nologin user for proxybouncer: -```bash -useradd -M proxybouncer -usermod -L proxyboucer -``` - -5) /etc/systemd/system/proxybouncer.service: -```bash -[Unit] -Description=Proxybouncer - -[Service] -ExecStart=/usr/local/bin/proxybouncer -Restart=always -RestartSec=5 # Restart service after 10 seconds if node service crashes -StandardOutput=syslog # Output to syslog -StandardError=syslog # Output to syslog -SyslogIdentifier=proxybouncer -User=proxybouncer -Group=proxybouncer -Environment=PORT=7000 MY_URL=https://my.domain.com PROXY_TARGET=http://localhost:8080 GOOGLE_CLIENT_ID=... GOOGLE_CLIENT_SECRET=... ALLOWED_EMAILS=.*@domain.com$ COOKIE_SECRET=... - -[Install] -WantedBy=multi-user.target -``` - -6) Enable proxybouncer service: -```bash -sudo systemctl enable proxybouncer -sudo systemclt start proxybouncer -``` -Question: Does this setup imply that everyone will be logged in to Wekan as 'proxybouncer'? Is there a way to pass username from Google via headers, etc.? - -Answer: First login to Proxybouncer can limit login domain of G Suite. Second login is using Wekan username and password. There is no integrated login yet for standalone Wekan like there is for https://sandstorm.io \ No newline at end of file diff --git a/docs/Login/Multitenancy.md b/docs/Login/Multitenancy.md deleted file mode 100644 index e6ba9f08e..000000000 --- a/docs/Login/Multitenancy.md +++ /dev/null @@ -1,12 +0,0 @@ -Q: ​​Is Multi-tenancy like ability to configure multiple ROOT_URL for same Meteor app? Or having relative URLs? - -A: Yes - -https://www.youtube.com/watch?v=917v1a01-Ko - -https://github.com/Meteor-Community-Packages/meteor-partitioner - -Related: - -- https://www.enterpriseready.io -- https://github.com/clinical-meteor/hipaa-audit-log diff --git a/docs/Login/Nextcloud.md b/docs/Login/Nextcloud.md deleted file mode 100644 index c1f6aee94..000000000 --- a/docs/Login/Nextcloud.md +++ /dev/null @@ -1,3 +0,0 @@ -https://github.com/wekan/wekan/pull/3248/files - -https://github.com/wekan/wekan/pull/2897/files \ No newline at end of file diff --git a/docs/Login/OAuth2.md b/docs/Login/OAuth2.md deleted file mode 100644 index c62df3efd..000000000 --- a/docs/Login/OAuth2.md +++ /dev/null @@ -1,315 +0,0 @@ -- [More RocketChat fixes here](https://github.com/wekan/wekan/wiki/RocketChat) -- [OAuth2 small bug](https://github.com/wekan/wekan/issues/1874) - currently OAuth2 works mostly - -# OAuth2 providers - -You can use some OAuth2 providers for logging into Wekan, for example: -- [Auth0](OAuth2#auth0) - works -- [Rocket.Chat](OAuth2#rocketchat-providing-oauth2-login-to-wekan) - works -- [GitLab](OAuth2#gitlab-providing-oauth2-login-to-wekan) - works -- Google - not tested yet -- [LemonLDAP::NG](OAuth2#lemonldapng) - works - -You can ask your identity provider (LDAP, SAML etc) do they support adding OAuth2 application like Wekan. - -## GitLab providing OAuth2 login to Wekan - -[Thanks to derhelge who figured out GitLab login](https://github.com/wekan/wekan/issues/3156). - -[GitLab login related debugging](https://github.com/wekan/wekan/issues/3321) - -These are the settings (snap installation): -```shell -sudo snap set wekan oauth2-enabled='true' -sudo snap set wekan oauth2-client-id='xxx' -sudo snap set wekan oauth2-secret='xxx' -sudo snap set wekan oauth2-server-url='https://gitlab.example.com/' -sudo snap set wekan oauth2-auth-endpoint='oauth/authorize' -sudo snap set wekan oauth2-userinfo-endpoint='oauth/userinfo' -sudo snap set wekan oauth2-token-endpoint='oauth/token' -sudo snap set wekan oauth2-id-map='sub' -sudo snap set wekan oauth2-username-map='nickname' -sudo snap set wekan oauth2-fullname-map='name' -sudo snap set wekan oauth2-email-map='email' -sudo snap set wekan oauth2-request-permissions='openid profile email' -``` -And in GitLab you have to set the same scopes inside the created Application: -* openid -* profile -* email - -The redirect URL is described in the wekan wiki: https://wekan.example.com/_oauth/oidc - -## Rocket.Chat providing OAuth2 login to Wekan - -- [More RocketChat fixes here](https://github.com/wekan/wekan/wiki/RocketChat) -- [RocketChat Skip Install Registration Wizard Fix](https://github.com/RocketChat/Rocket.Chat/issues/31163#issuecomment-1848364117) - -> So for someone using snap, it means creating a file `/var/snap/rocketchat-server/common/override-setup-wizard.env ` (the name of the file itself could be anything as long as it has an .env extension) and setting its content to `OVERWRITE_SETTING_Show_Setup_Wizard=completed` -> -> Then, restarting the server by `systemctl restart snap.rocketchat-server.rocketchat-server.service` - -- [RocketChat Webhook workaround](https://github.com/wekan/univention/issues/15) - -Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when Rocket.Chat is providing OAuth2 login to Wekan. - -If there is existing username/password account in Wekan, OAuth2 merges both logins. - -Source: [OAuth2 Pull Request](https://github.com/wekan/wekan/pull/1578) - -# Docker - -https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml#L146-L166 - -# Snap - -### 1) Install Rocket.Chat - -[Rocket.Chat Snap](https://rocket.chat/docs/installation/manual-installation/ubuntu/snaps/) has Node at port 3000 and mongodb at port 27017. -``` -sudo snap install rocketchat-server -sudo systemctl disable rocketchat-server.rocketchat-caddy -sudo systemctl stop rocketchat-server.rocketchat-caddy -``` - -### 2) Install Wekan - -[Wekan Snap](https://github.com/wekan/wekan-snap/wiki/Install) has Node at port 3001 and MongoDB at port 27019. -``` -sudo snap install wekan -sudo snap set wekan root-url='https://BOARDS.YOURDOMAIN.COM' -sudo snap set wekan port='3001' -sudo snap set core refresh.schedule=02:00-04:00 -sudo snap set wekan with-api='true' -``` -Email settings [ARE NOT REQUIRED](Troubleshooting-Mail), Wekan works without setting up Email. -``` -sudo snap set wekan mail-url='smtps://user:pass@MAILSERVER.YOURDOMAIN.COM:453' -sudo snap set wekan mail-from='Wekan Boards ' -``` -Edit Caddyfile: -``` -sudo nano /var/snap/wekan/common/Caddyfile -``` -Add Caddy config. This uses free Let's Encrypt SSL. You can also use [free CloudFlare wildcard SSL or any other SSL cert](Caddy-Webserver-Config). -``` -boards.yourdomain.com { - proxy / localhost:3001 { - websocket - transparent - } -} - -chat.yourdomain.com { - proxy / localhost:3000 { - websocket - transparent - } -} -``` -Enable Wekan's Caddy: -``` -sudo snap set wekan caddy-enabled='true' -``` - -### 3) Add Rocket.Chat settings - -Login to Rocket.Chat at https://chat.yourdomain.com . - -Accept chat URL to be https://chat.yourdomain.com . - -Click: (3 dots) Options / Administration / OAuth Apps / NEW APPLICATION - -CHANGE BELOW ONLY THOSE THAT ARE UPPER CASE, AND URLs TO LOWER CASE. - -Add settings: - -``` -Active: [X] True -Application Name: WEKAN -Redirect URI: https://BOARDS.YOURDOMAIN.COM/_oauth/oidc -Client ID: abcde12345 <=== Rocket.Chat generates random text to here -Client Secret: 54321abcde <=== Rocket.Chat generates random text to here -Authorization URL: https://CHAT.YOURDOMAIN.COM/oauth/authorize -Access Token URL: https://CHAT.YOURDOMAIN.COM/oauth/token -``` -Save Changes. - -### 4) Add Wekan settings -Copy below commands to `auth.sh` textfile, make it executeable `chmod +x auth.sh` and run it with `./auth.sh`. - -CHANGE BELOW ONLY THOSE THAT ARE UPPER CASE, AND URLs TO LOWER CASE. -``` -sudo snap set wekan oauth2-enabled='true' -sudo snap set wekan oauth2-client-id='YOUR-CLIENT-ID' -sudo snap set wekan oauth2-secret='YOUR-CLIENT-SECRET' -sudo snap set wekan oauth2-server-url='https://CHAT.YOURDOMAIN.COM/' -sudo snap set wekan oauth2-auth-endpoint='oauth/authorize' -sudo snap set wekan oauth2-userinfo-endpoint='oauth/userinfo' -sudo snap set wekan oauth2-token-endpoint='oauth/token' -sudo snap set wekan oauth2-id-map='preffered_username' -sudo snap set wekan oauth2-username-map='preffered_username' -sudo snap set wekan oauth2-fullname-map='preffered_username' -sudo snap set wekan oauth2-email-map='email' -``` -### If login does not work, debug it -``` -sudo snap set wekan debug='true' -``` -Click Oidc button. Then: -``` -sudo snap logs wekan.wekan -sudo systemctl status snap.wekan.wekan -``` - -### 5) Login to Wekan - -1) Go to https://boards.example.com - -2) Click `Sign in with Oidc` - -3) Click `Authorize` . This is asked only first time when logging in to Wekan with Rocket.Chat. - -Wekan login to Rocket.Chat - -### 6) Set your Full Name - -Currently Full Name is not preserved, so you need to change it. - -1) Click `Your username / Profile` - -2) Add info and Save. - -Wekan login to Rocket.Chat - -### 7) Add more login options to Rocket.Chat - -1) At Rocket.Chat, Click: (3 dots) Options / Administration - -2) There are many options at OAuth menu. Above and below of OAuth are also CAS, LDAP and SAML. - -Wekan login to Rocket.Chat - -# Auth0 - -[Auth0](https://auth0.com) can provide PasswordlessEmail/Google/Facebook/LinkedIn etc login options to Wekan. - -### 1) Auth0 / Applications / Add / Regular Web Application / Auth0 Settings - -CHANGE BELOW ONLY THOSE THAT ARE UPPER CASE, AND URLs TO LOWER CASE. -``` -Client ID: <== Copy to below snap settings -Secret: <== Copy to below snap settings -Account url: YOURACCOUNT.eu.auth0.com <== Copy to below snap settings -Application Logo: <== Add your logo -Application Type: Single Page Application -Token Endpoint Authentication Method: Post -Allowed Callback URLs: https://BOARDS.YOURDOMAIN.COM/_oauth/oidc <== Change your Wekan address -Allowed Web Origins: https://BOARDS.YOURDOMAIN.COM <== Change your Wekan address -Use Auth0 instead of the IdP to do Single Sign On: [X] -``` -If you need more info, they are at bottom of the page Advanced Settings / Endpoint / OAuth - -2) Auth0 Dashboard => Rules => Add Rule - -CHANGE BELOW ONLY THOSE THAT ARE UPPER CASE, AND URLs TO LOWER CASE. - -Rule Name: Encrich Wekan login -``` - function (user, context, callback) { - // Only use this rule for Auth0 Dashboard / Applications / WekanApplication - if(context.clientName !== 'YOUR-APPLICATION-NAME'){ - return callback(null, user, context); - } - user.user_metadata = user.user_metadata || {}; - var ns = "https://BOARDS.YOURDOMAIN.COM/"; - context.idToken[ns + "id"] = user.user_id; - context.idToken[ns + "email"] = user.email; - context.idToken[ns + "name"] = user.name || user.user_metadata.name; - context.idToken[ns + "picture"] = user.picture; - callback(null, user, context); - } -``` - -### 3) Snap settings, change to it from above client-id, secret, server-url and web-origin (=namespace for rules function above). - -Note: namespace works for multiple apps. For example, you can use same namespace url for many different wekan board apps that have different client-id etc, and different board url, and still use same namespace url like https://boards.example.com . - -CHANGE BELOW ONLY THOSE THAT ARE UPPER CASE. -``` -sudo snap set wekan oauth2-client-id='YOUR-CLIENT-ID' -sudo snap set wekan oauth2-secret='YOUR-SECRET' -sudo snap set wekan oauth2-server-url='https://YOURACCOUNT.eu.auth0.com' -sudo snap set wekan oauth2-auth-endpoint='/authorize' -sudo snap set wekan oauth2-userinfo-endpoint='/userinfo' -sudo snap set wekan oauth2-token-endpoint='/oauth/token' -sudo snap set wekan oauth2-id-map='https://BOARDS.YOURDOMAIN.COM/id' -sudo snap set wekan oauth2-username-map='https://BOARDS.YOURDOMAIN.COM/email' -sudo snap set wekan oauth2-fullname-map='https://BOARDS.YOURDOMAIN.COM/name' -sudo snap set wekan oauth2-email-map='https://BOARDS.EXAMPLE.COM/email' -``` -For login to work, you need to: -- Create first Admin user -- Add other users with REST API or Password registration -- Login with OIDC button -- Have Auth0 configured for passwordless email login (on some other login) - -### 4) Auth0 ID provider to Custom OAuth RocketChat - -These do work currently so that Auth0 passwordless login to RocketChat does work, -but there is some additional code also that is not added as PR to RocketChat yet. -Code mainly has generating custom authorization cookie from user email with addition to -RocketChat API, and using it and login_token + rc_token to check on RocketChat login page -using router repeating trigger so that if those cookies exist then automatically login -user in using RocketChat Custom OAuth2. - -CHANGE BELOW ONLY THOSE THAT ARE UPPER CASE, AND URLs TO LOWER CASE. -``` -Enable: [X] True -URL: https://YOURACCOUNT.eu.auth0.com/ -Token Path: oauth/token -Token Sent Via: Payload -Identity Token Sent Via: Same as "Token Sent Via" -Identity Path: userinfo -Authorize Path: authorize -Scope: openid profile email -ID: YOUR-ACCOUNT-ID -Secret: YOUR-ACCOUNT-SECRET -Login Style: Redirect -Button Text: JOIN CHAT -Button Text Color: #FFFFFF -Button Color: #000000 -Username field: (empty) -Merge users: [X] True -``` - -# lemonldapng - -Official documentation : https://lemonldap-ng.org/documentation/latest/applications/wekan - -## Wekan Config - -Basically, you need to set theses variables to your wekan env : - -``` -OAUTH2_ENABLED: TRUE -OAUTH2_CLIENT_ID: ClientID -OAUTH2_SECRET: Secret -OAUTH2_SERVER_URL: https://auth.example.com/ -OAUTH2_AUTH_ENDPOINT: oauth2/authorize -OAUTH2_USERINFO_ENDPOINT: oauth2/userinfo -OAUTH2_TOKEN_ENDPOINT: oauth2/token -OAUTH2_ID_MAP: sub -``` - -## LemonLDAP::NG Config - -You need to set a new OpenID Connect Relay Party (RP) with theses parameters : - -* Client ID: the same you set in Wekan configuration (same as OAUTH2_CLIENT_ID) -* Client Secret: the same you set in Wekan configuration (same as OAUTH2_SECRET) -* Add the following exported attributes - * name: session attribute containing the user's full name - * email: session attribute containing the user's email or _singleMail - -See LLNG doc for more details diff --git a/docs/Login/Oracle-Identity-Cloud.md b/docs/Login/Oracle-Identity-Cloud.md deleted file mode 100644 index 9758d414b..000000000 --- a/docs/Login/Oracle-Identity-Cloud.md +++ /dev/null @@ -1,3 +0,0 @@ -Article series at Medium - -1. [Setting up Wekan with Docker, OAuth2 and Oracle Identity Cloud Service](https://medium.com/@arno.schots/setting-up-wekan-with-docker-oauth2-and-oracle-identity-cloud-service-57d4461c5bbe) \ No newline at end of file diff --git a/docs/Login/Oracle-OIM.md b/docs/Login/Oracle-OIM.md deleted file mode 100644 index d2a9bf5ea..000000000 --- a/docs/Login/Oracle-OIM.md +++ /dev/null @@ -1,27 +0,0 @@ -## Login with OIDC OAuth2 Oracle OIM, on premise identity manager - -[Added with this commit](https://github.com/wekan/wekan/commit/ec8a78537f1dc40e967de36a02ea09cf7398318a), and after [added change that OAUTH2_REQUEST_PERMISSION can be set freely with environment variable](https://github.com/wekan/wekan/commit/1b429b3f99c32840ebb0ff9a29015aa8c28ec644) for what is required. - -Here is a summary of code and changes by anonymous Wekan contributors and xet7: -- If the OAuth2 token doesn't contain the email address, Wekan raises an exception. The userinfo and servicedata were changed to avoid that. -- In the getToken function, OIM expects a POST request that contains OAUTH2_CLIENT_ID and OAUTH2_SECRET in its header. We fixed that. -- We also had to edit the app.js in order to put a custom "scope" value. But we think the target should be to be able to set this as an environment variable. -- There is a problem in the code when email is null or empty. I know it might not be null but we have some situation where it is. xet7 fixed it in above commit so that if email is missing, it takes that value from username. When logging into Wekan with OIDC, both username and email should be mapped to email. -- It was tested that with these changes, this works well. - -### About settings - -Other OIDC settings are similar like in this wiki OAuth2, Google, Azure etc settings. Both username and email should be mapped to email. - -### Snap -``` -sudo snap set wekan oracle-oim-enabled='true' -``` -Unset Snap: -``` -sudo snap unset wekan oracle-oim-enabled -``` -### Docker -``` -- ORACLE_OIM_ENABLED=true -``` diff --git a/docs/Login/Password-Hashing.md b/docs/Login/Password-Hashing.md deleted file mode 100644 index c90e6eecf..000000000 --- a/docs/Login/Password-Hashing.md +++ /dev/null @@ -1,8 +0,0 @@ -While [discussing various alternatives in hashing passwords](https://github.com/meteor/meteor/discussions/11812#discussioncomment-1930533): - -From @xet7 at 2022-01-08: - -Hi, -about Argon2. Today when I was in progress of translating Gitea from English to Finnish, I noticed this Gitea translation string, related to Argon2: - -> Set the password hashing algorithm. Algorithms have differing requirements and strength. `argon2` whilst having good characteristics uses a lot of memory and may be inappropriate for small systems. diff --git a/docs/Login/SAML.md b/docs/Login/SAML.md deleted file mode 100644 index 7b4c60a8c..000000000 --- a/docs/Login/SAML.md +++ /dev/null @@ -1,67 +0,0 @@ -Related Meteor SAML code, not in WeKan yet: - -- New: https://forums.meteor.com/t/meteor-and-saml/61561 -- Old link: https://forums.meteor.com/t/what-are-you-working-on/59187 - -Sandstorm has SAML login, and old WeKan that will be updated someday: - -- https://github.com/wekan/wekan/wiki/Sandstorm - -How SAML works: - -- https://ssoready.com -- https://github.com/ssoready/ssoready -- https://news.ycombinator.com/item?id=41110850 -- https://ssoready.com/blog/from-the-founders/an-unpopular-perspective-on-the-sso-tax/ -- https://news.ycombinator.com/item?id=41303844/blog/engineering/a-gentle-intro-to-saml/ -- https://news.ycombinator.com/item?id=41036982 -- https://www.sheshbabu.com/posts/visual-explanation-of-saml-authentication/ -- https://news.ycombinator.com/item?id=41057814 -- https://github.com/ssoready/ssoready -- https://news.ycombinator.com/item?id=41110850 -- https://ssoready.com/blog/from-the-founders/an-unpopular-perspective-on-the-sso-tax/ -- https://news.ycombinator.com/item?id=41303844 - -Ruby on Rails OmniAuth, that has Shibboleth and SAML: - -- https://github.com/omniauth/omniauth/wiki/List-of-Strategies -- https://github.com/omniauth/omniauth -- Recent SAML issue https://news.ycombinator.com/item?id=41586031 - -The SSO Wall of Shame: - -- https://sso.tax - -[SAML Issue](https://github.com/wekan/wekan/issues/708) - -[SAML settings commit](https://github.com/wekan/wekan/commit/214c86cc22f4c721a79ec0a4a4f3bbd90d673f93) - -Currently has code from https://github.com/steffow/meteor-accounts-saml/ copied to `wekan/packages/meteor-accounts-saml` - -Does not yet have [fixes from RocketChat SAML](https://github.com/RocketChat/Rocket.Chat/tree/develop/app/meteor-accounts-saml) - -Please add pull requests if it does not work. - -Wekan clientside code is at `wekan/client/components/main/layouts.*` - -Wekan serverside code is at: -- `wekan/server/authentication.js` at bottom -- `wekan/packages/meteor-accounts-saml/*` - -## Gitea - -- https://github.com/crewjam/saml -- https://github.com/go-gitea/gitea/pull/29403 -- https://docs.gitea.com/enterprise/features/saml-auth - -## Laravel - -- https://github.com/24Slides/laravel-saml2 - -## ruby-saml/omniauth/RoR: Sign in as anyone: Bypassing SAML SSO authentication with parser differentials - -- https://github.blog/security/sign-in-as-anyone-bypassing-saml-sso-authentication-with-parser-differentials/ -- https://news.ycombinator.com/item?id=43349634 -- https://github.com/github/securitylab - - diff --git a/docs/Login/Zitadel.md b/docs/Login/Zitadel.md deleted file mode 100644 index 364768917..000000000 --- a/docs/Login/Zitadel.md +++ /dev/null @@ -1,45 +0,0 @@ -## Zitadel login using OAuth2 - -- Original issue: https://github.com/wekan/wekan/issues/5250 - -## Snap - -``` -sudo snap set wekan oauth2-enabled='true' -sudo snap set wekan oauth2-b2c-enabled='true' -sudo snap set wekan oauth2-username-map='sub' -sudo snap set wekan oauth2-client-id='xxxxxxxx' -sudo snap set wekan oauth2-secret='xxxxxxx' -sudo snap set wekan oauth2-server-url='https://auth.yourserver.com' -sudo snap set wekan oauth2-auth-endpoint='/oauth/v2/authorize' -sudo snap set wekan oauth2-userinfo-endpoint='/oidc/v1/userinfo' -sudo snap set wekan oauth2-token-endpoint='/oauth/v2/token' -sudo snap set wekan oauth2-id-map='sub' -sudo snap set wekan oauth2-username-map='email' -sudo snap set wekan oauth2-email-map='email' -sudo snap set wekan oauth2-fullname-map='given_name' -sudo snap set wekan oauth2-request-permissions='openid email profile' -``` - -## Docker - -https://github.com/wekan/wekan/blob/main/docker-compose.yml - -``` - - OAUTH2_ENABLED=true - - OAUTH2_CLIENT_ID=xxxxxxxx - - OAUTH2_SECRET=xxxxxxxx - - OAUTH2_SERVER_URL=https://auth.yourserver.com - - OAUTH2_AUTH_ENDPOINT=/oauth/v2/authorize - - OAUTH2_USERINFO_ENDPOINT=/oidc/v1/userinfo - - OAUTH2_TOKEN_ENDPOINT=/oauth/v2/token - - OAUTH2_ID_MAP=sub - - OAUTH2_USERNAME_MAP=email - - OAUTH2_EMAIL_MAP=email - - OAUTH2_FULLNAME_MAP=given_name - - OAUTH2_REQUEST_PERMISSIONS=openid profile email -``` - -## Others - -Similar like above Docker. \ No newline at end of file diff --git a/docs/Login/autologin.md b/docs/Login/autologin.md deleted file mode 100644 index f77bceee0..000000000 --- a/docs/Login/autologin.md +++ /dev/null @@ -1,6 +0,0 @@ -# Autologin with OIDC/OAUTH2 - -https://github.com/wekan/wekan/pull/4588 - -https://github.com/wekan/wekan/commit/284f4401369aadcec72e67fa935dfc3a9fead721 - diff --git a/docs/Platforms/FOSS/Android.md b/docs/Platforms/FOSS/Android.md deleted file mode 100644 index 961a580fc..000000000 --- a/docs/Platforms/FOSS/Android.md +++ /dev/null @@ -1,55 +0,0 @@ -### Running Wekan server at Android - -Requirements: -- arm64 or x64 Android with at least 3 GB RAM. Tested with with arm64 OnePlus 3 that has 6 GB RAM. -- It is not necessary to root Android. - -## 1) Install AnLinux and Termux from Play Store - -At AnLinux choose: -- Ubuntu -- XFCE4 -- Copy those commands to Termux to install Linux. - -## 2) At Termux - -When you get from Termux to Ubuntu bash, you can install Wekan similarly like arm64 or x64: -https://github.com/wekan/wekan/wiki/Raspberry-Pi - -Edit start-wekan.sh so you can start Wekan for example: -``` -ROOT_URL=http://localhost:2000 -PORT=2000 -``` -At Android webbrowser like Chrome and Firefox browse to http://localhost:2000 - -## 3) WLAN - -If you connect to WLAN, you can get your IP address with command: -``` -ip address -``` -Edit start-wekan.sh so you can start Wekan for example: -``` -ROOT_URL=http://IP-ADDRESS:2000 -PORT=2000 -``` -Then you can use any computer or mobile phone Javascript capable webbrowser at WLAN to use Wekan at http://IP-ADDRESS:2000 like http://192.168.0.100:2000 . [More info about ROOT_URL](Settings). - -## 4) Optional: Mobile Linux Desktop - -Requirements: -- 1 WLAN, for example: mobile hotspot, Android device sharing WLAN, hotel WLAN, office WLAN -- ChromeCast that is connected to HDMI Input of hotel/office/home TV and WLAN -- Bluetooth keyboard -- Bluetooth mouse -- 1 Android device that has: - - Wekan installed according to steps 1-3 above - - Android VNC client to local AnLinux Ubuntu desktop - - Firefox installed with apt-get to that Ubuntu desktop, browsing Wekan at http://IP-ADDRESS:2000 - - Using ChromeCast to show Android full screen at TV - -This way, you have: -- Big TV display -- Full size keyboard and mouse -- Full featured Firefox at Ubuntu Desktop using Wekan \ No newline at end of file diff --git a/docs/Platforms/FOSS/Cloud-Foundry.md b/docs/Platforms/FOSS/Cloud-Foundry.md deleted file mode 100644 index a6fc5cc1f..000000000 --- a/docs/Platforms/FOSS/Cloud-Foundry.md +++ /dev/null @@ -1,3 +0,0 @@ -[Article from 2016](https://www.cloudfoundry.org/100-day-challenge-082-running-wekan-cloud-foundry/) - -Probably needs update to use [precompiled Wekan release](https://www.cloudfoundry.org/100-day-challenge-082-running-wekan-cloud-foundry/) ? \ No newline at end of file diff --git a/docs/Platforms/FOSS/Cloud/CloudFlare.md b/docs/Platforms/FOSS/Cloud/CloudFlare.md deleted file mode 100644 index 76f523fc5..000000000 --- a/docs/Platforms/FOSS/Cloud/CloudFlare.md +++ /dev/null @@ -1,5 +0,0 @@ -CNAME to CNAME does not work well. Last one should be A IPv4 (and AAAA IPv6). - -To get Let's Encrypt SSL/TLS cert for custom subdomain, for example with Caddy, you subdomain should have grey cloud icon. Not orange cloud icon CloudFlare proxy. Also turn off any SSL/TLS of CloudFlare. This is so that Let's Encrypt verifying servers can see hosting server actual IP address and validate cert. - -If needing wildcard SSL/TLS cert, for example for Sandstorm, create CloudFlare Origin Certificate, add it to Caddy or Nginx certs .pem file (private key above, other key below, at same textfile). Set CloudFlare SSL/TLS as Strict for using Origin Certificate. Set DNS to orange cloud icon proxy. Add DNS records for example.com , *.example.com , www.example.com . \ No newline at end of file diff --git a/docs/Platforms/FOSS/Debian.md b/docs/Platforms/FOSS/Debian.md deleted file mode 100644 index 977d804dc..000000000 --- a/docs/Platforms/FOSS/Debian.md +++ /dev/null @@ -1,10 +0,0 @@ -- [Snap](Snap) -- [Docker](Docker) -- [Source](Source) -- [Unofficial debian package](https://github.com/soohwa/wekan-deb/releases) with build and installation instructions [here](https://github.com/soohwa/wekan-deb) - -### Old install scripts - -[Debian Wheezy 64bit & Devuan Jessie 64 bit](https://github.com/wekan/sps) - -[Autoinstall script](https://github.com/wekan/wekan-autoinstall) \ No newline at end of file diff --git a/docs/Platforms/FOSS/Docker/Docker.md b/docs/Platforms/FOSS/Docker/Docker.md deleted file mode 100644 index 2cbf68987..000000000 --- a/docs/Platforms/FOSS/Docker/Docker.md +++ /dev/null @@ -1,286 +0,0 @@ -## Building custom Docker image - -This is only for developers. For normal users, do not add these options, just start with `docker compose up -d` - -This only builds `wekan-app` Docker image, where is Node.js 14.x and all Javascript code. This does not build `wekan-db` MongoDB image, that usually does not require modifications. - -Alpine Linux does not work properly with current Meteor 2 based WeKan. Ubuntu works, and has newest security fixes. - -Only amd64 currently works. Currently used Node.js 14.x segfaults at arm64 and s390x. Only Node.js 14.x is compatible with current version of Meteor 2 based WeKan. Trying to upgrade is in progress https://github.com/wekan/wekan/issues/5475 - -Dockerfile is at https://raw.githubusercontent.com/wekan/wekan/main/Dockerfile - -For building custom image, and then running it, uncomment these lines, -that are currently here, but line numbers could change, if that docker-compose.yml -is later modified: - -https://github.com/wekan/wekan/blob/main/docker-compose.yml#L144-L146 - -After your above modifications, text should look like this: - -``` - #------------------------------------------------------------------------------------- - # ==== BUILD wekan-app DOCKER CONTAINER FROM SOURCE, if you uncomment these ==== - # ==== and use commands: docker compose up -d --build - build: - context: . - dockerfile: Dockerfile - #------------------------------------------------------------------------------------- -``` - -Then modify ROOT_URL, etc settings as needed, see https://github.com/wekan/wekan/wiki/Settings - -Start WeKan with custom built Dockerfile with this command: -``` -docker compose up -d --build -``` -If you like to only build Dockerfile: -``` -docker build . -``` -You can also push your image to some Docker registry, like here it's done for WeKan: - -https://github.com/wekan/wekan/blob/main/releases/docker-push-wekan.sh - -## Docker Containers - -- [GitHub](https://github.com/wekan/wekan/pkgs/container/wekan) -- [Docker Hub](https://hub.docker.com/r/wekanteam/wekan) -- [Quay](https://quay.io/repository/wekan/wekan) - -docker-compose.yml at https://github.com/wekan/wekan - -Edit it to have IP address of your server -``` -export ROOT_URL=http://SERVER-IP-ADDRESS-HERE -``` -Then start WeKan with: -``` -docker compose up -d -``` - -SSL/TLS info at https://github.com/wekan/wekan/wiki/Settings - -## Please only use Docker release tags - -## Repair Docker - -[Repair Docker](Repair-Docker) - -## Using only Docker commands - -[![Docker Repository on Quay](https://quay.io/repository/wekan/wekan/status "Docker Repository on Quay")](https://quay.io/repository/wekan/wekan) - -[Many tags available](https://quay.io/repository/wekan/wekan?tab=tags) - -## Note: docker-compose.yml works - -There is much more settings at well-documented [docker-compose.yml](https://raw.githubusercontent.com/wekan/wekan/master/docker-compose.yml), those can also be added to be used below. - -If you don't need to build Wekan, use prebuilt container with docker-compose.yml from https://github.com/wekan/wekan like this: -``` -docker compose up -d -``` - -If you like to build from source, clone Wekan repo: -``` -git clone https://github.com/wekan/wekan -``` -Then edit docker-compose.yml with [these lines uncommented](https://github.com/wekan/wekan/blob/main/docker-compose.yml#L132-L142) this way: -``` - #------------------------------------------------------------------------------------- - # ==== BUILD wekan-app DOCKER CONTAINER FROM SOURCE, if you uncomment these ==== - # ==== and use commands: docker compose up -d --build - build: - context: . - dockerfile: Dockerfile - args: - - NODE_VERSION=${NODE_VERSION} - - METEOR_RELEASE=${METEOR_RELEASE} - - NPM_VERSION=${NPM_VERSION} - - ARCHITECTURE=${ARCHITECTURE} - - SRC_PATH=${SRC_PATH} - - METEOR_EDGE=${METEOR_EDGE} - - USE_EDGE=${USE_EDGE} - #------------------------------------------------------------------------------------- -``` -Then you can build Wekan with -``` -docker compose up -d --build -``` - -## Example for latest Wekan, port 2000 to Docker Wekan internal port 8080 -``` -docker run -d --restart=always --name wekan-db mongo:5 - -docker run -d --restart=always --name wekan --link "wekan-db:db" -e "WITH_API=true" -e "MONGO_URL=mongodb://wekan-db:27017/wekan" -e "ROOT_URL=http://192.168.1.200:2000" -p 2000:8080 wekanteam/wekan:v5.41 -``` -Specific release in above URL, not latest: -``` -quay.io/wekan/wekan:v3.37 -``` -For latest development version, use without tag: -``` -quay.io/wekan/wekan -``` - -## DockerBunker: Easy Docker management - -[Managing Docker containers with DockerBunker](https://github.com/chaosbunker/dockerbunker) - -## CaptainDuckDuck - -[Managing Docker containers with CaptainDuckDuck](https://github.com/wekan/wekan/issues/1375#issuecomment-413626075) - -## Backup and Upgrade - -[Import/Export MongoDB data to/from Docker container](Export-Docker-Mongo-Data) - -[Move Docker containers to other computer](Move-Docker-containers-to-other-computer), needs more details - -### Backup before upgrade -``` -docker stop wekan-app -docker exec -it wekan-db bash -cd /data -rm -rf dump -mongodump -exit -docker start wekan-app -docker cp wekan-db:/data/dump . -``` -### Upgrade -``` -docker stop wekan-app -docker rm wekan-app -``` -Then edit docker-compose.yml to have higher wekan-app image version tag, like `image: wekanteam/wekan:v4.12`. Then: -``` -docker compose up -d -``` -### Images -Quay: `image: quay.io/wekan/wekan:v4.07` -Docker Hub: `image: wekanteam/wekan:v4.07` - -### Restore -``` -docker stop wekan-app -docker exec -it wekan-db bash -cd /data -rm -rf dump -exit -docker cp dump wekan-db:/data/ -docker exec -it wekan-db bash -cd /data -mongorestore --drop -exit -docker start wekan-app -``` -## Cleanup - -[Cleanup and delete all Docker data to get Docker Compose working](https://github.com/wekan/wekan/issues/985) - -[Cleanup scripts to remove old data](https://github.com/wekan/wekan-cleanup) - -## Docker Compose - -[Docker Compose: Wekan <=> MongoDB](https://github.com/wekan/wekan-mongodb). REQUIRED: READ AND ADD SETTINGS LIKE ROOT_URL ETC TO docker-compose.yml textfile. It also has info about using same MongoDB database for office and VPN users. - -[Docker Compose: Wekan <=> MongoDB <=> ToroDB => PostgreSQL read-only mirroring](https://github.com/wekan/wekan-postgresql) - -TODO: [Docker Compose: Wekan <=> MongoDB <=> ToroDB => MySQL read-only mirroring](https://github.com/torodb/stampede/issues/203) - -## OpenShift - -[OpenShift](OpenShift) - -## SLES - -[SLES SP1](Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1) - -## Rancher - -[Rancher Rancher Active Proxy](Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker) - -## Testing - -[Install for testing](Install-Wekan-Docker-for-testing) - -## Production - -[Production setup for thousands of users with Docker at AWS](AWS) - -[Other way to do production](Install-Wekan-Docker-in-production) - -## External MongoDB auth - -[External MongoDB authentication](https://github.com/wekan/wekan/issues/1375) - -## Admin Panel - -First registered Wekan user will get Admin Panel on new Docker and source based -installs. You can also [enable Admin Panel manually](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v0111-rc2-2017-03-05-wekan-prerelease) - -## Docker Hub - sometimes broken - -Currently there are two dockerhub builds for wekan. One at [mquandalle dockerhub](https://hub.docker.com/r/mquandalle/wekan/builds/) and another at [wekanteam dockerhub](https://hub.docker.com/r/wekanteam/wekan/builds/). - -[wekanteam dockerhub](https://hub.docker.com/r/wekanteam/wekan/builds/) is usually broken. - -## Development: - -### `docker run` examples - -- MongoDB: - -``` -docker run -d --restart=always --name wekan-db mongo:3.2.20 -``` - -- No build step, pull from the [quay](https://quay.io/repository/wekan/wekan?tab=tags) and -specify docker variables - -``` -docker run -d --restart=always --name wekan --link "wekan-db:db" -e "MONGO_URL=mongodb://db" -e "ROOT_URL=http://localhost:8080" -p 8080:8080 quay.io/wekan/wekan -``` - - -### `docker-compose` examples - -- No build step and pull from [quay](https://quay.io/repository/wekan/wekan?tab=tags) - -``` -sudo docker compose up -d --nobuild -``` - -- Build default -``` -sudo docker compose up -d --build -``` - -- Build with newer Node version: -``` -echo 'NODE_VERSION=v8.11.1' >> .env && \ -sudo docker compose up -d --build -``` - -- Build custom image off a release candidate or beta for meteor -``` -echo 'METEOR_EDGE=1.5-beta.17' >> .env && \ -echo 'USE_EDGE=true' >> .env && \ -sudo docker compose up -d --build -``` - -## Docker env for Wekan dev - -* [Docker environment for Wekan Development](https://github.com/wekan/wekan-dev) - -## Alpine, needs testing - -* [Docker Compose: Alpine Linux and Wekan <=> MongoDB](https://github.com/wekan/wekan-launchpad) - -## Webserver Config - -* [Caddy Webserver Config](Caddy-Webserver-Config) -* [Nginx Webserver Config](Nginx-Webserver-Config) -* [Apache Webserver Config](Apache) \ No newline at end of file diff --git a/docs/Platforms/FOSS/Docker/Export-Docker-Mongo-Data.md b/docs/Platforms/FOSS/Docker/Export-Docker-Mongo-Data.md deleted file mode 100644 index 80acfc53b..000000000 --- a/docs/Platforms/FOSS/Docker/Export-Docker-Mongo-Data.md +++ /dev/null @@ -1,205 +0,0 @@ -[Managing Docker containers with DockerBunker](https://github.com/chaosbunker/dockerbunker) - -## Important info - -You need to stop Wekan before importing MongoDB database with command: - -`docker stop wekan-app` - -And also check that in your start-wekan.sh or docker-compose.yml or similar that -you have corrent MongoDB database name admin, wekan, etc. -Otherwise it will be empty. - -Docker containers are at `/var/lib/docker`, so it [may contain important data that could be hard to recover](https://github.com/wekan/wekan-mongodb/issues/8). Restoring mongodump files is much easier. [Related backup feature request](https://github.com/wekan/wekan/issues/1534). With backups it's important to [save file and directory permissions](https://askubuntu.com/questions/225865/copy-files-without-losing-file-folder-permissions). - -*** - - -Check from your Dockerfile or docker-compose.yml what is name of MongoDB container. -It can be wekan-db, mongodb or something else. - -1) You can run Wekan on Docker locally like this on http://localhost:8080/ -(or other port it you change 8080 in script): -```bash -docker run -d --restart=always --name wekan-db mongo:3.2.18 - -docker run -d --restart=always --name wekan-app --link "wekan-db:db" -e "MONGO_URL=mongodb://db" -e "ROOT_URL=http://localhost:8080" -p 8080:80 wekanteam/wekan:latest -``` - -2) List docker containers, your ID:s will be different: -```bash -docker ps -``` -Result: -```bash -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -1234wekanid wekanteam/wekan:latest "/bin/sh -c 'bash $ME" About an hour ago Up 46 minutes 0.0.0.0:8080->80/tcp wekan-app -4321mongoid mongo "/entrypoint.sh mongo" About an hour ago Up 46 minutes 27017/tcp wekan-db -``` - -3) Enter inside mongo container: -```bash -docker exec -it wekan-db bash -``` - -4) OPTIONAL: If you want to browse data inside container, you can use CLI commands like listed at - -https://docs.mongodb.com/manual/reference/mongo-shell/ - -like this: - -```bash -> mongo <==== START MONGO CLI -MongoDB shell version: 3.2.18 -connecting to: test -Server has startup warnings: -2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] -2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. -2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never' -2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] -2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. -2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never' -2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] -> show dbs <=== SHOW DATABASES -admin 0.034GB -local 0.000GB -> use admin <=== CHANGE TO USE ADMIN DATABASE -switched to db admin -> show collections <=== SHOWS TABLES -activities -boards -card_comments -cards -cfs._tempstore.chunks -cfs.attachments.filerecord -cfs_gridfs._tempstore.chunks -cfs_gridfs._tempstore.files -cfs_gridfs.attachments.chunks -cfs_gridfs.attachments.files -esCounts -lists -meteor-migrations -meteor_accounts_loginServiceConfiguration -presences -users -> db.users.find() <=== LISTS ALL USERS -(list of all users here) -> exit <=== EXIT MONGO CLI -``` - -5) Go to / directory: -```bash -cd / -``` - -6) Backup database to files inside container to directory /dump, only Wekan database with name "wekan" is included, not local: -```bash -mongodump -o /dump/ -``` - -7) Exit from inside of container: -```bash -exit -``` - -8) Copy backup directory /dump from inside of container to current directory: -```bash -docker cp wekan-db:/dump . -``` - -9a) Restore backup later (restore from /data/dump): -```bash -docker cp dump wekan-db:/data/ -docker exec -it wekan-db bash -cd /data -## Only if you get errors about existing indexes, use this instead: -## mongorestore --drop --noIndexRestore --db wekan /data/dump/wekan/ -mongorestore --drop --db wekan /data/dump/wekan/ -exit -``` - -That dbname can be for example wekan: -``` -## Only if you get errors about existing indexes, use this instead: -## mongorestore --drop --noIndexRestore --db wekan /data/dump/wekan/ -mongorestore --drop --db wekan /data/dump/wekan/ -``` - -9b) Or restore to another mongo database, in different port: -```bash -mongorestore --port 11235 -``` - -10) If you would like to browse mongo database that is outside of docker in GUI, you could try some admin interface: - -https://docs.mongodb.com/ecosystem/tools/administration-interfaces/ - -11) If you sometime after backups want to remove wekan containers to reinstall them, do (CAREFUL): -```bash -docker stop wekan-app wekan-db -docker rm wekan-app wekan-db -``` -Then you can reinstall from step 1. - -12) If latest version of Wekan Docker image is broken, here's how to run older version: - -https://github.com/wekan/wekan/issues/659 - -## Backup and restore scripts - -Edit these to suit your own requirements - they will delete backups older than 7 days. - -Backup Script -```bash -#!/bin/bash -DATE=$(date +%Y-%m-%d-%H-%M) -SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" -cd $SCRIPTPATH -mkdir -p backups/$DATE -docker ps -a | grep 'wekan-db' &> /dev/null -if [ $? = 0 ]; then - docker exec -t wekan-db bash -c "rm -fr /dump ; mkdir /dump ; mongodump -o /dump/" - docker cp wekan-db:/dump $SCRIPTPATH/backups/$DATE - tar -zc -f backups/$DATE.tgz -C $SCRIPTPATH/backups/$DATE/dump wekan - if [ -f backups/$DATE.tgz ]; then - rm -fr backups/$DATE - find $SCRIPTPATH/backups/ -name "*.tgz" -mtime +7 -delete - fi -else - echo "wekan-db container is not running" - exit 1 -fi -``` - -Restore Script -```bash -#!/bin/bash -if [ $# -eq 0 ] - then - echo "Supply a path to a tgz file!" - exit 1 -fi - -SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" -DATE=$(basename $1 .tgz) - -docker ps -a | grep 'wekan-db' &> /dev/null -if [ $? = 0 ]; then - - if [ -f $1 ]; then - docker stop wekan-app - mkdir -p $SCRIPTPATH/backups/$DATE-restore - tar -zx -f $1 -C $SCRIPTPATH/backups/$DATE-restore - docker exec -t wekan-db bash -c "rm -fr /restore ; mkdir /restore" - docker cp $SCRIPTPATH/backups/$DATE-restore/wekan wekan-db:/restore - ## Only if you get errors about existing indexes, use this instead: - ## docker exec -t wekan-db bash -c "mongorestore --drop --noIndexRestore --db wekan /restore/wekan/" - docker exec -t wekan-db bash -c "mongorestore --drop --db wekan /restore/wekan/" - docker start wekan-app - fi -else - echo "wekan-db container is not running" - exit 1 -fi - -``` \ No newline at end of file diff --git a/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-for-testing.md b/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-for-testing.md deleted file mode 100644 index 30bf2b85a..000000000 --- a/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-for-testing.md +++ /dev/null @@ -1,104 +0,0 @@ -**Purpose**: just to try Wekan on your own Linux workstation - -1. [Install Docker](http://docs.docker.com/linux/step_one/) -1. [Install Docker-Compose](http://docs.docker.com/compose/install/) -1. Say we want to save our Wekan data on the host in directory `/home/johndoe/wekan/data` -1. In a given directory (say `/home/johndoe/wekan`), create a `docker-compose.yml` file with: - -Use this docker-compose.yml: - -https://raw.githubusercontent.com/wekan/wekan/devel/docker-compose.yml - -Then, from the directory containing the `docker-compose.yml` (i.e. `/home/johndoe/wekan`), simply run `docker-compose up`. If you want it to be deamonized, you could run `docker-compose up -d`. - -Your wekan data are in `/home/johndoe/wekan/data` and thus can be backed up. - -**Note** -If the default host port 80 has been used and you would like to set up Wekan for another port, say, 1234, the configuration above -``` - ports: - - 80:8080 -``` -can be replaced by -``` - ports: - - 1234:8080 -``` - -also need to change -``` - - ROOT_URL=http://localhost -``` - -to the new port -``` - - ROOT_URL=http://localhost:1234 -``` - -(This procedure has been tested on Linux Ubuntu 14.04 and Mac OS 10.11.6.) (Tested on Docker for Windows 17.06.2-ce-win27, MongoDB does not support using mounted Windows volumes, simply remove volumes: from wekandb:) - -## Testing with mail server - -Above method will create an instance of Wekan without mailing features (users inviting, password recovery, neat registration) because MAIL_URL env var isn't set. This `docker-compose.yml` solves that problem by adding *mailserver* container. - -```yaml -wekan: - image: quay.io/wekan/wekan - links: - - wekandb - - mailserver - environment: - - MONGO_URL=mongodb://wekandb/wekan - - ROOT_URL=http://10.2.0.180:8081 - - MAIL_URL=smtp://wekan:wekan@mailserver:25 - ports: - - 8081:80 - -wekandb: - image: mongo:3.2.21 - volumes: - - /home/wekan/data:/data/db - -mailserver: - image: marvambass/versatile-postfix - volumes: - - /home/wekan/dkim:/etc/postfix/dkim/ - - /home/wekan/maildirs:/var/mail - command: wekan.com wekan:wekan - environment: - - ALIASES=postmaster:root;hostmaster:root;webmaster:root -``` - -Several additional steps needed. - -1. Create dirs `/home/wekan/dkim`, `/home/wekan/maildirs` that are used by *mailserver* container - - ```bash - mkdir /home/wekan/dkim - mkdir /home/wekan/maildirs - ``` -2. Generate DKIM key - - ```bash - apt-get install opendkim-tools - cd /home/wekan/maildirs - opendkim-genkey -s mail -d example.com - mv mail.private dkim.key - ``` - -## Show mails with a Docker image, without mail configuration -When you did **NOT** setup the `MAIL_URL` environment variable in Wekan, the mail message will be 'sent' to the terminal output instead of sending an actual e-mail. If you are using Docker images, list the containers via: - -```sh -docker ps -``` - -Then display the process output: - -```sh -docker logs -f -``` - -With the `-f` flag (`f` for `follow`), you will see the real-time output of the process. You can exit with **CTRL + C** without affecting the Wekan process. - -Via the web-interface press the '_forgot your password?_' link and trigger a reset mail. And watch the terminal output for the e-mail. \ No newline at end of file diff --git a/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-in-production.md b/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-in-production.md deleted file mode 100644 index 34d57e0f0..000000000 --- a/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-in-production.md +++ /dev/null @@ -1,46 +0,0 @@ -# Different wiki page: [Production setup for thousands of users at AWS](AWS) - - -*** - - -## Single server install, for small teams - -## Also see: [Using same database for both LAN and VPN Wekan](https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml#L86-L100) - -**Purpose:** run Wekan on a production Linux server with Docker and Apache or Nginx as a front-end server (reverse proxy) - -## 1. Install newest Docker and Docker Compose - -[Docker website](https://docker.com) - -## 2. Use Wekan-MongoDB with Docker Compose - -https://github.com/wekan/wekan-mongodb - -[External MongoDB authentication](https://github.com/wekan/wekan/issues/1375) - -## 3. Email - -[Troubleshooting Email](Troubleshooting-Mail) - -## 4. Configure webserver as a front-end proxy - -* [Caddy](Caddy-Webserver-Config) -* [Nginx](Nginx-Webserver-Config) -* [Apache](Apache) - -## 5. Launch Wekan - -As `wekan` user and from `/home/wekan`, run `docker-compose up -d` - -## 6. Improvements to bring to this doc - -* Verify everything works - - -## 7. Tested on... - -This procedure has been tested on: - -* [VPS-SSD 2016 from OVH](https://www.ovh.com/fr/vps/vps-ssd.xml) with Ubuntu 14.04 \ No newline at end of file diff --git a/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1.md b/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1.md deleted file mode 100644 index ff3b78883..000000000 --- a/docs/Platforms/FOSS/Docker/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1.md +++ /dev/null @@ -1,66 +0,0 @@ -More complete Docker info at: - -* [Docker](Docker) - -Tested to work on AWS cloud: - -``` -ec2-user@ip:~> cat /etc/os-release -NAME="SLES" -VERSION="12-SP1" -VERSION_ID="12.1" -PRETTY_NAME="SUSE Linux Enterprise Server 12 SP1" -ID="sles" -ANSI_COLOR="0;32" -CPE_NAME="cpe:/o:suse:sles:12:sp1" -``` - -As root: - -1) Install all updates and Docker (recommended): - -``` -zypper update -zypper in docker -``` - -2) Start editing textfile to add rights for Docker to access network: - -``` -vi /etc/sysconfig/SuSEfirewall2 -``` - -3) In that textfile change FW_ROUTE line to this and save: - -``` -FW_ROUTE="yes" -``` - -4) Add rights to use docker as another user, examples: ec2-user, virtual - -``` -/usr/sbin/usermod -a -G docker ec2-user -``` - -5) Start Docker and enable it on booting - -``` -systemctl start docker -chkconfig docker on -``` - -6) Reboot so updates and firewall changes start working: - -``` -reboot -``` - -7) As normal user (examples: ec2-user, virtual) (root works still too), install MongoDB and Wekan, you can change 8080 to be another port: - -``` -docker run -d --restart=always --name wekan-db -v /volume1/docker/wekan/wekan-db:/data/db mongo:3.2.12 - -docker run -d --restart=always --name wekan --link "wekan-db:db" -e "MONGO_URL=mongodb://db" -e "ROOT_URL=http://localhost:8080" -p 8080:80 wekanteam/wekan:meteor-1.4 -``` - -8) Now Wekan is available at http://ip-address:port , for example: http://192.168.100.50:8080 . Wekan starts at boot, and restarts on error conditions. diff --git a/docs/Platforms/FOSS/Docker/Move-Docker-containers-to-other-computer.md b/docs/Platforms/FOSS/Docker/Move-Docker-containers-to-other-computer.md deleted file mode 100644 index dcfea5440..000000000 --- a/docs/Platforms/FOSS/Docker/Move-Docker-containers-to-other-computer.md +++ /dev/null @@ -1,46 +0,0 @@ -Copy all docker containers and data to new server, replacing all of docker on new server: -``` -ssh ubuntu@oldserver.com -cd repos/wekan -sudo su -docker-compose stop -systemctl stop docker -cd /var/lib -tar cvpzf docker.tar.gz docker -systemctl start docker -scp docker.tar.gz root@newserver.com:/var/lib/ -exit -exit -``` -Then on new server restore: -``` -ssh ubuntu@newserver.com -sudo su -systemctl stop docker -cd /var/lib -mv docker old-docker -tar xpvzf docker.tar.gz -systemctl start docker -exit -exit -``` - -*** - -OLD INFO: - -This page is work in progress, and needs more details. - -1) If you have installed Wekan with Docker like at this page: - -https://github.com/wekan/wekan/wiki/Export-Docker-Mongo-Data - -2) and you want to move Docker containers to another computer (laptop, server etc) that also has Docker installed, use Docker export and import commands: - -https://docs.docker.com/engine/reference/commandline/export/ - -https://docs.docker.com/engine/reference/commandline/import/ - -3) If mongo data is on volume, also use this: - -https://docs.docker.com/engine/tutorials/dockervolumes/#backup-restore-or-migrate-data-volumes diff --git a/docs/Platforms/FOSS/Docker/Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker.md b/docs/Platforms/FOSS/Docker/Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker.md deleted file mode 100644 index aadbde011..000000000 --- a/docs/Platforms/FOSS/Docker/Rancher---Rancher-Active-Proxy---Wekan-MongoDB-Docker.md +++ /dev/null @@ -1,27 +0,0 @@ -You can read up how to set up Rancher on a host together with Rancher Active Proxy and a Wekan/MongoDB Docker Stack. - -This way you have Wekan running on a rancher host with automatic letsencrypt retrieval/renewal and proxying to a domain of your choice. - -Here's how to set up Rancher + Rancher Active Proxy: -https://github.com/adi90x/rancher-active-proxy/issues/21 - -Alter the wekan service in the docker-compose like this: -``` - wekan: - image: wekanteam/wekan:meteor-1.4 - container_name: whatever-you-like - restart: always - ports: - - 80 - labels: - - io.rancher.container.pull_image=always - - rap.port=80 - - rap.host=your.domain.com - - rap.le_host=your.domain.com - - rap.le_email=your@mail.com - environment: - - MONGO_URL=mongodb://wekandb:27017/wekan - - ROOT_URL=https://your.domain.com - depends_on: - - wekandb -``` \ No newline at end of file diff --git a/docs/Platforms/FOSS/Docker/Repair-Docker.md b/docs/Platforms/FOSS/Docker/Repair-Docker.md deleted file mode 100644 index 50d102586..000000000 --- a/docs/Platforms/FOSS/Docker/Repair-Docker.md +++ /dev/null @@ -1,76 +0,0 @@ -## 1) Create Backups first - -[Backup](Backup) - -Docker data is usually at `/var/lib/docker` or `/var/snap/docker/common/` (in Snap version of Docker). - -## 2) No errors of MongoDB ? - -- Check does docker-compose.yml have like `mongod --logpath=/dev/null --quiet`. Well, it's very quiet. -- Just remove logpath, or set it to syslog with `--syslog`. -- Or add path to somewhere where mongod service has write access, like `--logpath=/var/lib/docker/mongodb.log` or `--logpath=/var/snap/docker/common/mongodb.log`. -- If you remove `--quiet`, you get even more verbose logs. - -## 3) Errors of Wekan connecting to MongoDB ? - -Probably did upgrade your kernel. Please reboot. - -## 4) Errors about too new or old version of MongoDB ? - -Check your docker-compose.yml . Did newer Wekan with newest docker-compose.yml from https://github.com/wekan/wekan have different version of MongoDB? If yes, you should change to that old version. For example: -``` -docker-compose stop -``` -Then in docker-compose.yml, `image: mongo:latest` to some other like `image: mongo:3.2` or 3.2.22 or 4.2 or something. Then: -``` -docker-compose start -``` -Or alternatively: -``` -docker-compose up -d -``` -## 5) MongoDB corruption? - -a) [Repair MongoDB](Repair-MongoDB) - -b) [Using Meteor MongoDB to repair files](Export-from-Wekan-Sandstorm-grain-.zip-file) - -## 6) Trying to upgrade Wekan? - -### 1) [Backup](Backup) - -### 2a) Nice way: -``` -docker-compose stop - -docker rm wekan-app -``` -Then edit docker-compose.yml wekan-app version tag, for example: -``` -image: quay.io/wekan/wekan:v4.55 -``` -And start Wekan: -``` -docker-compose up -d -``` -Done! - -### 2b) Brutal way: Destroy all Docker data! - -Deletes all containers etc! Clean, empty, data loss possible if you did not backup all Docker containers, and no conflicts when installing. -``` -git clone https://github.com/wekan/docker-cleanup-volumes - -cd docker-cleanup-columes - -./start.sh -``` -If you have Snap version of Docker, you need to add to scripts path of docker command, that is `/snap/bin/docker`. - -Get newest docker-compose.yml from https://github.com/wekan/wekan - -Start Wekan -``` -docker-compose up -d -``` -[Restore](Backup) diff --git a/docs/Platforms/FOSS/FreeBSD.md b/docs/Platforms/FOSS/FreeBSD.md deleted file mode 100644 index c62764679..000000000 --- a/docs/Platforms/FOSS/FreeBSD.md +++ /dev/null @@ -1,8 +0,0 @@ -Newest info at https://github.com/wekan/wekan/issues/2662 - -Old disappeared info [this comment](https://github.com/wekan/wekan/issues/1155#issuecomment-326734403) instructions: -[https://github.com/greinbold/install-wekan/blob/master/v0.32/freebsd-11.0-RELEASE.md](https://github.com/greinbold/install-wekan/blob/master/v0.32/freebsd-11.0-RELEASE.md) - -## FreeBSD Meteor build instructions - -TODO \ No newline at end of file diff --git a/docs/Platforms/FOSS/Friend.md b/docs/Platforms/FOSS/Friend.md deleted file mode 100644 index 8b7ad91f4..000000000 --- a/docs/Platforms/FOSS/Friend.md +++ /dev/null @@ -1,214 +0,0 @@ -## TODO - -WeKan: -- integration to Friend TODO list https://github.com/FriendUPCloud/friendup/issues/114 -- timezone https://github.com/wekan/wekan/wiki/Timezone - -Friend Desktop Cloud OS: -- Secure encrypted skinnable fast Open Source desktop in webbrowser/mobile/desktop app -- WeKan as app at Friend - -## Chat - -Discord link at https://friendos.com/en/developers/ - -Not in use currently: IRC at Freenode #friendup - -## Website - -https://friendos.com - -## Video - -https://www.youtube.com/watch?v=SB4dNC7u2MU - -## Roadmap - -- It's possible to use Wekan with Friend. At 2019-06-30 Wekan also works at [Raspberry Pi](Raspberry-Pi) like Friend already works, it makes possible local RasPi-only network. -- Then on local network you can use RasPi Cromium or Friend mobile/tablet Android/iOS app to connect to local network Friend desktop, also possible without connection to Internet. -- If using RasPi4 with 4 GB RAM or more, it's possible to run Wekan+Friend+Desktop etc on same RasPi4, servers+client webbrowser. -- Alternative to RasPi is Orange Pi 5 that can have 16 GB RAM http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-5-plus.html - -## Screenshot - -Wekan Friend development version at Friend Desktop. Not released to Friend Store yet. - -![Wekan Friend development version screenshot](https://wekan.github.io/wekan-friend-dev.png) - -More Screenshots of Wekan and Friend at https://blog.wekan.team/2018/05/upcoming-wekan-v1-00-and-platforms/ - -## Source code - -Friend Server source code at GitHub https://github.com/FriendUPCloud/friendup . Mobile apps are not at GitHub yet. - -Friend Apps source code at GitHub https://github.com/FriendUPCloud/friend-applications - -Wekan FriendUPApp source code at GitHub https://github.com/wekan/FriendUPApp - -Friend repos: - -- https://github.com/FriendSoftwareLabs/ -- https://github.com/FriendUPCloud/ - -Docker -- https://github.com/primesoftnz/friendos-docker -- https://github.com/wekan/friendos-docker -- https://github.com/wekan/docker-friendup - -AmiBase, mount Friend disk: -- https://github.com/steffest/AmiBase/blob/master/plugins/friend/friend.js -- https://www.stef.be/video/AmiBase_Friend_Filesystem.mp4 - -Other Web Desktops: -- Puavo, based on Debian, for schools https://github.com/puavo-org -- Win11 React https://github.com/xet7/win11 -- Win11 Svelte https://github.com/xet7/win11-svelte - - -## News about Wekan at Friend - -- Friend Software Labs Releases FriendUP v1.2 Release Candidate https://medium.com/friendupcloud/friend-software-labs-releases-friendup-v1-2-release-candidate-637d7bf800d4 -- Medium 2018-01-26: With Friend Wekan! https://medium.com/friendupcloud/with-friend-wekan-707af8d04d9f , you can discuss at Hacker News https://news.ycombinator.com/item?id=16240639 - -## News about Friend - -- Video of Friend Desktop walkthrough https://www.youtube.com/watch?v=PX-74ooqino -- Friend Network and Friend Store questions answered https://medium.com/friendupcloud/friend-network-and-friend-store-questions-answered-56fefff5506a -- How Friend Store unifies Blockchain projects https://medium.com/friendupcloud/how-friend-store-unifies-blockchain-projects-d3a889874bec -- Video of Friend Talk at Blockchangers Event - Oslo 2018 https://www.youtube.com/watch?v=7AsSlFenRwQ -- Video of Friend talk at DeveloperWeek 2018 https://medium.com/friendupcloud/video-of-our-talk-at-developerweek-2018-e9b10246a92f -- Friend interview at FLOSS450 https://twit.tv/shows/floss-weekly/episodes/450 - -*** - -## Install from Source - -TODO: Update install info - -### 1. Setup new Ubuntu 16.04 64bit server or VM - -Install script currently works only on Ubuntu 16.04 (and similar Xubuntu 16.04 64bit etc). - -### 2. Install git and create repos directory - -``` -sudo apt-get update -sudo apt-get install git -mkdir ~/repos -cd repos -``` -### 3. Clone Friend server repo -``` -git clone https://github.com/FriendUPCloud/friendup -``` -### 4. Clone Friend Apps repos -``` -git clone https://github.com/FriendUPCloud/friend-applications -``` -### 5. Clone Friend Chat repo -``` -git clone https://github.com/FriendSoftwareLabs/friendchat -``` -### 6. Clone Wekan App repo -``` -git clone https://github.com/wekan/FriendUPApp -``` -### 7. Optional: Clone Webmail repo -``` -git clone https://github.com/RainLoop/rainloop-webmail -``` -### 8. Install Friend to `~/repos/friendup/build` directory -This will install: -- MySQL database, credentials are in install.sh script, can be changed -- Untrusted SSL certificate for Friend with OpenSSL command -``` -cd friendup -./install.sh -``` -### 9. Add Wekan app -``` -cd ~/repos/friendup/build/resources/webclient/apps -ln -s ~/repos/FriendUPApp/Wekan Wekan -``` -### 10. Add other apps -``` -cd ~/repos/friendup/build/resources/webclient/apps -ln -s ~/repos/FriendUPCloud/friend-applications/Astray Astray -ln -s ~/repos/FriendUPCloud/friend-applications/CNESSatellites CNESSatellites -ln -s ~/repos/FriendUPCloud/friend-applications/CubeSlam CubeSlam -ln -s ~/repos/FriendUPCloud/friend-applications/Doom Doom -ln -s ~/repos/FriendUPCloud/friend-applications/FriendBrowser FriendBrowser -ln -s ~/repos/FriendUPCloud/friend-applications/GameOfBombs GameOfBombs -ln -s ~/repos/FriendUPCloud/friend-applications/GeoGuessr GeoGuessr -ln -s ~/repos/FriendUPCloud/friend-applications/Instagram Instagram -ln -s ~/repos/FriendUPCloud/friend-applications/InternetArchive InternetArchive -ln -s ~/repos/FriendUPCloud/friend-applications/MissileGame MissileGame -ln -s ~/repos/FriendUPCloud/friend-applications/Photopea Photopea -ln -s ~/repos/FriendUPCloud/friend-applications/PolarrPhotoEditor PolarrPhotoEditor -ln -s ~/repos/FriendUPCloud/friend-applications/Swooop Swooop -ln -s ~/repos/FriendUPCloud/friend-applications/TED TED -``` -### 11. Optional: Add custom modules -``` -cd ~/repos/friendup/build/modules -ln -s ~/repos/mysupermodule mysupermodule -``` -### 12. Install [Wekan Snap](https://github.com/wekan/wekan-snap/wiki/Install) -``` -sudo apt-get -y install snapd -sudo snap install wekan --channel=latest/candidate -``` -### 13. [ROOT_URL settings](Settings) to your server IP address -``` -sudo snap set wekan root-url='http://192.168.0.100:5000' -sudo snap set wekan port='5000' -``` -### 14. Start Wekan -``` -sudo snap start wekan -sudo snap enable wekan -``` -### 15. Start Friend -a) To background: -``` -cd ~/repos/friendup/build -./nohup_FriendCore.sh -``` -b) to foreground, useful when developing: -``` -./Phonix_FriendCore.sh -``` -or some of the following -``` -./Phonix_FriendCoreGDB.sh -./ValgrindGriendCore.sh -``` -### 16. Use with webbrowser - -Chrome or Chromium works best 32bit/64bit OS and also with Raspberry Pi on ARM. - -https://localhost:6502/webclient/index.html - -Username: fadmin - -Password: securefassword - -### 17. Use with mobile app - -Play Store: FriendUP by Friend Software Labs - -iOS App Store for iPhone/iPad: If not at App Store, ask - -Using Friend Android app to connect to your Friend server URL. - -There is also Friend iOS app, but I think it's not yet officially released. If someone is interested, invite to iOS Testflight can be had from [Friend chat](Friend). - -# Adding app icons to Friend desktop menus - -@CraigL: I found that when I added my web apps to the Dock (by dragging the .jsx file onto it) The app list (on the left side) in the Dock editor showed the full path of the application even after adding a "Display Name" field entry. What I did was to use the Display Name entry for the App list (if available). What I ended up with was: -Orig: - App List => /Home/apps/Youtube/YouTube.jsx -New: - App List => YouTube - -[My change is here](https://github.com/344Clinton/friendup/commit/6943cc3c05d74adc147950fb2a272d025b50e680). The fix was simple enough. Tracking it down took me a long time :grinning: diff --git a/docs/Platforms/FOSS/Helm.md b/docs/Platforms/FOSS/Helm.md deleted file mode 100644 index 4e5d72917..000000000 --- a/docs/Platforms/FOSS/Helm.md +++ /dev/null @@ -1,5 +0,0 @@ -# Helm Chart for Kubernetes - -[Official Helm Chart](https://github.com/wekan/wekan/tree/main/helm/wekan) - -[Related issue](https://github.com/wekan/wekan/issues/3923) \ No newline at end of file diff --git a/docs/Platforms/FOSS/OpenShift/OpenShift.md b/docs/Platforms/FOSS/OpenShift/OpenShift.md deleted file mode 100644 index 90d132c48..000000000 --- a/docs/Platforms/FOSS/OpenShift/OpenShift.md +++ /dev/null @@ -1,6 +0,0 @@ -[Docker, Wekan and MongoDB on OpenShift](https://github.com/wekan/wekan/tree/main/openshift) - -[OpenShift config issue](https://github.com/wekan/wekan/issues/1778) - -[Help for Openshift Setup from template failure](https://github.com/wekan/wekan/issues/1923) - diff --git a/docs/Platforms/FOSS/OpenSuse.md b/docs/Platforms/FOSS/OpenSuse.md deleted file mode 100644 index d87daf873..000000000 --- a/docs/Platforms/FOSS/OpenSuse.md +++ /dev/null @@ -1,38 +0,0 @@ -## Install WeKan for OpenSuse amd64 - -1) Install Snap: - -https://snapcraft.io/docs/installing-snap-on-opensuse - -2) Install WeKan: - -``` -sudo snap install wekan --channel=latest/candidate -sudo snap set wekan root-url='http://localhost' -sudo snap set wekan port='80' -``` - -3) Register at at http://localhost/sign-up - -Login at http://localhost/sign-in - -More info at https://github.com/wekan/wekan/wiki/Adding-users - -4) If you instead would like to access WeKan from other -laptops on your local network, check what is your computer -IP address, and change your IP address here: - -``` -sudo snap set wekan root-url='http://192.168.0.200' -``` - -More info at https://github.com/wekan/wekan/wiki/Settings - -5) Create app icon for your mobile devices on local WLAN: - -https://github.com/wekan/wekan/wiki/PWA - -6) Some more info: - -- https://github.com/wekan/wekan-snap/wiki/Install -- https://github.com/wekan/wekan/wiki diff --git a/docs/Platforms/FOSS/Platforms.md b/docs/Platforms/FOSS/Platforms.md deleted file mode 100644 index 519fb7cdf..000000000 --- a/docs/Platforms/FOSS/Platforms.md +++ /dev/null @@ -1,154 +0,0 @@ -## Downloads - -Downloading and installing Wekan on various platforms. - -Only newest Wekan is supported. Please check you are running newest Wekan, because old versions of Wekan have old Node.js and other vulnerabilities. - -## Related - -* [Wekan new release ChangeLog](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) -* [Adding Users](Adding-users) -* [Forgot Password](Forgot-Password) -* [Settings](Settings) -* [Email](Troubleshooting-Mail) -* **[Backup and Restore](Backup) <=== VERY CRITICAL. DO AUTOMATICALLY OFTEN !!** -* [Logs and Stats](Logs) -* [Wekan bug reports and feature requests](https://github.com/wekan/wekan/issues) -* [Proxy](https://github.com/wekan/wekan/issues/1480) - -*** - -## Production: [Univention](https://www.univention.com/products/univention-app-center/app-catalog/wekan/) platform, many apps and Wekan. - -- Virtual Appliances Download: [VirtualBox, KVM, VMware, VMware ESX](https://www.univention.com/products/univention-app-center/app-catalog/wekan/) -- [Video of installing Univention Wekan Appliance](https://wekan.github.io/UCS-4.4-with-wekan-10.200.2.25.webm) -- After installing, you get license key file in email. Go with webbrowser to VM ip address like http://192.x.x.x and upload license. After that also on VM screen console login as root is possible. If you install KDE app from App Center with webbrowser, you get KDE on VM screen. -- [Wekan for Univention Feature Requests and Bug Reports](https://github.com/wekan/univention) -- [Univention Open Source repos](https://github.com/Univention) -- [Univention interview at FLOSS Weekly 480](https://twit.tv/shows/floss-weekly/episodes/480) -- VM based on Debian. Free and Enterprise versions of Univention are same, only difference is paid support. -- Univention VM can be standalone, or replace Windows Server Active Directory, or join to existing Active Directory. Has web UI, LDAP server, Users/Groups management, adding user to app. -- Wekan LDAP login is integrated to Univention LDAP. Create at Univention web UI at Users management LDAP Domain Admin user, and add Wekan app for that user, to get Wekan Admin Panel. Normal users don't have Admin Panel. -- Has Wekan. From App Center you can install RocketChat, WordPress, OnlyOffice, NextCloud, OpenXChange, etc. Some apps are full free versions, some other apps require payment for more features. Wekan is full free version. -- Wekan on Univention is based Wekan Docker version. Upgrading all apps on Univention upgrades also Wekan to newest available Wekan version. -- Newer version of Wekan will be released when building and testing is done. - -*** -* Cloud: Some additional info - * [AWS](AWS) - * [Azure](Azure) - * [OpenShift](OpenShift) - -*** - -## Production: SaaS, Wekan ready paid services, just start using. - -* [Wekan Team](https://wekan.team/commercial-support/) - Snap Gantt Gpl Automatic Updates. Supports Wekan maintenance and development. -* [Cloudron](Cloudron) - Standalone Wekan -* [PikaPods](PikaPods) - Standalone Wekan with managed updates and backups. -* [Scalingo](Scalingo) - Standalone Wekan - -## Not exposed to Internet: Docker. No automatic upgrades. - -Keep backups, Docker is more complex than others above. Use only if you have time to test new release first, and it's critical nothing gets broken. Because Docker does not have automatic updates, please keep behind firewall, without any ports open to Internet, because Wekan gets new security etc updates to Node.js and other dependencies often. - -* [Docker](Docker) - * [Windows](Windows) + build from source - * [Mac](Mac) - * [SLES 64bit](Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1) -* [Proxy](https://github.com/wekan/wekan/issues/1480) - -*** -## Not exposed to Internet: Bundle for [RasPi 3, arm64, Windows and any Node+Mongo CPU architectures](Raspberry-Pi). No automatic updates, no sandboxing. - -New at 2019-06-30. If CPU architecture has enough RAM and fast harddisk, it can be used, but there -is no automatic updates and no sandboxing. - -New at 2019-09-08. You can also try [bash install script and automatic -upgrade script](https://github.com/wekan/wekan-bash-install-autoupgrade). - -Stop Wekan. Download newest bundle version at https://releases.wekan.team . - -Install Node 8.16.2 and some MongoDB like 3.2.x - 4.x. Preferred 4.x if available. -Bundle works for Windows native Node.js and MongoDB, arm64 server, etc any CPU node+mongodb. -Building from source does not seem to work on Windows. - -Extra steps only for CentOS 6: -- Install gcc-4.9.3 and boost -- Add gcc to path, for example: `export LD_LIBRARY_PATH=/root/gcc-4.9.3/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/:$LD_LIBRARY_PATH` -- At below fibers step, do instead `npm install fibers@2.0.1` - -Then, for example: -``` -mkdir repos -cd ~/repos -rm -rf bundle -wget https://releases.wekan.team/wekan-3.52.zip -unzip wekan-3.01.zip -cd bundle/programs/server -npm install -npm install node-gyp node-pre-gyp fibers -cd ../../.. -``` -Then modify `start-wekan.sh` or `start-wekan.bat` for Node and MongoDB paths. -See [Raspberry Pi page](Raspberry-Pi) for info about systemd etc. - -*** - -## Development: Not updated automatically. -* [Virtual appliance](virtual-appliance) - old -* [Source](Source) for development usage only. Source, Snap, Docker, Sandstorm, Meteor bundle and Windows build instructions. -* [Vagrant](Vagrant) -* Upcoming: - * [Friend](Friend) - Snap Standalone Wekan - -## Operating Systems - -* [Debian 64bit](Debian) -* [SmartOS](SmartOS) -* [FreeBSD](FreeBSD) - -## NAS - -* [Qnap TS-469L](https://github.com/wekan/wekan/issues/1180) - -## Other Clouds. Can have some restrictions, like: Requires from source install, has restricted 2.x kernel, does not support websockets, or not tested yet. - -* [Uberspace](Install-latest-Wekan-release-on-Uberspace) -* [OVH and Kimsufi](OVH) -* [OpenVZ](OpenVZ) -* [Heroku](Heroku) ? -* [Google Cloud](Google-Cloud) ? -* [Cloud Foundry](Cloud-Foundry) ? - -## Does not work yet: [DEB/RPM packages at Packager.io](https://packager.io/gh/wekan/wekan) - -New at 2019-08-04. For Ubuntu, Debian, CentOS and SLES. -[Testing how to get it working in progress here](https://github.com/wekan/wekan/issues/2582). - -# More - -[Features](Features) - -[Integrations](Integrations) - -[install_source]: https://github.com/wekan/wekan/wiki/Install-and-Update#install-manually-from-source -[installsource_windows]: https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows -[cloudron_button]: https://cloudron.io/img/button.svg -[cloudron_install]: https://cloudron.io/button.html?app=io.wekan.cloudronapp -[docker_image]: https://hub.docker.com/r/wekanteam/wekan/ -[heroku_button]: https://www.herokucdn.com/deploy/button.png -[heroku_deploy]: https://heroku.com/deploy?template=https://github.com/wekan/wekan/tree/main -[indiehosters_button]: https://indie.host/signup.png -[indiehosters_saas]: https://indiehosters.net/shop/product/wekan-20 -[sandstorm_button]: https://img.shields.io/badge/try-Wekan%20on%20Sandstorm-783189.svg -[sandstorm_appdemo]: https://demo.sandstorm.io/appdemo/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h -[scalingo_button]: https://cdn.scalingo.com/deploy/button.svg -[scalingo_deploy]: https://my.scalingo.com/deploy?source=https://github.com/wekan/wekan#master -[wekan_mongodb]: https://github.com/wekan/wekan-mongodb -[wekan_postgresql]: https://github.com/wekan/wekan-postgresql -[wekan_cleanup]: https://github.com/wekan/wekan-cleanup -[wekan_logstash]: https://github.com/wekan/wekan-logstash -[autoinstall]: https://github.com/wekan/wekan-autoinstall -[autoinstall_issue]: https://github.com/anselal/wekan/issues/18 -[debian_wheezy_devuan_jessie]: https://github.com/wekan/sps diff --git a/docs/Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md b/docs/Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md deleted file mode 100644 index 2888d77ad..000000000 --- a/docs/Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md +++ /dev/null @@ -1,237 +0,0 @@ -TODO: [Feature Request: command line utility to convert between Standalone Wekan MongoDB database, and Sandstorm grain .zip file](https://github.com/wekan/wekan/issues/1695) - -This is useful for example if you get [Board not found error](https://github.com/wekan/wekan/issues/1430) - -Using Ubuntu 18.04 or Mint 19.1 or Ubuntu for Windows Subsystem for Linux: - -## 1) Install required packages: - -``` -sudo apt-get install zip unzip p7zip-full wget -``` - -## 2) If you don't have Meteor 1.6.0.1 installed, download it to your home directory, and unarchive it - -``` -cd -wget https://releases.wekan.team/dev/repair/meteor-repair.7z -7z x meteor-repair.7z -``` - -## 3) Install MongoDB 3.2.22 - -https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-ubuntu/ - -## 4) Download Wekan grain - -Use Sandstorm arrow down button to download Wekan grain in .zip file to your home directory. - -## 5) Unzip downloaded file - -``` -unzip "YOUR-GRAIN-NAME-HERE.zip" -``` - -## 6) Repair database, if it does not open - -``` -.meteor/packages/meteor-tool/1.6.0_1/mt-os.linux.x86_64/dev_bundle/mongodb/bin/mongod --dbpath "./YOUR-GRAIN-NAME-HERE/data/wiredTigerDb" --repair -``` - -## 7) (Note to self about future versions of Meteor and Wekan) - -Currently Wekan uses Meteor 1.6.0.1. In .meteor/packages/meteor-tool/ directory is also some 1.8.x version for upcoming Wekan version using Meteor 1.8.x. This .meteor directory has been generated by installing meteor from www.meteor.com and then upgrading some existing or new app with for example `meteor update --release 1.6.0.1` so that correct version of Meteor is downloaded. - -## 8) Stop MongoDB - -``` -sudo systemctl stop mongod -``` - -## 9) Copy repaired database to MongoDB raw files and start MongoDB - -``` -sudo su -cd /var/lib -mv mongodb mongodb-original -cp -pR "/home/YOUR-USERNAME/YOUR-GRAIN-NAME-HERE/data/wiredTigerDb" . -mv wiredTigerDb mongodb -chown mongodb:mongodb mongodb -R -systemctl start mongod -exit -``` - -## 10) Browse database with MongoDB CLI - -``` -mongo -show dbs -use meteor -show collections -db.users.find(); -exit -``` - -## 11a) Dump database to MongoDB dump format - -``` -mongodump --db meteor -``` - -## 11b) Dump database to JSON text files - -Save this to `dump-json.sh` and then `chmod +x dump-json.sh && ./dump.sh meteor filesdir` - -Script is originally [from this Rocket.Chat issue](https://forums.rocket.chat/t/big-issue-with-custom-javascript/261/4) -``` -#!/bin/bash - -if [ ! $1 ]; then - echo " Example of use: $0 database_name [dir_to_store]" - exit 1 -fi -db=$1 -out_dir=$2 -if [ ! $out_dir ]; then - out_dir="./" -else - mkdir -p $out_dir -fi - -tmp_file="fadlfhsdofheinwvw.js" -echo "print('_ ' + db.getCollectionNames())" > $tmp_file -cols=`mongo $db $tmp_file | grep '_' | awk '{print $2}' | tr ',' ' '` -for c in $cols -do - mongoexport -d $db -c $c -o "$out_dir/exp_${db}_${c}.json" -done -rm $tmp_file -``` -It's also possible to restore JSON files like described [at stackoverflow](https://stackoverflow.com/questions/11255630/how-to-export-all-collection-in-mongodb) this way, but because userIDs etc can be different, there is no mapping to other users, so you may need to change JSON files some way: -``` -for file in *.json; do c=${file#*exp_yourdbname_}; c=${c%.json}; mongoimport --db yourdbname --collection "${c}" --file "${file}"; done -``` - -## 12) Save attachments to files - -[Download NoSQLBooster GUI webpage](https://nosqlbooster.com/downloads) - -If you download AppImage for Linux, run it with: -``` -chmod +x nosqlbooster4mongo*.AppImage -./nosqlbooster... (full filename here) -``` -It can install NoSQLbooster to Linux Menu/Programming/NoSQLBooster for MongoDB. - -With it connect to localhost:27017 - -Double click `cfs_gridfs.attachments.files` and right click filename and Download file. - -Wekan logo - -## 13) Optional: Restore - -a) Restore data to Standalone Wekan Snap - -b) Figure out how to make Sandstorm grain .zip file - -*** - -## OLD CONTENT, TO BE CLEANED UP SOMETIME - -## 5) Copy database files from unzipped Wekan grain to MongoDB - -In .zip file database files are in directory `data/wiredTigerDb/` - -In Wekan Snap, database files are in directory `/var/snap/wekan/common` - if you have other data there, rename common directory to other name first. - -[Snap Backup and Restore](https://github.com/wekan/wekan-snap/wiki/Backup-and-restore) - -[Docker Backup and Restore](Export-Docker-Mongo-Data) - -## 6) Change database file permissions to root user - -In Snap: -``` -sudo chown root:root /var/snap/wekan/common -R -``` - -## 7) Start MongoDB - -In Snap: -``` -sudo snap start wekan.mongodb -``` - -## 8) Or, if you are brave, also start standalone wekan - -Try does Standalone Wekan work with that database -``` -sudo snap start wekan.mongodb -sudo snap start wekan.wekan -``` -or both wekan and database at once -``` -sudo snap start wekan -``` - -## 9) To see MongoDB data, install Robo3T GUI - -https://robomongo.org - -Wekan Snap: Connect it to address `localhost:27019` - -Wekan Docker: If you have MongoDB exposed to outside Docker, Connect with Robo3T to address `localhost:27017`. Otherwise you first need to copy files from wekan-db Docker container to outside of Docker container, and restore files to local separately installed MongoDB database v3.2.20 or newer - -[Snap Backup and Restore](https://github.com/wekan/wekan-snap/wiki/Backup-and-restore) - -[Docker Backup and Restore](Export-Docker-Mongo-Data) - -## 10) Browse data in Robo 3T - -- On left, double click cards, checklists etc collections/tables to see their contents -- Currently default view to see is tree view. To see table view or JSON view, click small buttons above that white data area view display at near right border. - -## 11) If you don't find data in Robo 3T, use hex editor GUI - -In Linux, you can install Hex Editor for example with command: -``` -sudo apt install ghex -``` -or -``` -sudo yum install ghex -``` -Then it's usually in Linux desktop at Menu / Development / GHex. -Or you can start it in command line by writing `ghex` - -You can open files from your unzipped Wekan Sandstorm grain directory `data/wiredTigerDb/` to see if there is still some data that is not yet overwritten with other data. - -## 12) Moving data from Sandstorm to Standalone Wekan like Snap or Docker - -12.1 Compare databases of Sandstorm and Docker Wekan with mongo GUI https://nosqlbooster.com/ - -12.2 Create new user to Standalone Wekan - -12.3 Copy new user bcrypt password structure created bcrypt encrypted password from Sandstorm to Docker wekan structure. It's at users collection/table. Also add isAdmin=true boolean. - -12.4 Login - -12.5 Here is info about script how to save all from MongoDB to .JSON textfiles https://forums.rocket.chat/t/big-issue-with-custom-javascript/261/4 -and most likely how to get them back to mongodb -so just copying all of those boards JSON files and restoring to MongoDB database would work -and editing JSON files with any plain text editor. For big files you can try JEdit. - -12.6 Here is how to backup and restore mongodb in docker, snap etc https://github.com/wekan/wekan/wiki/Backup - -12.7 All Wekan Docker settings are in this textfile https://raw.githubusercontent.com/wekan/wekan/devel/docker-compose-build.yml - -12.8 Database name in Sandstorm is meteor, and in docker is wekan, so here is how to restore with different database name https://stackoverflow.com/questions/36321899/mongorestore-to-a-different-database - -## Azure links - -https://docs.microsoft.com/en-us/azure/container-service/dcos-swarm/container-service-swarm-mode-walkthrough - -https://docs.docker.com/docker-cloud/cloud-swarm/create-cloud-swarm-azure/ - -https://docs.atlas.mongodb.com/reference/microsoft-azure/ diff --git a/docs/Platforms/FOSS/Sandstorm/Sandstorm.md b/docs/Platforms/FOSS/Sandstorm/Sandstorm.md deleted file mode 100644 index 16da6ef70..000000000 --- a/docs/Platforms/FOSS/Sandstorm/Sandstorm.md +++ /dev/null @@ -1,163 +0,0 @@ -- At some cases [Hardened kernel may prevent creating new Wekan boards at Sandstorm](https://github.com/wekan/wekan/issues/1398) - -# Sandstorm at Debian and Ubuntu - -### Sandstorm CloudFlare DNS settings - -Sandstorm works when configured to full domain, with CloudFlare SSL/TLS, with Caddy. -Not subdomain, not sub-url, and not with Let's Encrypt that AFAIK does not support wildcard SSL/TLS. - -Source: https://github.com/sandstorm-io/sandstorm/issues/3714#issuecomment-2366866243 - -For me, it works at CloudFlare DNS using TLS Strict checking and DNS setting clicking to orange cloud icon to make TLS proxy with Origin certificate, that is at /etc/caddy/certs/example.com.pem with above private key and below cert. - -DNS records: -``` -* A example.com ip-address -@ A example.com ip-address -``` -Caddyfile, proxy to KVM VM that is running Debian and Sandstorm: -``` -# Full domain where Sandstorm login is. Not subdomain. Not sub-url. -*.example.com example.com { - tls { - load /etc/caddy/certs - alpn http/1.1 - } - # If KVM VM, it's IP address: - #reverse_proxy 123.123.123.123:80 - # Localhost port 81, when not in KVM VM - reverse_proxy 127.0.0.1:81 -} - -blog.somecompany.com { - tls { - load /etc/caddy/certs - alpn http/1.1 - } - # Blog hosted at Sandstorm WordPress - reverse_proxy 127.0.0.1:81 -} - -othercompany.com { - tls { - load /etc/caddy/certs - alpn http/1.1 - } - # Website hosted at Sandstorm Hacker CMS - reverse_proxy 127.0.0.1:81 -} -``` -If having Sandstorm inside of KVM VM: https://github.com/wekan/wekan/blob/main/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md - -At /opt/sandstorm/sandstorm.conf is domain where Sandstorm login is, http port etc. -``` -SERVER_USER=sandstorm -PORT=81 -MONGO_PORT=6081 -BIND_IP=127.0.0.1 -BASE_URL=https://example.com -WILDCARD_HOST=*.example.com -UPDATE_CHANNEL=dev -ALLOW_DEV_ACCOUNTS=false -SMTP_LISTEN_PORT=25 -#SANDCATS_BASE_DOMAIN=sandcats.io -#HTTPS_PORT=443 -``` -Some related info at: - -https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config - -I also had to wait that Origin certificate becomes active. - -But this worked for me only at CloudFlare. It did not work at FreeDNS of Namecheap. - -Also, I still need to write script to fix IP address if Dynamic DNS IP address changes, using CloudFlare API, because my cable modem does not have DDNS option for CloudFlare. - -Now that there is also a way to run Sandstorm at Ubuntu, it would be possible for me to move Sandstorm from KVM VM to run directly at host, without VM, and proxy from Caddy to localhost port of Sandstorm. - -https://groups.google.com/g/sandstorm-dev/c/4JFhr7B7QZU?pli=1 - -### Debian amd64 - -Installing Sandstorm works normally - -### Ubuntu 24.04 amd64 - -At startup was a lot of errors and saw "Permission denied; name = /proc/self/setgroups" - -I found this (run as root): -``` -echo "kernel.apparmor_restrict_unprivileged_userns = 0" >/etc/sysctl.d/99-userns.conf -sysctl --system -``` -And I ran it and restarted the Sandstorm service, everything seemed to work fine. -I hope this might be useful to someone. - -Source: https://groups.google.com/g/sandstorm-dev/c/4JFhr7B7QZU - -## Sandstorm Website - -[Sandstorm Website](https://sandstorm.org) - -If you have any grains at Sandstorm's **Oasis montly paid service**, please move those to self-hosted, because [only **Oasis grain hosting** part is shutting down](https://sandstorm.io/news/2019-09-15-shutting-down-oasis) - [HN](https://news.ycombinator.com/item?id=20979428). This does not affect any other parts like self-hosting at sandcats.io, App Market, updates, etc. - -Works on Ubuntu 64bit, on Debian 64bit. - -[Security audited](https://sandstorm.io/news/2017-03-02-security-review), recommended for security critical use on public internet or internal network. [Sandstorm Security Features](https://docs.sandstorm.io/en/latest/using/security-practices/). Sandstorm is [completely Open Source](https://sandstorm.io/news/2017-02-06-sandstorm-returning-to-community-roots), including [Blackrock Clustering](https://github.com/sandstorm-io/blackrock). - -Install to your own server. Automatic updates, tested before release. Sandstorm Wekan has different features than Standalone. - -**Works** -- Google/GitHub/LDAP/SAML/Passwordless email login. -- Import from Wekan JSON. -- Free SSL at https://yourservername.sandcats.io domain. -- [Rescuing MongoDB data from Sandstorm Grain .zip file to Standalone Wekan](Export-from-Wekan-Sandstorm-grain-.zip-file) - -**Does not work** -- [Sandstorm open issues](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+sandstorm+label%3ATargets%3ASandstorm) -- Import from Trello does not import attachments, because Sandstorm-compatible HTTP-access from Wekan to outside of Wekan grain sandbox is not implemented yet -- [Copying/Moving card to another board](https://github.com/wekan/wekan/issues/1729). -- [REST API](https://github.com/wekan/wekan/issues/1279) -- [Outgoing Webhooks](Outgoing-Webhook-to-Discord) -- [Email from Wekan](https://github.com/wekan/wekan/issues/2208#issuecomment-469290305) - -## Demo - -[![Try on Sandstorm][sandstorm_button]][sandstorm_appdemo] - -## Keep backups - -- Keep backups. Download your Wekan grains. -- It's possible to [Export from Wekan Sandstorm grain .zip file to rescue data](Export-from-Wekan-Sandstorm-grain-.zip-file) - -## Wekan App - -Wekan at [experimental](https://apps.sandstorm.io/app/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h?experimental=true) or [official](https://apps.sandstorm.io/app/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h) Sandstorm App Market. Note: Only use official. Experimental versions are broken. - -Newest Wekap app .spk file download at https://releases.wekan.team/sandstorm/ - -## Bug reports and Feature Requests - -[Wekan for Sandstorm bug reports and feature requests](https://github.com/wekan/wekan/issues) - -[Sandstorm bug reports and feature requests](https://github.com/sandstorm-io/sandstorm/issues) - -## Building Wekan for Sandstorm - -[Building Wekan for Sandstorm](https://github.com/wekan/wekan-maintainer/wiki/Building-Wekan-for-Sandstorm) - -## Wekan Sandstorm cards to CSV using Python - -[Wekan Sandstorm cards to CSV using Python](Wekan-Sandstorm-cards-to-CSV-using-Python) - -## Importing to Trello workaround - -It is not possible to import attachments directly from Trello when using Sandstorm version of Wekan. This is because Wekan is in secure sandbox at Sandstorm, and does not yet have Sandstorm-compatible way to import attachments from outside of Sandstorm. You need to: -1. Install Standalone version of Wekan, for example Docker/Snap/VirtualBox, for example to your own computer -2. Import board from Trello -3. Export board as Wekan board. Exported JSON file includes attachments as base64 encoded files. -4. Import board as Wekan board to Sandstorm. - -[sandstorm_button]: https://img.shields.io/badge/try-Wekan%20on%20Sandstorm-783189.svg -[sandstorm_appdemo]: https://demo.sandstorm.io/appdemo/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h \ No newline at end of file diff --git a/docs/Platforms/FOSS/Sandstorm/Wekan-Sandstorm-cards-to-CSV-using-Python.md b/docs/Platforms/FOSS/Sandstorm/Wekan-Sandstorm-cards-to-CSV-using-Python.md deleted file mode 100644 index 5e46e97b7..000000000 --- a/docs/Platforms/FOSS/Sandstorm/Wekan-Sandstorm-cards-to-CSV-using-Python.md +++ /dev/null @@ -1,101 +0,0 @@ -Code originally by ertanalytics (Eric Thompson / AZero). Script has been used for daily exports of a board. - -*** - -![Wekan Sandstorm cards to CSV using Python screenshot](https://wekan.github.io/sandstorm-api-csv.png) - -*** - -## Exporting Wekan board to JSON with Bash script - -1) On Wekan grain, get Webkey like this: - -``` -https://api-URL.SUBDOMAIN.sandcats.io#APIKEY -``` - -2) Modity URL, SUBDOMAIN and APIKEY to this Bash script that exports board to file directly: - -``` -curl https://Bearer:APIKEY@api-URL.SUBDOMAIN.sandcats.io/api/boards/sandstorm/export?authToken=#APIKEY > wekanboard.json -``` -For local Sandstorm install: -``` -curl http://Bearer:APIKEY@api-URL.local.sandstorm.io:6080/api/boards/sandstorm/export?authToken=#APIKEY > wekanboard.json -``` - -*** - -## Python script, has more dependencies - -cards-to-csv.py - -``` -#Sandstorm Wekan API Access Testing -##Does not seem to pull the redirected content -import requests -from requests.auth import HTTPBasicAuth -from bs4 import BeautifulSoup -from time import sleep -import os -import sys -import urllib -#All imports needed site navigation -import datetime -from time import sleep -import time -from selenium import webdriver -#drive.get('http://www.google.com/'); -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC -from selenium.common.exceptions import TimeoutException -from splinter import * -#driver = webdriver.Chrome() -##Data Handling -import pandas as pd -import json -from bson import json_util, ObjectId -from pandas.io.json import json_normalize -reload(sys) -sys.setdefaultencoding('utf-8') -#Export API Command -apiURLnoAuth = 'https://Bearer:APIKEY@api-URL.SUBDOMAIN.sandcats.io/api/boards/sandstorm/export?authToken=#APIKEY' - -sleep(1) #Time in seconds - -# Choose the browser (default is Firefox) -browser2 = Browser('chrome') - -# Fill in the url -browser2.visit(apiURLnoAuth) - -sleep(1) #Time in seconds - -soup = BeautifulSoup(browser2.html,'html.parser') -browser2.quit() - -script = soup.find('pre').children.next() -sanitized = json.loads(script) - -dflabels = pd.DataFrame(json_normalize(sanitized, 'labels')) -dflists = pd.DataFrame(json_normalize(sanitized, 'lists')) -dfcards = pd.DataFrame(json_normalize(sanitized, 'cards')) -dfusers = pd.DataFrame(json_normalize(sanitized, 'users')) - -normalized = json_normalize(sanitized) -df = pd.DataFrame(normalized) - - -dflists['createdAt'] = pd.to_datetime(dflists['createdAt']) -dflists['updatedAt'] = pd.to_datetime(dflists['updatedAt']) - -dfcards['createdAt'] = pd.to_datetime(dfcards['createdAt']) -dfcards['dateLastActivity'] = pd.to_datetime(dfcards['dateLastActivity']) -dfcards['title']=dfcards['title'].str.replace('\n','') - - -dfcards.to_csv('//DESTINATION_FOLDER/dfcards.csv',sep='|') -dflists.to_csv('//DESTINATION_FOLDER/dflists.csv',sep='|') -dflabels.to_csv('//DESTINATION_FOLDER/dfboardsLabels.csv',sep='|') -dfusers.to_csv('//DESTINATION_FOLDER/dfusers.csv',sep='|') diff --git a/docs/Platforms/FOSS/Sandstorm/Wekan-vs-Sandstorm.md b/docs/Platforms/FOSS/Sandstorm/Wekan-vs-Sandstorm.md deleted file mode 100644 index e34625f7b..000000000 --- a/docs/Platforms/FOSS/Sandstorm/Wekan-vs-Sandstorm.md +++ /dev/null @@ -1,36 +0,0 @@ -This is totally oversimplified TLDR comparison that leaves out a lot of details. - -## Both Wekan and Sandstorm - -* Authentication -* Admin Panel -* Wekan kanban board -* Can be installed to Ubuntu 16.04 64bit without Docker -* Can run inside Docker, see [Sandstorm within Docker](https://docs.sandstorm.io/en/latest/install/#option-6-using-sandstorm-within-docker) - -## Difference: User interface - -### Wekan - -[Themes feature](https://github.com/wekan/wekan/issues/781), pull requests welcome. - -### Sandstorm - -[Themes feature](https://github.com/sandstorm-io/sandstorm/issues/1713#issuecomment-301274498), pull requests welcome. - -[Current Admin Panel / Authentication screenshots](https://discourse.wekan.io/t/sso-passing-variables-through-url/493/8). - -The user interface in Sandstorm is one of Sandstorm's [long list of high-end security features](https://docs.sandstorm.io/en/latest/using/security-practices/) protecting potentially malicious applications running on Sandstorm sandboxes/grains to hijack whole full screen interface and do phishing of information, stealing admin credentials when replacing admin menus, etc. It's black to be totally recognizable and different from other applications. Having it hidden or on not so dark would make new users to not find it. There has been usability testing of Sandstorm's user interface. Sandstorm has been fully security audited and found problems fixed already. - -## Difference: Hardware requirements - -### Wekan - -* Can run on less powerful hardware than Sandstorm -* Could potentially run on ARM, if there is Meteor.js port for ARM. Some platform running on Raspberry Pi could already have Wekan, someone needs to do more research about it. - -### Sandstorm - -* Works only on x64 platform -* Requires at least 1GB RAM -* Is very efficient in handling RAM, shutting down sandboxes/grains when they are not in use. diff --git a/docs/Platforms/FOSS/SmartOS.md b/docs/Platforms/FOSS/SmartOS.md deleted file mode 100644 index 529ad94ac..000000000 --- a/docs/Platforms/FOSS/SmartOS.md +++ /dev/null @@ -1,72 +0,0 @@ -# Install Wekan on SmartOS - -based on: https://github.com/greinbold/install-wekan/blob/master/v0.32/freebsd-11.0-RELEASE.md - -Used https://github.com/skylime/mi-core-base 1963511a-19d8-4646-90b4-09ecfad1d3ac core-base 16.4.7 - -## Prerequisites - -Add user `wekan` - - # useradd -m wekan -s /usr/bin/bash - -Install prerequisites packages - - # pkgin install mongodb - ## if this failes use - # pkg_add https://pkgsrc.smartos.skylime.net/packages/SmartOS/2016Q4/x86_64/All/mongodb-3.2.10.tgz - # pkgin install nodejs curl # 8 - # pkgin install gmake gcc5 git jq # build requirements - -Enable MongoDB - - # /usr/sbin/svcadm enable -r svc:/pkgsrc/mongodb:default - -## Installation - -Newest wekan-VERSION.zip at https://releases.wekan.team - -As wekan - - $ cd - $ curl https://releases.wekan.team/wekan-0.89.tar.gz --output wekan-bundle.tar.gz - $ tar -xzpf wekan-bundle.tar.gz - -As root - - # chown -R wekan:wekan /home/wekan/bundle - -As wekan - - $ su wekan - $ cd ~/bundle/programs/server - $ npm install # this might be optional - needs testing - $ export CXX="/opt/local/gcc5/bin/g++ -m64" - $ export CC="/opt/local/gcc5/bin/gcc -m64" - $ export CPPFLAGS="-I/opt/local/include" - $ ln -s /opt/local/bin/node /opt/local/bin/nodejs - $ npm install fibers - $ npm install bcrypt - $ cd ~/bundle/programs/server/npm - $ npm install bson-ext@$(jq -r .version < node_modules/bson-ext/package.json) - $ npm install bcrypt@$(jq -r .version < node_modules/bcrypt/package.json) - $ # find more packages with native modules: find ~/bundle/ | grep "binding.gyp$" - -## Run - -Considering that we set the shell for user wekan to `/usr/bin/bash`, the following ENV variables can be set according the following method before starting of Wekan. These must be adapted according the shell. - - $ export MONGO_URL=mongodb://127.0.0.1:27017/wekan - $ export ROOT_URL=https://example.com - $ export MAIL_URL=smtp://user:pass@mailserver.example.com:25/ - $ export MAIL_FROM=wekan-admin@example.com - $ export PORT=8080 - -Now it can be run - - $ cd ~/bundle - $ node main.js - -## Cleanup - - $ pkgin rm gmake gcc5 git jq # remove build requirements \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Automatic-update-schedule.md b/docs/Platforms/FOSS/Snap/Automatic-update-schedule.md deleted file mode 100644 index a42f29798..000000000 --- a/docs/Platforms/FOSS/Snap/Automatic-update-schedule.md +++ /dev/null @@ -1,27 +0,0 @@ -## a) Install all Snap updates automatically between 02:00AM and 04:00AM -``` -snap set core refresh.schedule=02:00-04:00 -``` -## b) Update once a week at Sunday between 02:00AM and 04:00AM -``` -snap set core refresh.schedule=sun,02:00-04:00 -``` -## c) Update last Sunday of the month between 02:00AM and 04:00AM -``` -snap set core refresh.schedule=sun5,02:00-04:00 -``` -## [Update until specific day](https://snapcraft.io/docs/keeping-snaps-up-to-date#heading--refresh-hold) and other examples. - -## If required, you can disable all Snap updates -at `/etc/hosts` by adding a line: -``` -127.0.0.1 api.snapcraft.io -``` -## No schedule set - -Automatic upgrades happen sometime after Wekan is released, usually quite soon. - -## Manual update immediately - -`sudo snap refresh` - diff --git a/docs/Platforms/FOSS/Snap/Backup-and-restore.md b/docs/Platforms/FOSS/Snap/Backup-and-restore.md deleted file mode 100644 index a9cd9742a..000000000 --- a/docs/Platforms/FOSS/Snap/Backup-and-restore.md +++ /dev/null @@ -1,96 +0,0 @@ -Also see [Docker Backup and Restore](https://github.com/wekan/wekan/wiki/Export-Docker-Mongo-Data) - -# MongoDB client based backup - -## Install MongoDB shell 3.2.x - -[MongoDB 3.2.x shell for Ubuntu](https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-ubuntu/) - -## Backup script for MongoDB Data, if running Snap MongoDB at port 27019 - -```sh -#!/bin/bash -now=$(date +'%Y-%m-%d_%H.%M.%S') -mkdir -p backups/$now -cd backups/$now -mongodump --port 27019 -# if running on source install, run for example: mongodump --port 27017) -cd .. -zip -r $now.zip $now -cd ../.. -echo "\nBACKUP DONE." -echo "Backup is at directory backups/${now}." -echo "Backup is also archived to .zip file backups/${now}.zip" -``` - -# Manual Backup - -## Stop Wekan and Backup to directory called dump - -``` -sudo snap stop wekan.wekan - -mongodump --port 27019 - -sudo snap start wekan.wekan -``` -## Stop Wekan and Restore - -``` -sudo snap stop wekan.wekan - -## Only if you get errors about existing indexes, use this instead: -## mongorestore -d wekan --drop --noIndexRestore --port 27019 -mongorestore -d wekan --drop --port 27019 - -sudo snap start wekan.wekan -``` - - -*** - - -# Snap based backup (less reliable, can disappear with snap remove wekan) - -## Setup backup directory - -Create backup directory and set permissions - -``` -$ sudo mkdir /var/snap/wekan/common/db-backups -$ sudo chmod 777 /var/snap/wekan/common/db-backups -``` - -## Backup - -As normal user as archive: - -``` -$ wekan.database-backup -``` - -Backup is created in directory: - -``` -/var/snap/wekan/common/db-backups -``` - -There is optional Backup file is optional parameter `$ wekan.database-backup BACKUPFILENAME`, but probably it does not work. - -## List backups - -You need to first create one backup, otherwise this command shows error. - -To list existing backups in default directory, as normal user: - -``` -$ wekan.database-list-backups -``` - -## Restore backup - -As normal user: - -``` -$ wekan.database-restore FULL-PATH-TO-BACKUP-FILENAME -``` \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Candidate-WeKan-Snap-Manual-Upgrade.md b/docs/Platforms/FOSS/Snap/Candidate-WeKan-Snap-Manual-Upgrade.md deleted file mode 100644 index d87d2d89a..000000000 --- a/docs/Platforms/FOSS/Snap/Candidate-WeKan-Snap-Manual-Upgrade.md +++ /dev/null @@ -1,276 +0,0 @@ -# NOTE: Using Candidate, that has MongoDB 6, that is newest version - -Required time: If your database size is 500 GB, maybe 4 to 8 hours, or more. So bring enough of pizza, party snacks, limonade etc. - -Warning: If you don't have enough disk space, you could get data loss. - -Warning2: When starting WeKan Candidate, it could temporarily save all attachments to `/var/snap/wekan/common/files/` or other directory below `common`. That's why xet7 is working on trying to create separate migration app that moves attachments to S3, and that WeKan could upload to S3. This upgrade experience could be improved later. It's just that there are some unknown unknows if there would be automatic upgrade, could it handle all upgrade and migration cases. - -If you are have time to try tro update Snap from WeKan Stable to newest WeKan Candidate, to see does update work or not. - -If you have problems, add comment to issue https://github.com/wekan/wekan/issues/4780 - -## From WeKan Stable to Candidate - -### Preparation - -#### 1. Please read through all these below steps before starting, if possible. - -#### 2. Check your database size, and do you have enough disk space for upgrade: -``` -sudo du -sh /var/snap/wekan/common - -df -h -``` -For example, if your database size is 500 GB, and disk is nearly full, you need to stop WeKan and move to bigger disk. If disk gets full, there is possibility to MongoDB database corruption. Making mongodump could maybe take 2x of current size, or more. - -Some external disk related steps are at https://github.com/wekan/wekan/wiki/Repair-MongoDB - -#### 3. Problems usually are only, are attachments visible or not. Upgrade steps do not delete any files, if commands below are written correctly. - -Optional steps: - -a) Optionally, you could use [nosqlbooster](https://github.com/wekan/wekan/wiki/Backup#using-nosqlbooster-closed-source-mongodb-gui-with-wekan-snap-to-edit-mongodb-database) to save attachments to files, and export JSON to textfiles, before trying to update. There could also be files at `/var/snap/wekan/common/files` or other subdirectories. When saving attachments, note that there could be many files with same filename. - -b) Optinally, you can also save [all database content to JSON](https://github.com/wekan/wekan/wiki/Export-from-Wekan-Sandstorm-grain-.zip-file#11b-dump-database-to-json-text-files), but if your database is about 500 GB then it could be too much disk space required, because attachments are at base64 encoded text in JSON files. It's better ot save attachments with [nosqlbooster](https://github.com/wekan/wekan/wiki/Backup#using-nosqlbooster-closed-source-mongodb-gui-with-wekan-snap-to-edit-mongodb-database). - -#### 4. ssh to your server -``` -ssh wekanserver -``` -#### 5. Save snap settings and set it as executeable -``` -sudo snap get wekan | awk '{if(NR>1) print "sudo snap set wekan " $1 "=" "\"" $2 "\""}' > snap-settings.sh - -chmod +x snap-settings.sh -``` -#### 6. Edit `snap-settings.sh` to look like this, with nano or similar -``` -sudo snap set wekan root-url='https://wekan.example.com' -sudo snap set wekan port='80' -``` -At nano, Save: Ctrl-o Enter - -At nano. Exit: Ctrl-x - -#### 7. Download newest MongoDB tools for your distro version that will work with MongoDB 5.x, but do not install it yet - -https://www.mongodb.com/try/download/database-tools - -For example, for Ubuntu 22.04, [mongodb-database-tools-ubuntu2204-x86_64-100.6.1.deb](https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2204-arm64-100.6.1.deb) - -#### 8. Remove old versions of MongoDB tools etc, if you have those - -List them: -``` -dpkg -l | grep mongo -``` -If that shows that you have old mongodb server also, check do you really use it, what is the size of database server files? -``` -sudo du -sh /var/lib/mongodb -``` -Do you have these files, or similar, that show where else mongodb raw database directory could be? -``` -/etc/mongod.conf -/etc/mongod/mongod.conf -``` -Try to connect to it, and see if there is anything? -``` -mongo -``` -If it does not connect, maybe start MongoDB database, for example some of these commands: -``` -sudo systemctl enable mongod -sudo systemctl start mongod - -sudo systemctl enable mongodb -sudo systemctl start mongod - -sudo /etc/init.d/mongod start -``` -Try then again connect, and view what is there. In this example, if there is wekan database listed with `show dbs`: -``` -mongo - -show dbs - -use wekan - -show collections - -db.users.count() - -db.users.find() -``` -Also look is there `mongodb.list` packages repo? -``` -sudo ls /etc/apt/sources.list.d/ -``` -If you have all of mongodb-org, try to remove all of them, with all related files: -``` -sudo apt-get --purge remove mongo* -``` -Delete mongodb repo: -``` -sudo ls /etc/apt/sources.list.d/mongo* - -sudo apt update - -sudo apt clean - -sudo apt -y autoclean - -sudo apt -y autoremove -``` - -### Upgrade - -#### 9. Stop wekan app -``` -sudo snap stop wekan.wekan -``` -#### 10. Use WeKan Stable Snap mongodump version for dumping database -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu - -export PATH="$PATH:/snap/wekan/current/bin" - -mongodump --port 27019 -``` -#### 11. Move common directory contents. There are raw database files and maybe some attachments. -``` -sudo snap stop wekan - -sudo mkdir common - -sudo mv /var/snap/wekan/common/* common/ - -sudo rm -rf /var/snap/wekan/common/* -``` -#### 12. Change from Stable to Candidate -``` -sudo snap refresh wekan --channel=latest/candidate -``` -#### 13. Exit ssh and connect again, to not use old mongodump version anymore -``` -exit - -ssh wekanserver -``` -#### 14. Install mongodb tools for your distro version (from [step 7](#7-download-newest-mongodb-tools-for-your-distro-version-that-will-work-with-mongodb-5x-but-do-not-install-it-yet) above) -``` -sudo dpkg -i mongodb-database-tools-ubuntu2204-x86_64-100.6.1.deb -``` -If there is any errors, please copy all text from install process to comment to issue https://github.com/wekan/wekan/issues/4780 - -When installing some package, if some dependendencies are missing, they can usually be installed with some of these commands, and installing continued with:: -``` -sudo apt-get -f install - -sudo dpkg --configure -a -``` -If you get this kind of error, it means you have existing version of MongoDB Tools still installed, you should remove all those like at step 7 above: -``` -Unpacking mongodb-database-tools (100.6.1) ... -dpkg: error processing archive mongodb-database-tools-ubuntu2004-x86_64-100.6.1.deb (--install): - trying to overwrite '/usr/bin/bsondump', which is also in package mongo-tools 3.6.3-0ubuntu1 -``` -Sure there are options to force install this, for example this way, but not recommended: -``` -sudo rm /usr/bin/bsondump - -sudo dpkg -i ... -``` -Or other not recommended way, forcing overwrite: -``` -sudo dpkg -i --force-overwrite mongodb-database-tools-ubuntu2004-x86_64-100.6.1.deb -``` -But better would be to use that [step 7](#7-download-newest-mongodb-tools-for-your-distro-version-that-will-work-with-mongodb-5x-but-do-not-install-it-yet) above to remove all old mongodb packages and repo, and then install MongoDB tools. - -#### 15. Restore -``` -sudo snap stop wekan - -sudo snap start wekan.mongodb - -mongorestore --drop --port 27019 --noIndexRestore -``` -#### 16. Add back settings - -Recommended is to use [Caddy 2](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config) instead of Caddy1 that is included in WeKan Snap currently at 2022-12-21. Caddy 2 maybe will be included to WeKan Snap later. - -See if in your `snap-settings.sh` is this kind of command, are you using Caddy1 ? -``` -sudo snap set wekan caddy-enabled='true' -``` -If you use Caddy1, and have any domain settings in your `common/Caddyfile`, copy it back: -``` -sudo cp common/Caddyfile /var/snap/wekan/common/ -``` - -At [step 6](#6-edit-snap-settingssh-to-look-like-this-with-nano-or-similar) above, you did create script that adds back snap settings. Run it to restore those settings: -``` -./snap-settings.sh -``` -You could also copy that file to common directory, if you like, or just keep it in your current directory: -``` -sudo cp snap-settings.sh /var/snap/wekan/common/ -``` -#### 17. Start WeKan -``` -sudo snap start wekan -``` -#### 18. Test are WeKan attachments visible - -#### 19. If you are using WeKan Snap Caddy1, if it does not work, change to Caddy2 https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config - -#### 20. Backup and cleanup - -Create archive of old files, and transer it to your local laptop, save somewhere safe: -``` -ssh wekanserver - -sudo su - -7z a old-wekan.7z snap-settings.sh common dump - -exit - -scp wekanserver:/root/old-wekan.7z . -``` -And then delete old files from server. Do not delete `snap-settings.sh`. -``` -ssh wekanserver - -rm -rf common dump -``` -Also, keep [Daily Backups](https://github.com/wekan/wekan/wiki/Backup) - - -## Oops it did not work. From WeKan Candidate back to Stable - -``` -sudo snap stop wekan - -sudo rm -rf /var/snap/wekan/common/* - -sudo snap refresh wekan --channel=latest/stable - -sudo snap stop wekan - -sudo rm -rf /var/snap/wekan/common/* - -sudo mv common/* /var/snap/wekan/common/ - -sudo snap start wekan - -./snap-settings.sh -``` - -If you have problems, add comment to issue https://github.com/wekan/wekan/issues/4780 - -## From WeKan Gantt GPL to WeKan Candidate - -- This is discontinued, Gantt features will be later added to WeKan MIT version. -- Gantt version files are instead at `/var/snap/wekan-gantt-gpl/` -- Gantt snap name is wekan-gantt-gpl diff --git a/docs/Platforms/FOSS/Snap/CentOS-7.md b/docs/Platforms/FOSS/Snap/CentOS-7.md deleted file mode 100644 index b1368fe13..000000000 --- a/docs/Platforms/FOSS/Snap/CentOS-7.md +++ /dev/null @@ -1,249 +0,0 @@ -## CentOS 7 and RHEL7 and newer - -Alternatives: - -- Snap install like below. Automatic updates. Some time ago there were problems with [Snap on CentOS 7](https://github.com/wekan/wekan-snap/issues/103#issuecomment-571223099), that can result in updating not working properly, but that is a long time ago, and Snap version is currently 2020-04-29 installed at about 400 servers worldwide, according to Snap statistics that show only wordwide and per-country stats, not any more specific info. Please keep [daily backups](https://github.com/wekan/wekan/wiki/Backup). -- Docker or Bash/SystemD install from https://wekan.github.io - -*** - -[Wekan snap bug reports and feature requests](https://github.com/wekan/wekan-snap/issues) - -# Distro specific info how to install Snap on 64bit Linux - -https://snapcraft.io - -- CentOS 7, RHEL7 and newer, instructions below - -# Install Wekan - -### 1) Use root -``` -sudo su -``` - -### 2) Install snap - -2019-11-12 If instead of Caddy you use Nginx in front of Wekan on CentOS 7, you should -[disable selinux to prevent Nginx permission denied error](https://github.com/wekan/wekan/issues/2792). - -2018-11-05 Also see [new snapd on EPEL](https://forum.snapcraft.io/t/snapd-updates-in-fedora-epel-for-enterprise-linux/8310). - -Source: [Experimental CentOS7 snap](https://copr.fedorainfracloud.org/coprs/ngompa/snapcore-el7/) and [Forum post](https://forum.snapcraft.io/t/install-snapd-on-centos/1495/21) - -``` -yum makecache fast - -yum install yum-plugin-copr epel-release - -yum copr enable ngompa/snapcore-el7 - -yum install snapd - -systemctl enable --now snapd.socket -``` - -### 3) Install Wekan. Set URL like (subdomain.)example.com(/suburl) -``` -snap install wekan - -snap set wekan root-url='https://boards.example.com' -``` - -[MORE ROOT-URL EXAMPLES](https://github.com/wekan/wekan/wiki/Settings) - -### 4) Set port where Wekan runs, for example 80 if http, or local port 3001, if running behing proxy like Caddy -``` -snap set wekan port='3001' - -systemctl restart snap.wekan.wekan -``` - -### 5) Install all Snap updates automatically between 02:00AM and 04:00AM -``` -snap set core refresh.schedule=02:00-04:00 -``` - -Automatic upgrades happen sometime after Wekan is released, or at scheduled time, or with `sudo snap refresh` - -### 6) Email and Other Settings - -``` -sudo snap set wekan mail-url='smtps://user:pass@mailserver.example.com:453' -sudo snap set wekan mail-from='Wekan Boards ' -``` - -[Troubleshooting Email](https://github.com/wekan/wekan/wiki/Troubleshooting-Mail) - -## LDAP - -See [Supported Settings Keys](Supported-settings-keys#ldap) - -## [Matomo Web Analytics integration](Supported-settings-keys#matomo-web-analytics-integration) - -See [Supported Settings Keys](Supported-settings-keys#matomo-web-analytics-integration) - -## [Rocket.Chat providing OAuth2 login to Wekan](https://github.com/wekan/wekan/wiki/OAuth2) - -Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when Rocket.Chat is providing OAuth2 login to Wekan. - -# Optional: Install Caddy - Every Site on HTTPS - -a) Personal non-commercial use only, included - -b) Commercial use: see https://caddyserver.com/products/licenses - and [commercial usage issue](https://github.com/wekan/wekan-snap/issues/39), - contact Wekan maintainer x@xet7.org about how to enable commercial version - of caddy. - - -### 7) Add domain to Caddy config -``` -nano /var/snap/wekan/common/Caddyfile -``` - -### 8) Replace first top line of text with (subdomain.)example.com(/suburl), without any beginning of http/https - -Example Caddyfile config. - -"alpn http/1.1" is because Firefox Inspect Console does not support http/2, so [turning it off](https://github.com/wekan/wekan/issues/934) so that Firefox would not show wss websocket errors. Chrome console supports http/2. - -This uses free Let's Encrypt SSL. You can also use [free CloudFlare wildcard SSL or any other SSL cert](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config). -``` -boards.example.com { - tls { - alpn http/1.1 - } - - proxy / localhost:3001 { - websocket - transparent - } -} -``` -Caddyfile example of static directory listing: -``` -# Files have these permissions: -# chown root:root /var/snap/wekan/common/download.example.com -download.example.com { - root /var/snap/wekan/common/download.example.com - browse -} -``` -[MORE Caddyfile EXAMPLES](https://github.com/caddyserver/examples) - -### 9) Enable Caddy automatic https -``` -snap set wekan caddy-enabled='true' -``` -## 10) Reboot - -## 11) Disable and enable wekan - -``` -$ sudo snap disable wekan -$ sudo snap enable wekan -``` -If you use the mongodb port for another app, then, change it too: -``` -$ sudo snap set wekan mongodb-port=27019 -``` - -## 12) Add users - -[Add users](https://github.com/wekan/wekan/wiki/Adding-users) - -[Forgot Password](https://github.com/wekan/wekan/wiki/Forgot-Password) - -## MongoDB CLI - -1) Install MongoDB 3.2.x tools, and run on CLI: - -`mongo --port 27019` - -*** - - -# Older install docs - -``` -$ sudo snap install wekan -``` - -IMPORTANT: SETUP [URL SETTINGS](#url-settings) BELOW, SO OPENING CARDS ETC WORKS CORRECTLY. More info at [Supported settings keys](Supported-settings-keys). - -**IMPORTANT: Wekan Snap is bleeding edge, so any commits made to the wekan repository are pushed to the snap directly. Decide for yourself if you want to run wekan snap in production** - -Make sure you have connected all interfaces, check more by calling - -``` -$ snap interfaces -``` - -Wekan has two services, to check status/restart/stop use systemd commands: - -You can use these service commands: -- status -- start -- stop -- restart - -MongoDB service: - -``` -$ sudo systemctl status snap.wekan.mongodb -``` - -Wekan service: - -``` -$ sudo systemctl status snap.wekan.wekan -``` - -## URL settings - -[Nginx and Snap settings for https://example.com/wekan sub-url](https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config) - -Full URL to your Wekan, for example: - -### Run Wekan on local network on selected port on computer IP address - -``` -$ sudo snap set wekan root-url='http://192.168.10.100:5000' -``` - -### Run Wekan only locally on selected port - -``` -$ sudo snap set wekan root-url='http://localhost:5000' -``` - -### Nginx or Caddy webserver in front of Wekan - -[Nginx](https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config) or [Caddy](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config) is in front, full URL to real web address URL of Nginx or Caddy. - -``` -$ sudo snap set wekan root-url='https://example.com' -``` - -or - -``` -$ sudo snap set wekan root-url='https://example.com/wekan' -``` - -## Port settings - -Localhost port where Wekan is running. This does not need to be exposed to Internet when running behind Nginx or Caddy. - -``` -$ sudo snap set wekan port='' -``` - -## Restart Wekan after changes - -``` -$ sudo systemctl restart snap.wekan.wekan -``` - -When running without any additional settings, Wekan is at http://localhost:8080 diff --git a/docs/Platforms/FOSS/Snap/CentOS8.md b/docs/Platforms/FOSS/Snap/CentOS8.md deleted file mode 100644 index 5f74b5f4b..000000000 --- a/docs/Platforms/FOSS/Snap/CentOS8.md +++ /dev/null @@ -1,20 +0,0 @@ -Using CentOS 8 Stream. - -1. Install Snap https://snapcraft.io/docs/installing-snap-on-centos - -2. Reboot - -3. With terminal, test latest release candidate, to your server IP address: - -``` -su -snap install wekan --channel=latest/candidate -snap set wekan root-url='http://YOUR-IP-ADDRESS' -snap set wekan port='80' -``` - -4. For additional server options, see https://github.com/wekan/wekan/wiki/Settings - -5. For adding users, see https://github.com/wekan/wekan/wiki/Adding-users - -6. For other login option, see right menu at https://github.com/wekan/wekan/wiki \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Home.md b/docs/Platforms/FOSS/Snap/Home.md deleted file mode 100644 index 864862504..000000000 --- a/docs/Platforms/FOSS/Snap/Home.md +++ /dev/null @@ -1,26 +0,0 @@ -## Installing newest Snap WeKan - -Newest Stable Snap is at Snap Candidate channel: - -https://github.com/wekan/wekan/discussions/5385 - -Later, when xet7 gets database migrations working, newest version will be added to Snap Stable channel too. - - -*** - -OLD INFO: - - -## Wekan snap at web - -https://uappexplorer.com/snap/ubuntu/wekan - -## Help command after installing -``` -$ wekan.help -``` - -**All of commandline help is also in this wiki, categorized to their own wiki pages.** - -See also [Wekan documentation](https://github.com/wekan/wekan/wiki) \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Install-snap-with-Ansible.md b/docs/Platforms/FOSS/Snap/Install-snap-with-Ansible.md deleted file mode 100644 index fdf9c48c3..000000000 --- a/docs/Platforms/FOSS/Snap/Install-snap-with-Ansible.md +++ /dev/null @@ -1,15 +0,0 @@ -## Ansible install by Pavel Stratil - -[Info source](https://github.com/wekan/wekan/issues/1106) - -## Original repos, please add feature requests there - -https://github.com/Vaizard/mage-wekan - -https://github.com/vaizard/mage-snapd - -## Wekan's forked version - -https://github.com/wekan/mage-wekan - -https://github.com/wekan/mage-snapd diff --git a/docs/Platforms/FOSS/Snap/Install.md b/docs/Platforms/FOSS/Snap/Install.md deleted file mode 100644 index fe1bcb982..000000000 --- a/docs/Platforms/FOSS/Snap/Install.md +++ /dev/null @@ -1,280 +0,0 @@ -## Installing newest Snap WeKan - -Newest Stable Snap is at Snap Candidate channel: - -https://github.com/wekan/wekan/discussions/5385 - -Later, when xet7 gets database migrations working, newest version will be added to Snap Stable channel too. - -*** - -OLD INFO: - -Snap for Linux, install to your own server or laptop. Automatic Updates. Only Standalone Wekan. - -If on Snap Stable automatic update breaks something, [report Wekan for Snap bugs and feature requests here](https://github.com/wekan/wekan-snap/issues), so it can be fixed on some automatic update. If security is critical, keep behind firewall, without any ports open to Internet. - -# Distro specific info how to install Snap on 64bit Linux - -https://snapcraft.io - -- Recommended: Newest 1) Ubuntu 2) Debian based distro -- Arch -- Fedora -- Solus -- OpenSUSE -- Gentoo -- Manjaro -- Elementary OS -- [CentOS 7, RHEL7 and newer](CentOS-7) -- [CentOS 8](CentOS8) - -How ROOT_URL is set: -https://github.com/wekan/wekan/wiki/Settings - -Here is how to add users: -https://github.com/wekan/wekan/wiki/Adding-users - -How to switch between WeKan and WeKan Gantt GPL: -https://github.com/wekan/wekan/issues/2870#issuecomment-721364824 - -Newest Snap WeKan does not yet have migration to newest MongoDB. Here is how to try newer WeKan test candidate version, and migrate database manually: -https://github.com/wekan/wekan/issues/4505#issuecomment-1158380746 - -Below is how to install Snap. - -# Install Wekan - -### 1) Use root -``` -sudo su -``` - -### 2) Install snap - -a) Debian or Ubuntu -``` -apt install snapd -``` - -b) Other distros - -See [Snapcraft website](https://snapcraft.io). - -### 3) Install Wekan. Set URL like (subdomain.)example.com(/suburl) -``` -snap install wekan - -snap set wekan root-url='https://wekan.example.com' -``` - -[MORE ROOT-URL EXAMPLES](https://github.com/wekan/wekan/wiki/Settings) - -### 4) Set port where Wekan runs, for example 80 if http, or local port 3001, if running behing proxy like Caddy -``` -snap set wekan port='3001' - -systemctl restart snap.wekan.wekan -``` - -### 5) Install all Snap updates automatically between 02:00AM and 04:00AM - -#### NEW: - -Use `refresh.timer`, see https://github.com/wekan/wekan/issues/5402 - -#### OLD: - -``` -snap set core refresh.schedule=02:00-04:00 -``` -Update once a week at Sunday between 02:00AM and 04:00AM -``` -snap set core refresh.schedule=sun,02:00-04:00 -``` -Update last Sunday of the month between 02:00AM and 04:00AM -``` -snap set core refresh.schedule=sun5,02:00-04:00 -``` -[Update until specific day](https://snapcraft.io/docs/keeping-snaps-up-to-date#heading--refresh-hold) and other examples. - -If required, you can disable all Snap updates at `/etc/hosts` by adding a line: -``` -127.0.0.1 api.snapcraft.io -``` - -Automatic upgrades happen sometime after Wekan is released, or at scheduled time, or with `sudo snap refresh` - -### 6) Email and Other Settings - -``` -sudo snap set wekan mail-url='smtps://user:pass@mailserver.example.com:453' -sudo snap set wekan mail-from='Wekan Boards ' -``` - -[Troubleshooting Email](https://github.com/wekan/wekan/wiki/Troubleshooting-Mail) - -## LDAP - -See [Supported Settings Keys](Supported-settings-keys#ldap) - -## [Matomo Web Analytics integration](Supported-settings-keys#matomo-web-analytics-integration) - -See [Supported Settings Keys](Supported-settings-keys#matomo-web-analytics-integration) - -## [Rocket.Chat providing OAuth2 login to Wekan](https://github.com/wekan/wekan/wiki/OAuth2) - -Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when Rocket.Chat is providing OAuth2 login to Wekan. - -# Optional: Install Caddy - Every Site on HTTPS - -### 7) Add domain to Caddy config -``` -nano /var/snap/wekan/common/Caddyfile -``` - -### 8) Replace first top line of text with (subdomain.)example.com(/suburl), without any beginning of http/https - -Example Caddyfile config. - -"alpn http/1.1" is because Firefox Inspect Console does not support http/2, so [turning it off](https://github.com/wekan/wekan/issues/934) so that Firefox would not show wss websocket errors. Chrome console supports http/2. - -This uses free Let's Encrypt SSL. You can also use [free CloudFlare wildcard SSL or any other SSL cert](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config). -``` -boards.example.com { - tls { - alpn http/1.1 - } - - proxy / localhost:3001 { - websocket - transparent - } -} -``` -Caddyfile example of static directory listing: -``` -# Files have these permissions: -# chown root:root /var/snap/wekan/common/download.example.com -download.example.com { - root /var/snap/wekan/common/download.example.com - browse -} -``` -[MORE Caddyfile EXAMPLES](https://github.com/caddyserver/examples) - -### 9) Enable Caddy automatic https -``` -snap set wekan caddy-enabled='true' -``` -## 10) Reboot - -## 11) Disable and enable wekan - -``` -$ sudo snap disable wekan -$ sudo snap enable wekan -``` -If you use the mongodb port for another app, then, change it too: -``` -$ sudo snap set wekan mongodb-port=27019 -``` - -## 12) Add users - -[Add users](https://github.com/wekan/wekan/wiki/Adding-users) - -[Forgot Password](https://github.com/wekan/wekan/wiki/Forgot-Password) - -## MongoDB CLI - -1) Install MongoDB 3.2.x tools, and run on CLI: - -`mongo --port 27019` - -*** - - -# Older install docs - -``` -$ sudo snap install wekan -``` - -IMPORTANT: SETUP [URL SETTINGS](#url-settings) BELOW, SO OPENING CARDS ETC WORKS CORRECTLY. More info at [Supported settings keys](Supported-settings-keys). - -**IMPORTANT: Wekan Snap is bleeding edge, so any commits made to the wekan repository are pushed to the snap directly. Decide for yourself if you want to run wekan snap in production** - -Make sure you have connected all interfaces, check more by calling - -``` -$ snap interfaces -``` - -Wekan has two services, to check status/restart/stop use systemd commands: - -You can use these service commands: -- status -- start -- stop -- restart - -MongoDB service: - -``` -$ sudo systemctl status snap.wekan.mongodb -``` - -Wekan service: - -``` -$ sudo systemctl status snap.wekan.wekan -``` - -## URL settings - -[Nginx and Snap settings for https://example.com/wekan sub-url](https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config) - -Full URL to your Wekan, for example: - -### Run Wekan on local network on selected port on computer IP address - -``` -$ sudo snap set wekan root-url='http://192.168.10.100:5000' -``` - -### Run Wekan only locally on selected port - -``` -$ sudo snap set wekan root-url='http://localhost:5000' -``` - -### Nginx or Caddy webserver in front of Wekan - -[Nginx](https://github.com/wekan/wekan/wiki/Nginx-Webserver-Config) or [Caddy](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config) is in front, full URL to real web address URL of Nginx or Caddy. - -``` -$ sudo snap set wekan root-url='https://example.com' -``` - -or - -``` -$ sudo snap set wekan root-url='https://example.com/wekan' -``` - -## Port settings - -Localhost port where Wekan is running. This does not need to be exposed to Internet when running behind Nginx or Caddy. - -``` -$ sudo snap set wekan port='' -``` - -## Restart Wekan after changes - -``` -$ sudo systemctl restart snap.wekan.wekan -``` - -When running without any additional settings, Wekan is at http://localhost:8080 diff --git a/docs/Platforms/FOSS/Snap/Limit-snap-to-root-user-only.md b/docs/Platforms/FOSS/Snap/Limit-snap-to-root-user-only.md deleted file mode 100644 index fa8b3afb0..000000000 --- a/docs/Platforms/FOSS/Snap/Limit-snap-to-root-user-only.md +++ /dev/null @@ -1,31 +0,0 @@ -If you have some users logging to your server, that don't have root access, and you want to limit snap to root user only, you can do the following: - -## 1) Set snap refresh schedule, for example - -``` -sudo snap set core refresh.schedule=02:00-03:00 -``` - -## 2) Set cron to limit permissions to root users after updates - -For example, sudo to root, and edit root cron with nano: - -``` -sudo su -export EDITOR=nano -crontab -e -``` - -and add there that at 03:10 permissions are limited to root again: -``` -10 3 * * * chmod og-rwx /usr/bin/snap -10 3 * * * chmod -R og-rwx /var/snap -``` -You can see crontab syntax help at https://crontab.guru - -`snap` is the command, and `/var/snap` is where data is stored. - -## Future snap features for permissions - -For more advanced user permission control in snap, sometime new features will be added:
-https://forum.snapcraft.io/t/multiple-users-and-groups-in-snaps/1461/3 \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Making-releases-from-source.md b/docs/Platforms/FOSS/Snap/Making-releases-from-source.md deleted file mode 100644 index 807f261de..000000000 --- a/docs/Platforms/FOSS/Snap/Making-releases-from-source.md +++ /dev/null @@ -1,54 +0,0 @@ -# Installing snapcraft from source - -This is old and already fixed, was only needed when [snap build servers were broken](https://github.com/wekan/wekan-snap/issues/58) and [snapcraft had bug](https://forum.snapcraft.io/t/permission-denied-when-building-with-snapcore-snapcraft/7186/14?u=xet7) that has [fix that was not released to snap channel yet](https://github.com/snapcore/snapcraft/pull/2240). All this is fixed now. - -So I removed snap version, and installed snapcraft from source, and it seems to work for me. - -## Snapcraft source install on Ubuntu 16.04 64bit - -Add to /root/.bashrc: -``` -export PATH="$PATH:/home/user/repos/snapcraft/bin" -``` -## Install dependencies -``` -sudo apt install python3-yaml python3-tabulate python3-pymacaroons \ -python3-progressbar python3-requests-unixsocket python3-petname \ -python3-pyelftools python3-click python3-simplejson \ -python3-requests-toolbelt python3-jsonschema xdelta3 -``` -## Install snapcraft -``` -cd ~/repos -git clone https://github.com/snapcore/snapcraft.git -cd snapcraft -sudo python3 setup.py install -``` -## [Workaround bug](https://bugs.launchpad.net/snapcraft/+bug/1656884/comments/1) -``` -sudo ln -s /usr/local/lib/python3.5/dist-packages/snapcraft-2.43-py3.5.egg/share/snapcraft/ /usr/share/snapcraft -``` -## Build package -``` -cd ~/repos/wekan -sudo snapcraft -``` -## Install snap package locally to test it -``` -sudo snap install --dangerous wekan_1.*_amd64.snap -``` -## Changing back to stable or edge snap - -https://github.com/wekan/wekan-snap/wiki/Snap-Developer-Docs - -## Login to snapcraft - -If you have access to publishing snaps. - -## Push package to snap store -``` -sudo snapcraft push wekan_1.*_amd64.snap -``` -## Publish at snap store - -https://dashboard.snapcraft.io/dev/snaps/7867 diff --git a/docs/Platforms/FOSS/Snap/Making-releases.md b/docs/Platforms/FOSS/Snap/Making-releases.md deleted file mode 100644 index b1ceb1556..000000000 --- a/docs/Platforms/FOSS/Snap/Making-releases.md +++ /dev/null @@ -1,9 +0,0 @@ -## Triggering git import process manually - -https://code.launchpad.net/~wekan-team/wekan/+git/wekan - -## When ready, uploaded to store. Check and release. - -Once you snap is uploaded you should see it here: - -https://dashboard.snapcraft.io/dev/snaps/7867 \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md b/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md deleted file mode 100644 index 6814d3471..000000000 --- a/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md +++ /dev/null @@ -1,476 +0,0 @@ -https://github.com/wekan/wekan-snap/wiki/Many-Snaps-on-LXC#lxd-init-cidr - -# NEW WAY: Parallel Snap Installs - -Note: This presumes that your laptop runs newest Ubuntu or Kubuntu, and that server is Ubuntu. - -1) Install Caddy2 https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config - -2) Optional, recommended: Encrypted VM. Idea: Bare Metal Caddy => Proxy to encrypted VM ports => Each customer separate Snap WeKan port. Snap sandbox files at /common, snap code can not access files outside of it's /common directories. Newest WeKan is Snap Candidate. Snap has automatic updates. - -2.1) If your server has additional harddrives, format them: - -``` -ls /dev -mkfs.ext4 /dev/nvme0n1 -``` -2.2) Look at that above command text output, what is created disk UUID. Add those to /etc/fstab: -``` -UUID=12345-678-90 /data ext4 errors=remount-ro 0 1 -``` -2.3) Create directories for mounting disk, and mount all drives: -``` -sudo su -cd / -mkdir /data -mount -a -``` -2.4) Install to your laptop and bare metal server packages for using remote desktop with KVM: -``` -sudo apt install virt-manager qemu-system -``` -2.5) Check that you can ssh to server with ssh public key as root. For that, create ssh key on your laptop, press enter many times until it's done: -``` -ssh-keygen -``` -2.6) copy laptop .ssh/id_rsa.pub content to server /root/.ssh/authorized_keys . - -2.7) At server disable password login at /etc/ssh/sshd_config , password login enabled false. And `sudo systemctl restart ssh` - -2.8) At your laptop edit .ssh/config , there add your server IP address etc. This server here is named x1. - -``` -Host x1 - Hostname 123.123.123.123 - User root - IdentityFile ~/.ssh/id_rsa -``` - -2.9) Check that you can ssh from laptop to server as root without prompts. - -2.10) Start virt-manager GUI at your laptop: - -- File / Add connection -- Hypervisor: QEMU/KVM -- [X] Connect to remote host via SSH -- Username: root -- Machine name: x1 -- Connect automatically: [X] -- Click [Connect] - -2.11) AT SERVER: Create harddrive image: `qemu-img create -f qcow2 web.qcow2 700G` - -2.12) Download newest Kubuntu desktop iso with wget. - -2.13) Install kubuntu with full disk encryption. Modify amount of RAM (here 32 GB), file locations etc. Do not select to allocate encrypted disk image immediately, let image size grow. - -2.14) Create growing disk with max size: -``` -qemu-img create -f qcow2 web.qcow2 700G -``` -2.15) Start install from .iso image. Here RAM -r 32 GB, name web, change disk and iso locations below, vcpu 20 (check your server with nproc, should be less that all): -``` -sudo virt-install -r 32000 -n web --os-type=linux --os-variant=ubuntu16.04 \ ---disk /data/VMs/web.qcow2,device=disk,format=qcow2 \ --c /data/VMs/iso/kubuntu-22.10-desktop-amd64.iso \ ---vcpus=20 --vnc --noautoconsole -``` -It will appear to your laptop virt-manager GUI. - -If you have shutdown KVM VM, you can start it from virt-manager, or this way without .iso image: -``` -sudo virt-install -r 32000 -n web --boot hd --video=vga --os-type=linux --os-variant=ubuntu16.04 \ ---disk /data/VMs/web.qcow2,device=disk,format=qcow2 \ ---vcpus=20 --vnc --noautoconsole -``` - -3) Use Parallel Snap installs https://snapcraft.io/docs/parallel-installs - -For example: -``` -sudo snap set system experimental.parallel-instances=true -``` - -4) With newest WeKan Candidate like https://github.com/wekan/wekan-snap/wiki/CentOS8 . Note: Each user has different wekan port and mongodb port. -``` -sudo snap install wekan --channel=latest/candidate -sudo snap install wekan wekan_customer1 --channel=latest/candidate -sudo snap disable wekan -sudo snap set wekan_customer1 caddy-enabled='false' -``` -Check that each WeKan uses candidate: -``` -sudo snap list -``` -If not, change to candidate: -``` -sudo snap refresh wekan_customer1 --channel=latest/candidate -``` -If it complains about old database version (was at stable), stop it, move old files somewhere safe, and start again. -WARNING: this deletes -``` -sudo su -mkdir old_customer1_common -snap stop wekan_customer1 -mv /var/snap/wekan_customer1/common/* old_customer1_common/ -snap start wekan_customer1 -``` - -5) Add some settings, for example Google login and [AWS SES email sending](https://github.com/wekan/wekan/wiki/Troubleshooting-Mail#example-aws-ses): - -For each customer, node and mongodb needs to be in different ports, for example: -``` -sudo snap set wekan_customer1 port='5001' -sudo snap set wekan_customer1 mongodb-port='25001' -sudo snap set wekan_customer2 port='5002' -sudo snap set wekan_customer2 mongodb-port='25002' -``` -For customer1: -``` -sudo snap set wekan_customer1 port='5001' -sudo snap set wekan_customer1 mongodb-port='25001' -sudo snap set wekan_customer1 root-url='https://wekan.customer1.com' -sudo snap set wekan_customer1 mail-url='smtp://username:password@email-smtp.eu-west-1.amazonaws.com:587?tls={ciphers:"SSLv3"}&secureConnection=false' -sudo snap set wekan_customer1 mail-from='Wekan Customer1 Support ' -sudo snap set wekan_customer1 oauth2-auth-endpoint='https://accounts.google.com/o/oauth2/v2/auth' -sudo snap set wekan_customer1 oauth2-client-id='YOUR-GOOGLE-LOGIN-CLIENT_ID.apps.googleusercontent.com' -sudo snap set wekan_customer1 oauth2-secret='YOUR-GOOGLE-LOGIN-SECRET' -sudo snap set wekan_customer1 oauth2-email-map='email' -sudo snap set wekan_customer1 oauth2-enabled='true' -sudo snap set wekan_customer1 oauth2-fullname-map='name' -sudo snap set wekan_customer1 oauth2-id-map='sub' -sudo snap set wekan_customer1 oauth2-request-permissions='openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email' -sudo snap set wekan_customer1 oauth2-token-endpoint='https://oauth2.googleapis.com/token' -sudo snap set wekan_customer1 oauth2-userinfo-endpoint='https://openidconnect.googleapis.com/v1/userinfo' -sudo snap set wekan_customer1 oauth2-username-map='nickname' -``` -You can check with [nosqlbooster](https://github.com/wekan/wekan/wiki/Backup#using-nosqlbooster-closed-source-mongodb-gui-with-wekan-snap-to-edit-mongodb-database) that each database has correct data. - -When restoring data, stop that wekan, and restore to that port, when you have subdirectory dump: -``` -sudo snap stop wekan_customer2.wekan -mongorestore --drop --port 25002 -sudo snap start wekan_customer2.wekan -``` -If there is errors, try again without restoring indexes: -``` -mongorestore --drop --noIndexRestore --port 25002 -``` -To empty database, use [mongodb shell](https://www.mongodb.com/try/download/shell): -``` -mongosh --port 25002 -show dbs -use wekan -db.dropDatabase() -``` -To see is settings written correctly, use: -``` -sudo snap get wekan_customer1 -sudo snap get wekan_customer2 -``` -And that at `Caddyfile` each subdomain is proxied to correct port like 3001 etc. - -And that if there is snap called wekan, it's not in use: -``` -sudo snap disable wekan -``` -or has different port: -``` -sudo snap get wekan -sudo snap set wekan port='6001' -sudo snap set wekan mongodb-port='28001' -``` - -6) Example backup script, that backups MongoDB databases. Although, maybe files directories needed to be added too. - -Note: Here customer1 likes to get backup copy of backups, so this copies customer1 backup to separate directory that is synced only to that customer with Syncthing. Via email was asked customer syncthing ID, and added sync. - -Set it as executeable: -``` -chmod +x backup.sh -``` -To run it: -``` -sudo su -cd backup -./backup.sh -``` - -Here is backup.sh, using [mongodb tools](https://www.mongodb.com/try/download/database-tools) for mongodump/mongorestore etc: -``` -#!/bin/bash - -# Backup all MongoDB databases from different ports. -# Note: You may need to check also is there files directory, -# and also backup that, like /var/snap/wekan/common/files etc - -function backup { - cd /home/wekan/backup - # >> /home/wekan/backup/backup-log.txt - mkdir -p /home/wekan/backup/new/$1 - cd /home/wekan/backup/new/$1 - mongodump --port $2 - sudo snap get wekan_$1 > snap-settings.txt - cd .. - 7z a $(date -u +$1-wekan-backup-%Y-%m-%d_%H.%M_UTC.7z) $1 - mkdir /home/wekan/$3 - chown wekan:wekan *.7z - mv *.7z /home/wekan/$3/ - rm -rf $1 - cd /home/wekan/backup -} - -function backupchat { - cd /home/wekan/backup >> /home/wekan/backup/backup-log.txt - mkdir -p /home/wekan/backup/new/$1 >> /home/wekan/backup/backup-log.txt - cd /home/wekan/backup/new/$1 >> /home/wekan/backup/backup-log.txt - mongodump >> /home/wekan/backup/backup-log.txt - cd .. - 7z a $(date -u +$1-backup-%Y-%m-%d_%H.%M_UTC.7z) $1 - mkdir /home/wekan/$3 - chown wekan:wekan *.7z - mv *.7z /home/wekan/$3/ - rm -rf $1 - cd /home/wekan/backup -} - -# Syntax: -# backup customername port backupdir - -function websync { - # Backup WeKan Kanban Snaps to different Syncthing sync directories - backup "customer1" "25001" "backup-wekan-customer1" - backup "customer1" "25001" "websync" - backup "customer2" "25002" "websync" - backup "customer3" "25003" "websync" - backup "customer4" "25004" "websync" - backup "customer5" "25005" "websync" - # Backup RocketChat Snap - backupchat "chat" "27027" "websync" - cd ~/websync - ## backup the backup scripts - # 7z a $(date -u +wekan-backup-scripts-%Y-%m-%d_%H.%M_UTC.7z) ~/backup -} - -(websync) >> /home/wekan/backup/backup-log.txt 2>&1 -``` - -7. At bare metal server is installed [Caddy2](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config). - -Each customer has set in their nameserver to WeKan hosting server IP address: -``` -A 123.123.123.123 -``` -After that, when ping wekan.company1.com shows 123.123.123.123 correctly, it's possible to get -automatic Let's Encrypt SSL/TLS cert with Caddy2. - -At encrypted KVM VM type `ip address`, it shows what is KVM VM internal IP address. - -Caddy2 proxies with Let's Encrypt TLS HTTPS to encrypted VM HTTP IP address and port where WeKan (Node.js) is running. - - -/etc/caddy/Caddyfile . Examples when in /etc/caddy directory as root: `caddy start`, `caddy stop`, `caddy validate`, `caddy --help` -``` -(redirect) { - @http { - protocol http - } - redir @http https://{host}{uri} -} - -kanban.customer1.com { - tls { - alpn http/1.1 - } - - reverse_proxy 192.168.123.23:5001 -} - -kanban.customer2.com { - tls { - alpn http/1.1 - } - - reverse_proxy 192.168.123.23:5002 -} -``` -Other non-kanban examples: -``` -# Static website that uses free CloudFlare TLS certificates -company.com { - tls { - load /data/websites/certificates/company - alpn http/1.1 - } - root * /data/websites/company.com - file_server -} - -# RocketChat -chat.company.com { - tls { - alpn http/1.1 - } - - reverse_proxy 192.168.123.23:3000 -} - -# Browseable files listing static website -files.company.com { - tls { - alpn http/1.1 - } - root * /data/websites/files.company.com - file_server browse -} -``` - -*** - -# OLD WAY: Many Snaps on LXC - -## Fix: System does not fully support snapd - -To server and LXC/LXD containers, install these packages: - -``` -sudo apt install libsquashfuse0 squashfuse fuse -``` - -Source: https://forum.snapcraft.io/t/system-does-not-fully-support-snapd/14767/11 - -## LXD init CIDR - -IPv4 CIDR: 10.1.1.1/24 - -``` -sudo apt install snapd - -sudo reboot - -sudo snap install lxd - -lxd init - -Would you like to use LXD clustering? (yes/no) [default=no]: -Do you want to configure a new storage pool? (yes/no) [default=yes]: -Name of the new storage pool [default=default]: -Name of the storage backend to use (dir, lvm, btrfs, ceph) [default=btrfs]: dir -Would you like to connect to a MAAS server? (yes/no) [default=no]: -Would you like to create a new local network bridge? (yes/no) [default=yes]: -What should the new bridge be called? [default=lxdbr0]: -What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 10.1.1.1/24 -Would you like LXD to NAT IPv4 traffic on your bridge? [default=yes]: -What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: -Would you like the LXD server to be available over the network? (yes/no) [default=no]: -Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: -Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: -``` -> The value you have specified is the “network address”, i.e “.0” is the network address of the subnet “10.1.1.0/24”. Instead you need to specify an IP in that network, such as “.1”, e.g. “10.1.1.1/24” - -https://discuss.linuxcontainers.org/t/failed-lxd-init-what-is-cidr/7181/2 - -## 1) Main Snap on bare metal - -[Install Wekan Snap](Install) to newest Ubuntu bare metal server. Snaps have automatic updates. - -For example: -``` -sudo apt-get install snapd -reboot -sudo snap install wekan -``` -For Let's Encrypt SSL, like this to `/var/snap/wekan/common/Caddyfile`. We will be proxying to inside LXD container: -``` -boards.example.com { - tls { - alpn http/1.1 - } - - proxy / 10.10.10.231:3001 { - websocket - transparent - } -} -``` -For [CloudFlare SSL](https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config), like this to `/var/snap/wekan/common/Caddyfile`: -``` -http://boards.example.com https://boards.example.com { - tls { - load /var/snap/wekan/common/certificates - alpn http/1.1 - } - - proxy / 10.10.10.231:3001 { - websocket - transparent - } -} -``` -## 2) New LXC container -So when I start new lxc container: -``` -lxc launch images:ubuntu/20.04 lxccontainername -``` -## 3) Snapd and Wekan -Then I go inside container and install snapd: -``` -lxc exec lxccontainername -- /bin/bash -apt -y install snapd -reboot -lxc exec lxccontainername -- /bin/bash -snap install wekan -snap set wekan root-url='https://boards.example.com' -sudo snap set wekan port='3001' -sudo snap set wekan mail-from='Wekan Team Boards ' -sudo snap set wekan mail-url='smtps://username:password@email-smtp.eu-west-1.amazonaws.com:587' -ip address -exit -``` -That `ip address` command does show current IP address of container, that you can then add to bare metal `/var/snap/wekan/common/Caddyfile`. - -You can also add more lxc containers to different subdomains and proxy to them in main Caddyfile. - -## 4) Some LXC commands - -### New Ubuntu container -``` -lxc launch images:ubuntu/20.04 lxccontainername -``` -### Inside LXC container -``` -lxc exec lxccontainername -- /bin/bash -``` -### Running command in LXC -``` -lxc exec lxccontainername -- apt install p7zip-full -``` -### Limit RAM available to LXC -``` -lxc config set lxccontainername limits.memory 4GB -``` -### New Debian container -``` -lxc launch images:debian/buster mydebiancontainername -``` -### New CentOS 7 container -``` -lxc launch images:centos/7/amd64 centos -``` -### List containers -``` -lxc list -cns -``` -Result: -``` -+---------------+---------+ -| NAME | STATE | -+---------------+---------+ -| mycontainer | RUNNING | -+---------------+---------+ -``` -### Stop and delete container -``` -lxc stop mycontainer -lxc delete mycontainer -``` diff --git a/docs/Platforms/FOSS/Snap/Old-Making-releases.md b/docs/Platforms/FOSS/Snap/Old-Making-releases.md deleted file mode 100644 index cad76fc8a..000000000 --- a/docs/Platforms/FOSS/Snap/Old-Making-releases.md +++ /dev/null @@ -1,78 +0,0 @@ -# Older way to make releases, does not work. - -*** - - -## Triggering git import process manually - -[Info source](https://github.com/wekan/wekan-snap/issues/2#issuecomment-311324364) - -To make build quicker, it's possible to trigger git import process manually in launchpad, so you don't need to wait for next sync. - -https://code.launchpad.net/~wekan-team/wekan/+git/wekan - - - -## Launchpad project - -[Info source](https://github.com/wekan/wekan-snap/pull/3#issuecomment-310764751) - -kubiko created launchpad wekan project and wekan team where xet7 is admin in and contributor. xet7 can feel free to add other people on the list. - -Wekan project has wekan-snap repo mirrored from github one: - -https://code.launchpad.net/~wekan-team/wekan/+git/wekan-snap - -Sync happens every ~5 hours - -There is snap package enabled for this repo which has automatic build upon change in repo enabled, you can see there also build queue: - -https://code.launchpad.net/~wekan-team/+snap/wekan-devel - -It has also auto push to store enabled, so once built snap is uploaded to candidate channel. - -Once you snap is uploaded you should see it here: - -https://dashboard.snapcraft.io/dev/snaps/7867 - -kubiko got email from launchpad account and added xet7 as collaborator list, so xet7 can control promotion to stable channel once candidate version is tested. There xet7 can see there some other interesting stats about snap adoption. - -For the future once xet7 makes change in wekan-snap build and upload should happen automatically, no need for additional interaction. - -Next thing for kubiko would be to move people from wekan-ondra to wekan, not quite sure how to announce this though….. From stats kubiko did see there are ~320 downloads/installs of version 0.23. - -kubiko also created pull request to wekan repo, which enabled continuous integration from master, typically this would be pushing builds to edge channel, from where xet7 can do testing, or more adventures users can use edge channel to track Wekan master branch…. - -## Snapcraft build support from source - -[Info source](https://github.com/wekan/wekan/pull/1091) - -Adding snapcraft build support. This can be used together with launchpad build system for continuous integration. - -Intention is to push snaps build from devel branch to edge channel, which can be installed by calling: - -``` -$ snap install -edge wekan -``` - -device will keep automatically updating to revisions as they are released to edge channel - -@xet7 Snap build job is now created, you can see it here: - -https://code.launchpad.net/~wekan-team/+snap/wekan-devel - -It's building from devel branch, fee free to change that if you prefer it to build from different branch. -Same as for release apply here, auto builds on change, only resulting snap is pushed to edge channel instead. -Also check please version name if you want it to be something different than: - -``` -0.26-SNAPSHOT -``` - -## Old links, not in use - -( Old trigger git import https://code.launchpad.net/~wekan-team/wekan/+git/wekan-snap ) - -( Old build queue, not in use: https://code.launchpad.net/~wekan-team/+snap/wekan-release ) - -( Old build queue, not in use: https://code.launchpad.net/~ondrak/+snap/wekan-devel ) \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/OpenSuse.md b/docs/Platforms/FOSS/Snap/OpenSuse.md deleted file mode 100644 index bf00d730f..000000000 --- a/docs/Platforms/FOSS/Snap/OpenSuse.md +++ /dev/null @@ -1 +0,0 @@ -https://github.com/wekan/wekan/wiki/OpenSuse \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Sharing-MongoDB.md b/docs/Platforms/FOSS/Snap/Sharing-MongoDB.md deleted file mode 100644 index 84efdad1d..000000000 --- a/docs/Platforms/FOSS/Snap/Sharing-MongoDB.md +++ /dev/null @@ -1,14 +0,0 @@ -## Share MongoDB to other snaps - -- connect mongodb-slot with plug from corresponding snap(s) -- configure corresponding service to use mongodb unix socket in shared directory, socket file name is: mongodb-.sock - -## Sharing MongoDB from other snap to wekan -- connect mongodb-plug with slot from snap providing mongodb -- disable mongodb in wekan by calling: - -``` -$ snap set wekan set disable-mongodb='true' -``` - -- set mongodb-bind-unix-socket to point to serving mongodb. Use relative path inside shared directory, e.g run/mongodb-27017.sock diff --git a/docs/Platforms/FOSS/Snap/Snap.md b/docs/Platforms/FOSS/Snap/Snap.md deleted file mode 100644 index 444d5f7c4..000000000 --- a/docs/Platforms/FOSS/Snap/Snap.md +++ /dev/null @@ -1,5 +0,0 @@ -### Snap - -[Install Snap](https://github.com/wekan/wekan-snap/wiki/Install) <=== **EASIEST INSTALL, UPDATES AUTOMATICALLY**. Available for [many Linux 64bit distros](https://snapcraft.io). Has [Caddy automatic SSL integration](https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys). - -[Snap bug reports and feature requests](https://github.com/wekan/wekan-snap/issues) \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Supported-settings-keys.md b/docs/Platforms/FOSS/Snap/Supported-settings-keys.md deleted file mode 100644 index 7f5ddf6ad..000000000 --- a/docs/Platforms/FOSS/Snap/Supported-settings-keys.md +++ /dev/null @@ -1,125 +0,0 @@ -Wekan supports settings key values: - -``` -$ snap set wekan ='' - -``` -## List all possible settings -``` -$ wekan.help | less -``` - -## List your current snap settings -``` -sudo snap get wekan -``` -## LDAP - -- Settings can be seen with command `wekan.help` and [this config file](https://raw.githubusercontent.com/wekan/wekan/master/snap-src/bin/config). -- LDAP repo https://github.com/wekan/wekan-ldap -- Bugs and Feature Requests LDAP repo https://github.com/wekan/wekan-ldap/issues - -Example from setting listed at [this config file](https://raw.githubusercontent.com/wekan/wekan/master/snap-src/bin/config): -``` -sudo snap set wekan ldap-enable='true' - -sudo snap set wekan default-authentication-method='ldap' - -sudo snap set wekan ldap-fullname-field='CN' -``` - -## List of supported keys - -``` -mongodb-bind-unix-socket: mongodb binding unix socket: - Default behaviour will preffer binding over unix socket, to - disable unix socket binding set value to 'nill' string - To bind to instance of mongodb provided through content - interface, set value to relative path to the socket inside - 'shared' directory. - Default value: set to use unix socket binding -mongodb-bind-ip: mongodb binding ip address: eg 127.0.0.1 for localhost - If not defined default unix socket binding is used instead - Default value: '' -mongodb-port: mongodb binding port: eg 27017 when using localhost - Default value: '27019' -mail-url: wekan mail binding - Example: 'smtps://user:pass@mailserver.examples.com:453/' - Default value: 'smtp://user:pass@mailserver.examples.com:25/' -mail-from: wekan's admin mail from name email address - For example: 'Boards Support ' - Default value: 'wekan-admin@example.com' -root-url: wekan's root url, eg http://127.0.0.1, https://example.com, - https://wekan.example.com, http://example.com/wekan - Default value: 'http://127.0.0.1' -port: port wekan is exposed at - Default value: '8080' -disable-mongodb: Disable mongodb service: use only if binding to - database outside of Wekan snap. Valid values: [true,false] - Default value: 'false' -caddy-enabled: Enable caddy service (caddy - Every Site on HTTPS). - see https://caddyserver.com/products/licenses and - https://github.com/wekan/wekan-snap/issues/39 , - use personal non-commercial license or - contact Wekan maintainer x@xet7.org about enabling - commercial license for Caddy. - Set to 'true' to enable caddy. - caddy settings are handled through - /var/snap/wekan/common/Caddyfile - Default value: 'false' -caddy-bind-port: Port on which caddy will expect proxy, same value - will be also set in Caddyfile - Default value: '3001' -with-api: To enable the API of wekan. If API is disabled, - exporting board to JSON does not work. - Default value: 'true' -cors: Set Access-Control-Allow-Origin header. Example: - snap set wekan cors='*' - Default value, disabled: '' -browser-policy-enabled: Enable browser policy and allow one - trusted URL that can have iframe that has - Wekan embedded inside. - Setting this to false is not recommended, - it also disables all other browser policy protections - and allows all iframing etc. See wekan/server/policy.js - Default value: 'true' -trusted-url: When browser policy is enabled, HTML code at this URL - can have iframe that embeds Wekan inside. - Example: trusted-url='https://example.com' - Default value: '' -webhooks-attributes: What to send to Outgoing Webhook, or leave out. - Example, that includes all that are default: - cardId,listId,oldListId,boardId,comment,user,card,commentId . - To enable the Webhooks Attributes of Wekan: - snap set wekan webhooks-attributes=cardId,listId,oldListId,boardId,comment,user,card,commentId - Disable the Webhooks Attributest of Wekan to send all default ones: - snap set wekan webhooks-attributes='' -``` -## Rocket.Chat providing OAuth2 login to Wekan - -Also, if you have Rocket.Chat using LDAP/SAML/Google/etc for logging into Rocket.Chat, then same users can login to Wekan when Rocket.Chat is providing OAuth2 login to Wekan. - -[OAuth2 Login Docs](https://github.com/wekan/wekan/wiki/OAuth2) - -## [Matomo web analytics](https://matomo.org) integration -Example: -``` -sudo snap set wekan matomo-address='https://matomo.example.com/' -sudo snap set wekan matomo-site-id='25' -sudo snap set wekan matomo-with-username='true' -sudo snap set wekan matomo-do-not-track='false' -``` -Matomo settings keys: -``` -matomo-address: The address of the server where matomo is hosted - No value set, using default value: '' -matomo-site-id: The value of the site ID given in matomo server for wekan - No value set, using default value: '' -matomo-do-not-track: The option do not track which enables users to not be tracked by matomo - Current value set to: 'true', (default value: 'true') -matomo-with-username: The option that allows matomo to retrieve the username - Current value set to: 'false', (default value: 'false') -``` - - -**When settings are changed, wekan/mongo/caddy services are automatically restarted for changes to take effect.** diff --git a/docs/Platforms/FOSS/Snap/Testing-new-WeKan-Snap-versions.md b/docs/Platforms/FOSS/Snap/Testing-new-WeKan-Snap-versions.md deleted file mode 100644 index 1568eae39..000000000 --- a/docs/Platforms/FOSS/Snap/Testing-new-WeKan-Snap-versions.md +++ /dev/null @@ -1,81 +0,0 @@ -Please: -- Test does WeKan on some non-stable channel work, [add a new issue](https://github.com/wekan/wekan-snap/issues) about can it be added to stable channel. -- Check [is there PR about fixing some bug already](https://github.com/wekan/wekan/pulls) -- Please report bugs [by adding a new issue](https://github.com/wekan/wekan-snap/issues). -- Make backups first, so you are not using your only copy of production data -- Have time to test -- Have enough disk space. For example, some update migration could write all attachments from database to some subdirectory of `/var/snap/wekan/common` or `/var/snap/wekan-gantt-gpl/common`. -- You can try bleeding edge versions of Wekan Snap, that contains cool new features, and could be broken in many ways. -- Sometimes Snap builds fail, so then there is no package file to upload to Snap store at all, only successfully built are visible at Snap store. Successfully built does not mean that every feature works. - -[Changing between WeKan and WeKan Gantt GPL](https://github.com/wekan/wekan/issues/2870#issuecomment-721364824) - -## 1) Stop WeKan - -``` -sudo snap stop wekan -``` -or -``` -sudo snap stop wekan-gantt-gpl -``` - -## 2) Create Backup - -2.1 Backup settings: - -``` -sudo snap get wekan > snap-settings.txt -``` -or -``` -sudo snap get wekan-gantt-gpl > snap-settings.txt -``` - -2.2 https://github.com/wekan/wekan/wiki/Backup - -2.3 Copy files to safe place from /var/snap/wekan/common or /var/snap/wekan-gantt-gpl/common . There could be some board attachments etc. - -## 3) Check what is available at various channels - -https://snapcraft.io/wekan - -https://snapcraft.io/wekan-gantt-gpl - -- Stable: Current working version -- Beta: Maybe work, or not -- Edge: Newest that did build, no idea does it work or not - -This is how you can try snap beta channel: -``` -sudo snap refresh wekan --beta --amend -``` -This is how to change back to snap stable channel, that most Wekan users have installed: -``` -sudo snap refresh wekan --stable --amend -``` -Wekan stable versions are numbered v1.x - -## 4) Update all Snaps to newest on that channel - -[Check you don't have Snap updates disabled](Automatic-update-schedule#if-required-you-can-disable-all-snap-updates) - -``` -sudo snap refresh - -``` - -## 5) Start WeKan - -``` -sudo snap stop wekan -``` -or -``` -sudo snap stop wekan-gantt-gpl -``` - -## Other docs - -* [Adding Snap settings to code](https://github.com/wekan/wekan/wiki/Adding-new-Snap-settings-to-code) -* [Wekan Developer Docs](https://github.com/wekan/wekan/wiki/Developer-Documentation) diff --git a/docs/Platforms/FOSS/Snap/Troubleshooting.md b/docs/Platforms/FOSS/Snap/Troubleshooting.md deleted file mode 100644 index 49e00f605..000000000 --- a/docs/Platforms/FOSS/Snap/Troubleshooting.md +++ /dev/null @@ -1,65 +0,0 @@ -[Info source](https://github.com/wekan/wekan-snap/issues/4#issuecomment-311355296) - -1) All you need to do is - -``` -$ snap install wekan -``` - -2) Enable/disable is not needed, it is there for cases when for example you want to stop wekan, but do not want to uninstall it (uninstall will delete also all user data) - -3) Wekan is service, so apart of help, it does not have any "user executables" - -4) You can check status of wekan with: - -``` -$ sudo systemctl status snap.wekan.* -``` - -there should be two services, mongodb and wekan running, of either of them is showing error, that would be place to look first. To get detailed look, use - -``` -$ sudo journalctl -u snap.wekan.* -``` - -or detailed look of one of services: - -``` -$ sudo journalctl -u snap.wekan.wekan.service -``` - -or - -``` -$ snap.wekan.mongodb.service -``` - -5) Content interface for mongodb (wekan:mongodb-slot, wekan:mongodb-plug) is there only for more complex cases where for reason you want to: - -a) share wekan's mongodb instance with other services, use wekan:mongodb-slot - -b) you want to use mongodb instance from some other service, use wekan:mongodb-plug -so connecting wekan:mongodb-plug to wekan:mongodb-slot really makes no sense :) - -As @xet7 suggested, first thing to make sure is that update your machine, so you are running up to date snapd. You can check your version with - -``` -$ snap version -``` - -Currently we are on 2.26 - -Otherwise shared folders are created under: - -``` -/var/snap/wekan/current where writable data lives -``` - -Databases and other settings live under: - -``` -/var/snap/wekan/common/ -/snap/wekan/current is read only mount of squashfs wekan's image. -``` - -[Troubleshooting Email](https://github.com/wekan/wekan/wiki/Troubleshooting-Mail) \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Uninstall.md b/docs/Platforms/FOSS/Snap/Uninstall.md deleted file mode 100644 index 3e60729ae..000000000 --- a/docs/Platforms/FOSS/Snap/Uninstall.md +++ /dev/null @@ -1,54 +0,0 @@ -List what snaps you have installed. Core is part of snap itself. -``` -sudo snap list -``` -List what snap services are running: -``` -sudo snap services -``` -Uninstall Wekan snap and delete all Wekan data. If you have other snaps installed, you can remove them too. Don't remove core, it's part of snap itself. -``` -sudo snap stop wekan - -sudo snap disable wekan - -sudo snap remove wekan -``` -OPTIONAL ALTERNATIVE WAY, NOT REQUIRED: Disable some services of wekan using systemd: -``` -sudo systemctl stop snap.wekan.wekan - -sudo systemctl stop snap.wekan.mongodb - -sudo systemctl stop snap.wekan.caddy - -sudo systemctl disable snap.wekan.wekan - -sudo systemctl disable snap.wekan.mongodb - -sudo systemctl disable snap.wekan.caddy -``` -Uninstall snap at CentOS: -``` -sudo systemctl disable --now snapd.socket - -sudo yum copr disable ngompa/snapcore-el7 - -sudo yum remove yum-plugin-copr snapd -``` -Uninstall snap at Debian/Ubuntu/Mint: -``` -sudo systemctl stop snapd - -sudo systemctl disable snapd - -sudo apt --purge remove snapd -``` -Uninstall snap at [Ubuntu 14.04](https://github.com/wekan/wekan-snap/issues/34#issuecomment-378295168): -``` -sudo service snapd stop - -sudo update-rc.d -f snapd remove - -sudo apt-get --purge remove snapd -``` \ No newline at end of file diff --git a/docs/Platforms/FOSS/Snap/Update-all-snap-packages.md b/docs/Platforms/FOSS/Snap/Update-all-snap-packages.md deleted file mode 100644 index 1959d4d46..000000000 --- a/docs/Platforms/FOSS/Snap/Update-all-snap-packages.md +++ /dev/null @@ -1,5 +0,0 @@ -Update all snap packages, like Wekan and others, with commmand: - -``` -sudo snap refresh -``` \ No newline at end of file diff --git a/docs/Platforms/FOSS/Source/Install-and-Update.md b/docs/Platforms/FOSS/Source/Install-and-Update.md deleted file mode 100644 index 1725430c3..000000000 --- a/docs/Platforms/FOSS/Source/Install-and-Update.md +++ /dev/null @@ -1 +0,0 @@ -Moved to [Platforms](Platforms) \ No newline at end of file diff --git a/docs/Platforms/FOSS/Source/Install-from-source-without-root.md b/docs/Platforms/FOSS/Source/Install-from-source-without-root.md deleted file mode 100644 index 5ae3a2b13..000000000 --- a/docs/Platforms/FOSS/Source/Install-from-source-without-root.md +++ /dev/null @@ -1,23 +0,0 @@ -# Quick install for development / debugging - -* Install [nvm](https://github.com/creationix/nvm) -* `source NVMPATH/nvm.sh` for example `source ~/.nvm/nvm.sh` -* `nvm install v8.16.0` -* `nvm use v8.16.0` -* `nvm install-latest-npm` -* `cd ~` -* Clone repo to home: `git clone https://github.com/wekan/wekan.git` -* Install meteor (you can skip sudo by entering invalid password): `curl https://install.meteor.com/ | sh` -* `cd wekan/` -* `~/.meteor/meteor npm install --save babel-runtime xss meteor-node-stubs` -* `~/.meteor/meteor npm install --save bcrypt` -* `~/.meteor/meteor` - -When you get this output, wekan is ready: -``` -=> Started your app. - -=> App running at: http://localhost:3000/ -``` - -Register new user for administrator diff --git a/docs/Platforms/FOSS/Source/Install-source-without-sudo-on-Linux.md b/docs/Platforms/FOSS/Source/Install-source-without-sudo-on-Linux.md deleted file mode 100644 index a846253d2..000000000 --- a/docs/Platforms/FOSS/Source/Install-source-without-sudo-on-Linux.md +++ /dev/null @@ -1,57 +0,0 @@ -In-progress script for installing npm modules locally. Not tested. - -Anyone: If you get this working, edit this wiki and add remaining to be installed locally. - -## TODO -- Add MongoDB running locally like at wiki page [Install from source](Install-and-Update#install-mongodb-1) -- Add node.js, npm etc installed locally -- Update [wekan-autoinstall](https://github.com/wekan/wekan-autoinstall), please send pull requests -- Update [Install from source](Install-and-Update#install-mongodb-1) so then this temporary page can possibly be removed later - -## Related info -- Node.js and npm version downloaded at [Dockerfile](https://github.com/wekan/wekan/blob/main/Dockerfile) -- https://gist.github.com/isaacs/579814 -- http://linuxbrew.sh - -## Only this run with sudo -``` -sudo apt-get install build-essential c++ capnproto nodejs nodejs-legacy npm git curl -``` - -## Install npm modules etc locally -``` -# Local node module install from here: -# https://docs.npmjs.com/getting-started/fixing-npm-permissions - -# If NPM global package directory does not exists -if [ ! -d "~/.npm-global" ]; then - # Create it - mkdir ~/.npm-global -fi - -# If .npm-global/bin is in the path -if grep -Fxq "export PATH=~/.npm-global/bin:$PATH" ~/.bashrc -then - # Continue -else - # Add it to path - echo "export PATH=~/.npm-global/bin:$PATH" >> ~/.bashrc - # Add it to current path in RAM - export PATH=~/.npm-global/bin:$PATH -fi - -``` - -## Install packages globally to local ~/.npm-global directory - -``` -npm -g install n -npm -g install npm@4.6.1 -npm -g install node-gyp -npm -g install node-pre-gyp -npm -g install fibers@1.0.15 -``` - -## Install meteor - -Continue at [Install from source](Install-and-Update#install-manually-from-source) diff --git a/docs/Platforms/FOSS/Source/Raspberry-Pi.md b/docs/Platforms/FOSS/Source/Raspberry-Pi.md deleted file mode 100644 index 269805d1d..000000000 --- a/docs/Platforms/FOSS/Source/Raspberry-Pi.md +++ /dev/null @@ -1,638 +0,0 @@ -NOTE: If you use MongoDB Snap package below, most likely it works with many distro versions, like newest distros also. But if installing without Snap from https://www.mongodb.com/try/download/community , those packages are not for so many distros and versions. - -This page is NOT only about Raspberry Pi. This page IS about install without container for ANY Linux/BSD/[macOS](Mac)/[Windows](Offline) using CPU of amd64/arm64/s390x/ppc64le. - -WeKan only requires: -- WeKan bundle .zip file of Javascript etc for that CPU. Only difference per CPU is that fibers package is compiled for that CPU. Those .zip files are built this way, for example: - - `git clone https://github.com/wekan/wekan && cd wekan && ./releases/release-wekan.sh WEKAN-VERSION-NUMBER` where version like 5.55 - - releases directory has `rebuild-release.sh` that build amd64 bundle, `release-bundle.sh` that uploads amd64 bundle to arm64/s390x/ppc64le servers, and `maintainer-make-bundle-*.sh` scripts for compiling fibers on those arm64/s390x/ppc64le servers. Note: Only xet7 has ssh private keys to build servers, as maintainer of WeKan. -- Node.js binary, version number is at https://wekan.github.io Download section, like https://nodejs.org/dist/latest-v14.x/ -- MongoDB, version number is at https://wekan.github.io Download section, like 5.x https://www.mongodb.com/try/download/community or Percona MongoDB https://www.percona.com/software/mongodb/feature-comparison Download at https://www.percona.com/downloads/percona-server-mongodb-LATEST/ -- some way to start Wekan, like any of: - - bash script: [start-wekan.sh](https://raw.githubusercontent.com/wekan/wekan/master/start-wekan.sh) - - cmd.exe script: [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/master/start-wekan.bat) - - [systemd service script](#6-running-wekan-as-service) - - init.d script - - any other script, that sets environment variables and in bundle directory does `node main.js` -- most important environment settings are: - - `ROOT_URL=http://192.168.0.200` for WeKan server IP address at local network or `ROOT_URL=https://kanban.example.com` if [Caddy](Caddy-Webserver-Config)/[Nginx](Nginx-Webserver-Config)/[Apache2](Apache) proxies from HTTPS to WeKan http://127.0.0.1:4000 etc, see https://github.com/wekan/wekan/wiki/Settings - - `PORT=80` or `PORT=4000` or some other port where WeKan Nodejs runs. - - `MONGO_URL=mongodb://127.0.0.1:27017/wekan` where MongoDB server is, like localhost port 27017 using database name wekan. (Snap usually has MongoDB port at 27019, if it's not changed for example with `sudo snap set wekan mongodb-port='27020'`) - - `WRITABLE_PATH=..` - - if using node http at port 80, permission for binding to port 80, like `sudo setcap cap_net_bind_service=+ep /usr/local/bin/node`. See https://github.com/wekan/wekan/issues/4735#issuecomment-1295079327 - - Optional other settings are at [start-wekan.sh](https://raw.githubusercontent.com/wekan/wekan/master/start-wekan.sh) (and at https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys#list-of-supported-keys but Snap settings have lowercase minus like `root-url`, where `.sh` scripts and services have uppercase underline like `ROOT_URL`) -- https://github.com/wekan/wekan/wiki/Adding-users and https://github.com/wekan/wekan/wiki/Troubleshooting-Mail -- Optional autoupgrade script https://github.com/wekan/wekan-bash-install-autoupgrade - -## Bundle files - -Windows and Linux versions at: -- https://github.com/wekan/wekan/releases - -and also: -- Linux amd64 https://releases.wekan.team filename wekan-VERSION-amd64.zip -- Linux arm64 https://releases.wekan.team/raspi3/ -- Linux [s390x](s390x) https://releases.wekan.team/s390x/ - -## Related wiki pages - -- https://github.com/wekan/wekan/wiki/ppc -- https://github.com/wekan/wekan/wiki/s390x - -## Installing Node.js - -Download from https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4 - -## Installing MongoDB Snap for amd64/arm64/ppc64el/s390x - -NOTE: If you use this MongoDB Snap package, most likely it works with many distro versions, like newest distros also. But if installing without Snap from https://www.mongodb.com/try/download/community , those packages are not for so many distros and versions. - -This Snap package https://snapcraft.io/juju-db , created by Canonical, has MongoDB for various CPU architectures . It is internal package for Canonical's Juju service https://jaas.ai . Snap repo at https://github.com/juju/juju-db-snap and copy at https://github.com/wekan/mongodb-snap - -Install Snap for your distro https://snapcraft.io/docs/installing-snapd - -Note: Below `sudo dnf install nano` at CentOS/RHEL/Fedora is like `sudo apt install nano` on Debian/Ubuntu - -``` -ssh yourserver - -sudo dnf install nano - -sudo reboot - -sudo snap install juju-db - -sudo snap refresh juju-db --channel=5.3/stable - -sudo snap enable juju-db - -sudo snap start juju-db - -nano .bashrc -``` -There add path to commands mongo, mongodump, mongorestore etc, depending on your CPU architecture, -check filenames of directories etc at /snap/juju-db, like this: - -For amd64: -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/juju-db/135/usr/lib/x86_64-linux-gnu -export PATH="$PATH:/snap/juju-db/135/bin" -``` -For arm64: -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/juju-db/137/usr/lib/aarch64-linux-gnu -export PATH="$PATH:/snap/juju-db/137/bin" -``` -For ppc64el: -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/juju-db/138/usr/lib/powerpc64le-linux-gnu -export PATH="$PATH:/snap/juju-db/138/bin" -``` -For s390x: -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/juju-db/139/usr/lib/s390x-linux-gnu -export PATH="$PATH:/snap/juju-db/139/bin" -``` -Save and exit: Ctrl-o Enter Ctrl-x - -Exit ssh, and ssh to server again, -``` -exit - -ssh yourserver -``` -Or alternatively just read new paths to mongo etc commands: -``` -source .bashrc -``` - -Now MongoDB is at localhost port 27017. You connect to CLI with command: -``` -mongo -``` - -## About Raspberry Pi - -[Blogpost](https://blog.wekan.team/2019/06/wekan-on-raspi3-and-arm64-server-now-works-and-whats-next-with-cncf/index.html) - [Blogpost repost at dev.to](https://dev.to/xet7/wekan-on-raspi3-and-arm64-server-now-works-and-what-s-next-with-cncf-pbk) - [Thanks at CNCF original issue](https://github.com/cncf/cluster/issues/45#issuecomment-507036930) - [Twitter tweet](https://twitter.com/WekanApp/status/1145168007901134848) - [HN](https://news.ycombinator.com/item?id=20318237) - -## Please store MongoDB database etc Wekan files to external SSD hardrive (or HDD) - -It's very easy to corrupt microSD card with a lot of writes. Please make [at least daily backups](Backup). - -## Install Wekan to RasPi3, RasPi4 or any arm64 server - -Look at webbrowser files at https://releases.wekan.team/raspi3/ - -Download and open README.md, there could be text similar to this: -``` -README -Currently uses Node v12.17.0 and MongoDB v3.x or v4.x -Built on arm64 server. -Should work on RasPi3 and RasPi4 on Ubuntu 20.04 64bit arm64 or Raspberry Pi OS 64bit. -Install info here: -https://github.com/wekan/wekan/wiki/Raspberry-Pi -``` -You should always check what distro, node etc version it has, before downloading and installing. - -## Raspberry Pi OS arm64 with MongoDB 4.2.x - -- At [RasPi4 8GB RAM announcement](https://www.raspberrypi.org/blog/8gb-raspberry-pi-4-on-sale-now-at-75/) xet7 found [Raspberry Pi OS 64bit image](https://downloads.raspberrypi.org/raspios_arm64/images/) for RasPi3 and RasPi4.. xet7 did not notice any problems yet with Raspberry Pi OS arm64. [Info why it's not called Raspbian arm64](https://www.tomshardware.com/news/raspberry-pi-os-no-longer-raspbian). -- There is [MongoDB Server Community Edition webpage](https://www.mongodb.com/download-center/community) that has Ubuntu 18.04 Linux arm64 server .deb package of MongoDB 4.2.x that works with Raspberry OS 64bit. -- You see what is newest Node.js 12.x version from [Nodejs.org](https://nodejs.org/en/). - -## Ubuntu 20.04 - -- [Ubuntu 20.04 Server arm64](http://cdimage.ubuntu.com/ubuntu/releases/20.04/release/) for RasPi3 and RasPi4 -- Try [MongoDB Server Community Edition webpage](https://www.mongodb.com/download-center/community) that has Ubuntu 18.04 Linux arm64 server .deb package of MongoDB 4.2.x, or MongoDB 3.6.x from repos -- Newest Wekan with newest Meteor - -If you have RasPi3, 1 GB RAM can only run Wekan Node.js + MongoDB. There is not enough RAM to run also Ubuntu desktop at the same RasPi. - -If you have RasPi3, you can install textmode webbrowser, and download files with it: -``` -sudo apt-get install elinks -elinks https://releases.wekan.team/raspi3/ -``` - -If you have RasPi4 with 4 GB RAM, you can also install Ubuntu Desktop with: -``` -sudo apt-get install ubuntu-desktop -``` - -Note: Raspbian is not recommended, because it is 32bit and has [32bit MongoDB that has file size limit of 2 GB](https://www.mongodb.com/blog/post/32-bit-limitations), if it grows bigger then it gets corrupted. That's why here is 64bit arm64 version of Ubuntu. - -### 1. Download Ubuntu 19.10 64bit Server for RasPi and write to SD Card - -Download from: https://ubuntu.com/download/raspberry-pi - -Alternatively, if that link does not work, go to https://ubuntu.com, Download, IoT RasPi arm, and there select 64bit Server for your RasPi. - -It seems that [RasPi website](https://www.raspberrypi.org/documentation/installation/installing-images/) recommends [BalenaEtcher GUI](https://www.balena.io/etcher/) for writing image to SD Card. - -For Linux dd users, after unarchiving in file manager, if sd card is /dev/sdb, it's for example: -``` -sudo su -dd if=ubuntu.img of=/dev/sdb conv=sync bs=40M status=progress -sync -exit -``` -And wait for SD card light stop blinking, so it has written everything. - -### 2. Preparing for booting RasPi - -With RasPi, you need: -- Ubuntu SD card inserted to your RasPi. -- Ethernet cable connected to your router/modem/hub, with connection to Internet. -- USB keyboard and mouse connected. -- Monitor connected to HDMI. Or alternatively, look at your router webpage http://192.168.0.1 (or similar) what is your RasPi IP address, and ssh ubuntu@192.168.0.x with password ubuntu. -- Power cable. - -Boot RasPi. - -Username: ubuntu - -Password: ubuntu - -This info is from https://wiki.ubuntu.com/ARM/RaspberryPi - -It will ask you to change your password at first login. - -### 3. Wait for updates to finish - -After login, type: -``` -top -``` -When you see `apt` or `dpkg`, automatic updates are still running. Wait for updates to finish. Then press `q` to quit top. - -### 4. Install remaining updates and reboot -``` -sudo apt-get update -sudo apt-get -y dist-upgrade -sudo reboot -``` -### 5. Login and install Wekan related files - -Look at webbrowser files at https://releases.wekan.team/raspi3/ - -Or install elinks textmode browser and download with it: -``` -sudo apt-get install elinks -elinks https://releases.wekan.team/raspi3 -``` -Download and open README.md, there could be text similar to this: -``` -README -Currently uses Node v12.16.1 and MongoDB v3.x or v4.x -Built on Ubuntu 19.10 arm64 on RasPi4. -Should work on RasPi3 and RasPi4 on Ubuntu 19.10 64bit. -``` -Install these: -``` -sudo apt-get install npm mongodb-server mongodb-clients mongo-tools zip unzip -sudo npm -g install npm -sudo npm -g install n -``` -Then from README.md you downloaded, look at Node version, and install it, for example: -``` -sudo n 12.16.1 -``` -Then look again files: -``` -elinks https://releases.wekan.team/raspi3/ -``` -Download there from files like these: -``` -wget https://releases.wekan.team/raspi3/wekan-3.xx-arm64.zip -``` -Also download newest start-wekan.sh: -``` -wget https://raw.githubusercontent.com/wekan/wekan/master/start-wekan.sh -``` -With elinks, you can use arrow keys to navigate, and enter to download file to current directory. - -Then unzip file: -``` -unzip wekan*.zip -``` - -### 6. Running Wekan as service - -If you would like to run node as non-root user, and still have node at port 80, you could add capability to it, by first looking where node binary is: -``` -which node -``` -And then adding capability to that path of node, for example: -``` -sudo setcap cap_net_bind_service=+ep /usr/local/bin/node -``` -This is modified version from https://www.certdepot.net/rhel7-install-wekan/ - -Edit this new service file: -``` -sudo nano /etc/systemd/system/wekan.service -``` -There add this text: -``` -[Unit] -Description=The Wekan Service -After=syslog.target network.target - -[Service] -EnvironmentFile=/etc/default/wekan -User=ubuntu -Group=ubuntu -WorkingDirectory=/home/ubuntu/bundle -ExecStart=/usr/local/bin/node main.js -Restart=on-failure -SuccessExitStatus=143 - -[Install] -WantedBy=multi-user.target -``` -Look at what is your IP address at eth0, for example 192.168.0.x, with this command, and write it somewhere to your other computer or phone or paper: -``` -ip address -``` -IP address will be added as your ROOT_URL. - -You could also login to your router for example at http://192.168.0.1 to set static IP pointing always to your specific RasPi IP address, so that address would not change. - -Then edit this file: -``` -sudo nano /etc/default/wekan -``` -There add this text: -``` -NODE_ENV=production -WITH_API=true -MONGO_URL=mongodb://127.0.0.1:27017/wekan -ROOT_URL=http://192.168.0.x -PORT=80 -``` -There are [many more other possible settings here that you can optionally add](https://raw.githubusercontent.com/wekan/wekan/master/start-wekan.sh) - -After that start and enable Wekan: -``` -sudo systemctl start wekan -sudo systemctl enable wekan -``` - -Wekan should work at your ROOT_URL in your webbrowser like http://192.168.0.x - - -## 7. Optional: Email - -Note: Configuring email is not required to use Wekan. - -If you really would like to install email sending server, -you could install [postfix](https://github.com/wekan/wekan-bash-install-autoupgrade/blob/master/install.sh#L63-L67), but that would probably make your mail to spam banning lists. You would add to above settings: -``` -MAIL_URL='smtp://127.0.0.1:25/' -MAIL_FROM='Board Support ' -``` -It is much more recommended to use [email sending service like AWS SES or some other service](Troubleshooting-Mail) that can ensure delivering email correctly, for Wekan email notifications etc. - -## 8. Optional: Nginx and Let's Encrypt SSL - -If your router has ports forwarded to your RasPi (in virtual server settings at http://192.168.0.1), then you could also [install nginx and Let's Encrypt SSL](https://github.com/wekan/wekan-bash-install-autoupgrade/blob/master/install.sh) in front of Wekan. - -## 9. Updating Wekan -Stop Wekan and move old stuff away: -``` -sudo systemctl stop wekan -mkdir old -mv wekan*.zip old/ -mv bundle old/ -``` -Download new Wekan version: -``` -elinks https://releases.wekan.team/raspi3/ -``` -There with keyboard arrow keys go move to top of newest `wekan-3.xx-arm64.zip` and press Enter to download. - -Also check README.md about what Node version newest Wekan uses. - -In elinks press `q` to exit elinks - -Unzip and start Wekan: -``` -unzip wekan*.zip -sudo systemctl start wekan -``` -If it works, delete old files: -``` -rm -rf old -``` - - -*** - -# STOP HERE. OLD NOT NEEDED INFO BELOW. - -*** - -### b) Running Wekan with startup script -Look at what is your IP address at eth0, for example 192.168.0.x, with this command, and write it somewhere to your other computer or phone or paper: -``` -ip address -``` -You could also login to your router for example at http://192.168.0.1 to set static IP pointing always to your specific RasPi IP address, so that address would not change. - -Make start-wekan.sh executeable, and edit it: -``` -chmod +x start-wekan.sh -nano start-wekan.sh -``` -There change ROOT_URL like [described here](https://github.com/wekan/wekan/Settings), -for example your RasPi IP address and port, and MongoDB URL: -``` -export ROOT_URL=http://192.168.0.x:2000 -export PORT=2000 -export MONGO_URL='mongodb://127.0.0.1:27017/wekan' -``` -If you would like to run node as non-root user, and still have node at port 80, you could add capability to it, by first looking where node binary is: -``` -which node -``` -And then adding capability to that path of node, for example: -``` -sudo setcap cap_net_bind_service=+ep /usr/local/bin/node -``` -Then change to start-wekan.sh: -``` -export ROOT_URL=http://192.168.0.x -export PORT=80 -export MONGO_URL='mongodb://127.0.0.1:27017/wekan' -``` -Also in start-wekan changing directory like this: -``` -cd bundle -node main.js -``` -You need to check that it changes to correct directory, so that it can start `node main.js` - -And then start Wekan with: -``` -./start-wekan.sh -``` - -*** - - -## Wekan for RasPi3 arm64 and other CPU architectures - -Wekan on RasPi3 - -Newest Wekan: -- Ubuntu 19.10 Server arm64 for RasPi3 and RasPi4 -- MongoDB 3.6.x -- Newest Wekan with newest Meteor - -To test RasPi3, xet7 tested it with all his Wekan boards data: -``` -mongorestore --drop -``` -If there is errors in restoring, try: -``` -mongorestore --drop --noIndexRestore -``` -Wekan on RasPi3 - -When using Firefox on network laptop (Core 2 Duo laptop, 8 GB RAM, SSD harddisk) to browse RasPi Wekan server, small boards load at about 3 seconds at first time. When loading, node CPU usage goes to about 100%. MongoDB CPU usage stays low, sometimes goes to 18%. This is because indexes has been added to Wekan MongoDB database. Loading my biggest Wekan board at first time takes 45 seconds, and next time takes about 2 seconds, because data is at browser cache. When Wekan browser tab is closed, node CPU usage drops 4-23%. There is no errors given by Wekan at RasPi3, RasPi3 arm64 behaves similar to x64 server that has 1 GB RAM. - -Wekan on RasPi3 - -I did also test Wekan arm64 on arm64 bare metal server, same Wekan bundle worked there. - -# Old info below - -.7z size 876 MB, unarchived RasPi3 .img size of 4.5 GB. At first boot disk image expands to full SD card size. - -https://releases.wekan.team/raspi3/wekan-2.94-raspi3-ubuntu18.04server.img.7z - -Or alternatively Wekan Meteor 1.8.1 bundle for arm64: - -https://releases.wekan.team/raspi3/wekan-2.94-arm64-bundle.tar.gz - -### How to use .img - -1) Write image to SD card -``` -sudo apt-get install p7zip-full -7z x wekan-2.94-raspi3-ubuntu18.04server.img.7z -sudo dd if=wekan-2.94-raspi3-ubuntu18.04server.img of=/dev/mmcblk0 conv=sync status=progress bs=100M -``` - -2) Login for Wekan files -- Username wekan -- Password wekan (for Wekan files) - -(Or for ubuntu user: username ubuntu password ubuntuubuntu) - -3) After login as wekan user, check IP address with command: -``` -ip address -``` -4) Change that IP addess to start-wekan.sh: -``` -cd repos -nano start-wekan.sh -``` -There change ROOT_URL to have your IP address. Save and Exit: Ctrl-o Enter Ctrl-x Enter - -5) Restore your Wekan dump subdirectory -``` -mongorestore --drop --noIndexRestore -``` -6) Start Wekan: -``` -./start-wekan.sh -``` -And maybe [run as service](https://www.certdepot.net/rhel7-install-wekan/) - -Or start at boot, by having [at bottom of /etc/rc.local](https://github.com/wekan/wekan/blob/main/releases/virtualbox/etc-rc.local.txt). - -7) On other computer, with webbrowser go to http://192.168.0.12 (or other of your IP address you changed to start-wekan.sh) - -### How to use bundle - -#### a) On any Ubuntu 18.04 arm64 server -``` -wget https://releases.wekan.team/raspi3/wekan-2.94-arm64-bundle.tar.gz -tar -xzf wekan-2.94-arm64-bundle.tar.gz -sudo apt-get install build-essential curl make nodejs npm mongodb-clients mongodb-server -sudo npm -g install npm -sudo npm -g install n -sudo n 8.16.0 -sudo systemctl start mongodb -sudo systemctl enable mongodb -wget https://releases.wekan.team/raspi3/start-wekan.sh -nano start-wekan.sh -``` -There edit [ROOT_URL to have your IP address or domain, and PORT for your localhost port](Settings). - -You can also allow node to run on port 80, when you check where node is: -``` -which node -``` -and then allow it: -``` -sudo setcap cap_net_bind_service=+ep /usr/local/bin/node -``` -[Adding users](Adding-users) - -#### Upgrade bundle - -Stop Wekan. See what is newest bundle version at https://releases.wekan.team . - -Then, for example: -``` -cd ~/repos -rm -rf bundle -wget https://releases.wekan.team/wekan-3.01.zip -unzip wekan-3.01.zip -cd bundle/programs/server -npm install -npm install node-gyp node-pre-gyp fibers (maybe not needed) -cd ../../.. -``` -Then Start Wekan. - -#### b) Other CPU architectures - -Do as above, but then also install node packages for your architecture: -``` -cd bundle/programs/server -npm install -npm install node-gyp node-pre-gyp fibers -cd ../../.. -``` -Then start Wekan -``` -./start-wekan.sh -``` - -#### c) Even more something? - -Well, you could get some other newest Meteor x64 bundle, like RocketChat, and this way make it run on your CPU architecture, that has required Node+NPM+MongoDB. - -### How this was done - -1) Bundle at https://releases.wekan.team/raspi3/ was created this way originally on Xubuntu 19.10 x64. This is because officially Meteor only supports x32 and x64. One workaround would be to [add patch to allow other architecture, like this](https://github.com/wekan/meteor/commit/014fe0469bc75eb0371b90464befebc883a08a26). But better workaround is to just build bundle on x64 and then on other architectures download bundle and reinstall npm packages. -``` -git clone https://github.com/wekan/wekan -cd wekan -git checkout meteor-1.8 -./rebuild-wekan.sh -# 1 and Enter to install deps -./rebuild-wekan.sh -# 2 and Enter to build Wekan -cd .build -``` -Then create tar.gz that included bundle directory, with name wekan-VERSION.tar.gz - -Ready-made bundles of Meteor 1.6 Wekan x64 at https://releases.wekan.team - -Ready-made bundle of Meteor 1.8 Wekan for arm64 at https://releases.wekan.team , works at RasPi3, and any other arm64 server that has Ubuntu 18.04 arm64. - -2) Ubuntu Server for RasPi3 from https://www.raspberrypi.org/downloads/ - -Write to SD card. - -Boot: -- Username ubuntu -- Password ubuntu -- It asks to change password at first boot. - -3) Create new user: -``` -sudo adduser wekan -``` -Add name wekan, password wekan, and then other empty with Enter, and accept with Y. - -4) Add passwordless sudo: -``` -export EDITOR=nano -sudo visudo -``` -There below root add: -``` -wekan ALL=(ALL:ALL) NOPASSWD:ALL -``` -Save and Exit: Ctrl-o Enter Ctrl-x Enter - -5) Logout, and login - -- Username wekan -- Password wekan - -6) Download bundle etc - -See above about downloading bundle, start-wekan.sh, dependencies etc. - -7) Shutdown RasPi3 -``` -sudo shutdown -h now -``` - -8) At computer, insert SD card and unmount partitions: -``` -sudo umount /dev/mmcblk0p1 /dev/mmcblk0p2 -``` -9) Read SD card to image -``` -sudo dd if=/dev/mmcblk0 of=wekan-2.94-raspi3-ubuntu18.04server.img conv=sync status=progress -``` -10) Resize image to smaller from 32 GB to 4.5 GB: - -Resize script is [originally from here](https://evilshit.wordpress.com/2014/02/07/how-to-trim-disk-images-to-partition-size/). -``` -wget https://releases.wekan.team/raspi3/resize.sh -chmod +x resize.sh -sudo ./resize.sh wekan-2.94-raspi3-ubuntu18.04server.img -``` -11) Make .7z archive to pack about 4.5 GB to about 800 MB: -``` -7z a wekan-2.94-raspi3-ubuntu18.04server.img.7z wekan-2.94-raspi3-ubuntu18.04server.img -``` diff --git a/docs/Platforms/FOSS/Source/Source.md b/docs/Platforms/FOSS/Source/Source.md deleted file mode 100644 index de56f887d..000000000 --- a/docs/Platforms/FOSS/Source/Source.md +++ /dev/null @@ -1,112 +0,0 @@ -## Build from source on Mac - -[Build from source on Mac](Mac) - -## Build from source on VirtualBox - -At [Virtual Appliance](virtual-appliance) there is build scripts and all dependencies installed already. - -## Build from source on Linux - -To have [Node 100% CPU fixes](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v084-2018-04-16-wekan-release): Increase ulimit for node in systemd config to 100 000 - -Wekan: -- On any x64 hardware that has Ubuntu 14.04 or Debian 9 or newer installed directly or in VM: -[Build from source scripts](https://github.com/wekan/wekan/tree/edge/releases/virtualbox) - -Wekan Meteor Bundle: -1. [Build from source scripts](https://github.com/wekan/wekan/tree/edge/releases/virtualbox) built on [Wekan VirtualBox Ubuntu 14.04 64bit](virtual-appliance) -2. Copy arhive directory wekan/.build/bundle to .zip file so it includes bundle directory and subdirectories as wekan-1.xx.tar.gz - -Wekan for Sandstorm: -- Install above Wekan from source -- Install [Sandstorm locally](https://sandstorm.io/install) with `curl https://install.sandstorm.io | bash`, select dev install -- Install [meteor-spk](https://github.com/sandstorm-io/meteor-spk) -- Get 100% CPU issue fibers fixed node, and copy it to spk directory:
-`wget https://releases.wekan.team/node`
-`chmod +x node`
-`mv node ~/projects/meteor-spk/meteor-spk-0.4.0/meteor-spk.deps/bin/` -- Add to your /home/username/.bashrc :
`export PATH=$PATH:$HOME/projects/meteor-spk/meteor-spk-0.4.0` -- Close and open your terminal, or read settings from .bashrc with
`source ~/.bashrc` -- `cd wekan && meteor-spk dev` -- Then Wekan will be visible at local sandstorm at http://local.sandstorm.io:6080/ -- Sandstorm commands: `sudo sandstorm`. [Release scripts](https://github.com/wekan/wekan-maintainer/tree/master/releases). Official releases require publishing key that only xet7 has. - -Docker: -- `git clone https://github.com/wekan/wekan` -- `cd wekan` -- Edit docker-compose.yml script ROOT_URL etc like documented at https://github.com/wekan/wekan-mongodb docker-compose.yml script -- `docker-compose up -d --build` - -Wekan on Windows: -- [Docker, Windows Subsystem for Linux, and compile from source on Windows](Windows) - -### (Optional) Run Wekan as service with startup script - -[Build from source scripts](https://github.com/wekan/wekan-maintainer/tree/master/virtualbox) - from there run node-allow-port-80.sh and add etc-rc.local.txt before last line in your /etc/rc.local - -### (Optional) Run Wekan as service with SystemD on Linux - -This may need testing, does this work. - -Add to to /etc/systemd/system/wekan@.service - -```bash -; see `man systemd.unit` for configuration details -; the man section also explains *specifiers* `%x` -; update with username below - -[Unit] -Description=Wekan server %I -Documentation=https://github.com/wekan/wekan -After=network-online.target -Wants=network-online.target -Wants=systemd-networkd-wait-online.service - -[Service] -ExecStart=/usr/local/bin/node /home//repos/wekan/.build/bundle/main.js -Restart=on-failure -StartLimitInterval=86400 -StartLimitBurst=5 -RestartSec=10 -ExecReload=/bin/kill -USR1 $MAINPID -RestartSec=10 -StandardOutput=syslog -StandardError=syslog -SyslogIdentifier=Wekan -User= -Group= -Environment=NODE_ENV=production -Environment=PWD=/home//repos/wekan/.build/bundle -Environment=PORT=3000 -Environment=HTTP_FORWARDED_COUNT=1 -Environment=MONGO_URL=mongodb://127.0.0.1:27017/admin -; https://example.com/wekan for deployment -Environment=ROOT_URL=http://localhost/wekan -Environment=MAIL_URL='smtp://user:pass@mailserver.example.com:25/' - -[Install] -WantedBy=multi-user.target - -``` - -#### To start Wekan and enable service, change to your username where Wekan files are: -```bash -sudo systemctl daemon-reload -sudo systemctl start wekan@ -sudo systemctl enable wekan@ -``` - -#### To stop Wekan and disable service, change to your username where Wekan files are: -```bash -sudo systemctl daemon-reload -sudo systemctl stop wekan@ -sudo systemctl disable wekan@ -``` -Checkout instructions for setup with [[Caddy Webserver Config]] and [[Nginx Webserver Config]] respectively. - -## Windows - -Building on Windows (if it works) is a lot slower than on Linux/Mac. - -[Windows](Windows) \ No newline at end of file diff --git a/docs/Platforms/FOSS/UCS.md b/docs/Platforms/FOSS/UCS.md deleted file mode 100644 index 81966f841..000000000 --- a/docs/Platforms/FOSS/UCS.md +++ /dev/null @@ -1,49 +0,0 @@ -Univention logo - -## Production: [Univention](https://www.univention.com/products/univention-app-center/app-catalog/wekan/) platform, many apps and WeKan ® - -- Virtual Appliances Download: [VirtualBox, KVM, VMware, VMware ESX](https://www.univention.com/products/univention-app-center/app-catalog/wekan/) -- [Video of installing Univention WeKan ® Appliance](https://wekan.github.io/UCS-4.4-with-wekan-10.200.2.25.webm) -- After installing, you get license key file in email. Go with webbrowser to VM ip address like http://192.x.x.x and upload license. After that also on VM screen console login as root is possible. If you install KDE app from App Center with webbrowser, you get KDE on VM screen. -- [WeKan ® for Univention Feature Requests and Bug Reports](https://github.com/wekan/univention/issues) -- [Univention Open Source repos](https://github.com/Univention) -- [Univention interview at FLOSS Weekly 480](https://twit.tv/shows/floss-weekly/episodes/480) -- VM based on Debian. Free and Enterprise versions of Univention are same, only difference is paid support. -- Univention VM can be standalone, or replace Windows Server Active Directory, or join to existing Active Directory. Has web UI, LDAP server, Users/Groups management, adding user to app. -- WeKan ® LDAP login is integrated to Univention LDAP. Create at Univention web UI at Users management LDAP Domain Admin user, and add WeKan ® app for that user, to get WeKan ® Admin Panel. Normal users don't have Admin Panel. -- Has WeKan ® . From App Center you can install RocketChat, WordPress, OnlyOffice, NextCloud, OpenXChange, etc. Some apps are full free versions, some other apps require payment for more features. WeKan ® is full free version. -- WeKan ® on Univention is based WeKan ® Docker version. Upgrading all apps on Univention upgrades also WeKan ® to newest available WeKan ® version. -- Newer version of WeKan ® will be released when building and testing is done. -- [RocketChat Webhook workaround](https://github.com/wekan/univention/issues/15) - -## Feature Requests and Bugs - -[WeKan ® for Univention Feature Requests and Bugs](https://github.com/wekan/univention/issues) - -## Gantt - -[How to use Gantt](Gantt) - -UCS WeKan v5.71 and newer is using WeKan Gantt GPL version. [Source](https://github.com/wekan/wekan/issues/2870#issuecomment-954598565). - -## Email on Univention - -[Source](https://github.com/wekan/univention/issues/6#issuecomment-607986717) - -### 1) WeKan ® product page, scroll down - -![ucs-mail-1](https://user-images.githubusercontent.com/15545/78279227-e682f700-751f-11ea-83fc-d22bc71b77fb.png) - -### 2) Click APP SETTINGS - -![ucs-mail-2](https://user-images.githubusercontent.com/15545/78279301-fdc1e480-751f-11ea-9d7b-1632c71cd79a.png) - -### 3) Mail Settings - -https://github.com/wekan/wekan/wiki/Troubleshooting-Mail - -![ucs-mail-3](https://user-images.githubusercontent.com/15545/78279359-129e7800-7520-11ea-9e22-a911826285ba.png) - -# Repairing MongoDB - -https://github.com/wekan/wekan/wiki/Repair-MongoDB \ No newline at end of file diff --git a/docs/Platforms/FOSS/Ubuntu-Core.md b/docs/Platforms/FOSS/Ubuntu-Core.md deleted file mode 100644 index 9ad48bd67..000000000 --- a/docs/Platforms/FOSS/Ubuntu-Core.md +++ /dev/null @@ -1,25 +0,0 @@ -## Install - -On [Ubuntu Core KVM Download page](https://ubuntu.com/download/kvm) local x64 VM: - -``` -ssh -p 8022 username@localhost - -snap install wekan - -snap set wekan root-url='http://localhost:8090' - -snap set wekan port='80' -``` -Then Wekan is visible at http://localhost:8090 - -[Adding users](Adding-users) - -List of Wekan Snap settings: -``` -wekan.help | less -``` - -More info about Wekan Snap [Snap Install page](https://github.com/wekan/wekan-snap/wiki/Install) and right menu on that page. - -[Documentation](https://github.com/wekan/wekan/wiki) \ No newline at end of file diff --git a/docs/Platforms/FOSS/Vagrant.md b/docs/Platforms/FOSS/Vagrant.md deleted file mode 100644 index e270837b3..000000000 --- a/docs/Platforms/FOSS/Vagrant.md +++ /dev/null @@ -1,40 +0,0 @@ -## Using Vagrant and VirtualBox on an Ubuntu 16.04 64bit - -1) Download Vagrant https://www.vagrantup.com/ -and Virtualbox https://www.virtualbox.org/wiki/Downloads -2) In CMD or BASH `mkdir wekan_vagrant` -3) `cd wekan_vagrant` -4) `vagrant init -m ubuntu/xenial64` -5) Open up the vagrantfile in a text editor and copy this into it: -``` -Vagrant.configure("2") do |config| - config.vm.box = "ubuntu/xenial64" - config.vm.provision :shell, path: "bootstrap.sh" - config.vm.network "forwarded_port", guest: 8080, host: 8080 - config.vm.provider "virtualbox" do |v| - v.memory = 2048 - v.cpus = 2 - end -end -``` - -6) Create a new text file in the same folder and call it bootstrap.sh -7) Copy this into the sh file -``` -#!/usr/bin/env bash -sudo apt-get update -sudo snap install wekan -sudo snap set wekan root-url="http://localhost:8080" -sudo systemctl restart snap.wekan.wekan -``` -8) Type 'vagrant up' to start the VM and wait for it to boot. - -9) Got to your local browser and type in `localhost:8080` - -10) You can go inside VM with `vagrant ssh` - -11) Look at [Ubuntu snap wiki](https://github.com/wekan/wekan-snap/wiki) for additional configuration, backups etc - -## Deleting - -Once your done testing your Vagrantbox just go back to the cmd line and type `vagrant destroy` And it completely wipes any trace of the test environment from your system, however you can very very easily rebuild it by doing another `vagrant up` **Note: This will not save any data you may have put into Wekan!!!** \ No newline at end of file diff --git a/docs/Platforms/FOSS/ppc.md b/docs/Platforms/FOSS/ppc.md deleted file mode 100644 index 12f28b7c2..000000000 --- a/docs/Platforms/FOSS/ppc.md +++ /dev/null @@ -1,84 +0,0 @@ -## About OpenPower - -- [OpenPOWER Foundation](https://openpowerfoundation.org) -- [University of Campinas - Unicamp Minicloud](https://openpower.ic.unicamp.br), that was before available, but now is closed - -[xet7](https://github.com/xet7), as maintainer of [Wekan](https://wekan.github.io), got access to ppc64le at -at University of Campinas - Unicamp Minicloud. Unicamp is member of [OpenPOWER Foundation](https://openpowerfoundation.org). At Minicloud OpenStack, xet7 created Ubuntu 20.10 VM, and at 2020-12-22 ported Wekan to ppc64le very similarly like previously for [s390x](s390x). - -## Installing MongoDB on OpenPower Ubuntu 20.04 ppc64le - -This Snap package https://snapcraft.io/juju-db , created by Canonical, has MongoDB for various CPU architectures . It is internal package for Canonical's Juju service https://jaas.ai . Snap repo at https://github.com/juju/juju-db-snap and copy at https://github.com/wekan/mongodb-snap - -``` -ssh yourserver - -sudo apt install snapd nano - -sudo reboot - -sudo snap install juju-db - -sudo snap refresh juju-db --channel=5.3/stable - -sudo snap enable juju-db - -sudo snap start juju-db - -nano .bashrc -``` -There add path to commands mongo, mongodump, mongorestore etc -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/juju-db/138/usr/lib/powerpc64le-linux-gnu -export PATH="$PATH:/snap/juju-db/138/bin" -``` -Save and exit: Ctrl-o Enter Ctrl-x - -Now MongoDB is at localhost port 27017. You connect to CLI with command: -``` -mongo -``` - -## Download - -- wekan-VERSION-ppc64le.zip at https://releases.wekan.team/ppc64le/ -- nodejs for linux ppc64le at https://nodejs.org/dist/latest-v14.x/ - -## Install - -Installing is similar like at https://github.com/wekan/wekan/wiki/Raspberry-Pi - -You can start it with start-wekan.sh from https://github.com/wekan/wekan or add SystemD service. - -Setup ROOT_URL like described at https://github.com/wekan/wekan/wiki/Settings - -At https://github.com/wekan/wekan/wiki is also info about Caddy/Nginx/Apache etc. - -Some related links also at https://github.com/wekan/wekan/wiki/Platforms - -## How this ppc64le bundle package was created - -1. Install Node.js -2. scp wekan-VERSION.zip bundle to ppc64le server, and unzip it -2. Clone and build Fibers, copy fibers to bundle, and zip bundle. -``` -git clone https://github.com/laverdet/node-fibers -cd node-fibers -npm install -node build.js -cd .. -cp -pR /home/ubuntu/node-fibers/bin/linux-ppc64-72-glibc bundle/programs/server/node_modules/fibers/bin/ -zip -r wekan-VERSION-ppc64le.zip bundle -``` - -## OLD INFO: About MongoDB for OpenPower - -Working: -- Official MongoDB binaries for OpenPower are available as part of MongoDB Enterprise subscription. - -Other options: -- There is no Community version of MongoDB binaries for OpenPower available, like there is for other CPUs like x64/arm64/s390x. -- xet7 did not yet get MongoDB successfully built from source for OpenPower. -- There are some unofficial MongoDB Docker images by random people, but they could be old versions of MongoDB, and there is no guarantee they don't have any malicious code. -- If sometime in the future some working database binaries become available, link to them will be added here. -- If sometime in the future support for other databases is added to Wekan, info about it could be added here, although adding support for other databases could be a lot of work. diff --git a/docs/Platforms/FOSS/s390x.md b/docs/Platforms/FOSS/s390x.md deleted file mode 100644 index 4041afbab..000000000 --- a/docs/Platforms/FOSS/s390x.md +++ /dev/null @@ -1,205 +0,0 @@ -## About s390x - -- Dave's Garage at 2023-10: Why Do Mainframes Still Exist? What's Inside One? 40TB, 200+ Cores, AI, and more! https://www.youtube.com/watch?v=ouAG4vXFORc -- https://en.wikipedia.org/wiki/Linux_on_IBM_Z -- [FLOSS 564 Interview about Open Mainframe Project](https://twit.tv/shows/floss-weekly/episodes/564?autostart=false) -- [Open Mainframe Project](https://www.openmainframeproject.org) -- [LinuxOne Community Cloud](https://developer.ibm.com/linuxone/) -- [SWLUG Talk - Linux on the IBM Z mainframe platform](https://www.youtube.com/watch?v=V-5dqnTd09k) -- https://wiki.qemu.org/Documentation/Platforms/S390X -- https://arstechnica.com/information-technology/2023/07/the-ibm-mainframe-how-it-runs-and-why-it-survives/ -- https://sdl-hercules-390.github.io/html/ -- Big-endian s390x https://community.ibm.com/community/user/ibmz-and-linuxone/blogs/javier-perez1/2021/01/19/endianness-guidance-for-open-source-projects -- The Future of Big Iron: An Interview with IBM’s Christian Jacobi - - https://morethanmoore.substack.com/p/the-future-of-big-iron-telum-ii-and - - https://news.ycombinator.com/item?id=41846592 - -*** - -## Petclinic s390x - -2024-01-20 Petclinic fork https://github.com/xet7/pet , with command `blink redbean.com` - -- With Petclinic website, it is possible to add pets, visits to clinic, etc. There is no login system, it is possible to add to database directly at website http://127.0.0.1:8000/ or http://YOUR-COMPUTER-IP-ADDRESS:8000/ -- When xet7 added issue about blink segfault at s390x, 5 minutes later jart added fix https://github.com/jart/blink/issues/162 -- Blink is x86_86 emulator, similar to qemu https://github.com/jart/blink . With blink, it works at Linux s390x. Without blink, it works at x86_86/arm64 Win/Mac/Linux/BSD, but ASAN security feature does not work yet at arm64, like mentioned at Makefile of https://github.com/xet7/pet . If there is errors, maybe you need to run it with `chmod +x redbean.com && sh -c ./redbean.com`, or also need to install `ape` from https://github.com/jart/cosmopolitan . -- Redbean is webserver https://redbean.dev -- Fullmoon is Lua web framework https://github.com/pkulchenko/fullmoon . Petclinic has fork of Fullmoon, making possible to use SQLite across CGI-like Lua processes of Redbean, like mentioned at Readme https://github.com/xet7/pet -- SQLite has triggers, and it's possible to Redbean's cron like scheduled actions -- By using Makefile with `make all` or `make start` it makes one executeable. When starting, it creates SQLite database to same directory, adding data, with `srv/.lua/*.sql` -- At fork https://github.com/xet7/pet , xet7 added all external `.sql`, Javascript and CSS dependencies directly inside executeable. This can be seen at Makefile, where files from `srv` directory are are added to `.zip` file, that is added to end of `redbean.com` executeable. -- Releases at https://github.com/xet7/pet/releases - -### Petclinic Benchmark - -At Makefile, xet7 fixed `make benchmark` of wrk benchmarks to to work at Mac M1 `brew install wrk` and Linux `sudo apt install wrk` . But wrk does not yet work at s390x, xet7 added issue about it to https://github.com/jart/blink/issues/163 . If you start with silent mode `./redbean.com -s` , then at M1 Air macOS Sonoma is this benchmark: - -``` - ~/Downloads/pet$ make benchmark -wrk -H 'Accept-Encoding: gzip' -t 12 -c 120 http://127.0.0.1:8000/ -Running 10s test @ http://127.0.0.1:8000/ - 12 threads and 120 connections - Thread Stats Avg Stdev Max +/- Stdev - Latency 73.21ms 136.41ms 1.25s 86.04% - Req/Sec 7.72k 12.48k 65.33k 89.46% - 600013 requests in 10.09s, 708.40MB read - Socket errors: connect 0, read 427, write 2, timeout 0 -Requests/sec: 59485.18 -Transfer/sec: 70.23MB -``` - -### Lua IDE - -- It is possible to show hidden files like `.gitignore` with Lua IDE, ZeroBrane Studio, this way, and also debug redbean: https://github.com/xet7/pet/wiki/Redbean - -### QuickJS - - - Unrelated to Lua, there is also QuickJS (similar like Node.js/Bun/Deno), where it is possible to embed Javascript to same Cosmopolitan x86_85/arm64 Win/Mac/Linux/BSD executeable binary https://github.com/xet7/pet/wiki/QuickJS - -*** - -## Other non-WeKan Open Source projects xet7 tried to build at s390x - -- Works: - - TSC platform game, C++ https://secretchronicles.org/en/news/2020/11/16/tsc-for-s390x-available/ - - Darkest Hour halloween text adventure game, C89, xet7 ported to 30+ CPU/OS https://github.com/xet7/darkesthour -- Does not work yet: - - V https://github.com/vlang/v/issues/18737 - - LLVM, Zig, Bun https://github.com/wekan/wekan-node20#trying-to-compile-llvm-for-zig-and-bun-at-s390x-fails - - Deno, because Rust ring (a crypto dependency) does not support s390x https://github.com/wekan/wekan-node20#trying-to-compile-deno-for-s390x-fails - -Ported by others, not xet7: -- PostreSQL https://news.ycombinator.com/item?id=38398305 - - -## From xet7, WeKan at s390x - -- https://www.openmainframeproject.org/blog/2020/11/20/wekan-open-source-kanban-on-s390x - -[xet7](https://github.com/xet7), as maintainer of [WeKan](https://wekan.github.io), got access to mainframe at IBM LinuxOne Community Cloud. Access to those servers is monitored, it's running on a real mainframe. - -Previously xet7 had ssh access. At 2023-09 xet7 got web console access, and IBM bumped quota to 2 VMs with 8 GB of memory, 200 GB disk and 4 CPUs each. At web console it is possible to create and remove VMs, and select distro like RHEL/SUSE/Ubuntu. xet7 did do-release-upgrade to upgrade newest Ubuntu 23.10. - -## Download - -- wekan-VERSION-s390x.zip at https://releases.wekan.team/s390x/ - -## Installing MongoDB for s390x - -This Snap package https://snapcraft.io/juju-db , created by Canonical, has MongoDB for various CPU architectures . It is internal package for Canonical's Juju service https://jaas.ai . Snap repo at https://github.com/juju/juju-db-snap and copy at https://github.com/wekan/mongodb-snap - -Install Snap for your distro https://snapcraft.io/docs/installing-snapd - -Then: - -``` -ssh yourserver - -sudo dnf install nano - -sudo reboot - -sudo snap install juju-db - -sudo snap refresh juju-db --channel=5.3/stable - -sudo snap enable juju-db - -sudo snap start juju-db - -nano .bashrc -``` -There add path to commands mongo, mongodump, mongorestore etc -``` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/juju-db/139/usr/lib/s390x-linux-gnu -export PATH="$PATH:/snap/juju-db/139/bin" -``` -Save and exit: Ctrl-o Enter Ctrl-x - -Exit ssh, and ssh to server again, -``` -exit - -ssh yourserver -``` -Or alternatively just read new paths to mongo etc commands: -``` -source .bashrc -``` - -Now MongoDB is at localhost port 27017. You connect to CLI with command: -``` -mongo -``` - -### RHEL 8 -New info 2022-01-18: - -1. Install snapd https://snapcraft.io/docs/installing-snap-on-red-hat - -2. Reboot - -3. Install MongoDB, so it will be at port 27017: -``` -sudo snap install mongo36-configurable -``` -4. Install WeKan s390x bundle from: -- [Raspberry Pi](Raspberry-Pi) -- https://releases.wekan.team/s390x/ - -Old info: -``` -sudo yum -y update -sudo yum -y install git nano npm curl wget podman-docker openssl-devel libcurl-devel clang zip unzip -docker run --name wekan-db -d -p 127.0.0.1:27017:27017 mongo -sudo npm -g install n -sudo n 12.18.0 ## newest 12.x from https://nodejs.org -mkdir repos -cd repos -git clone https://github.com/wekan/wekan -cp wekan/start-wekan.sh . -nano start-wekan.sh -# Edit start-wekan.sh for ports and paths, so starts -# "node main.js" at "build" directory". -# Look for version number from https://releases.wekan.team/s390x/ -wget https://releases.wekan.team/s390x/wekan-VERSION-s390x.zip -unzip wekan*s390x.zip -./start-wekan.sh -``` - -### RHEL 7 - -Node.js LTS newest 12.x release for s390x can be downloaded from https://nodejs.org - -MongoDB v4.x Community Server for s390x RHEL7 is at https://www.mongodb.com. -For example files can be like these filenames: -- mongodb-org-mongos-4.2.3-1.el7.s390x.rpm -- mongodb-org-server-4.2.3-1.el7.s390x.rpm -- mongodb-org-shell-4.2.3-1.el7.s390x.rpm -- mongodb-org-tools-4.2.3-1.el7.s390x.rpm - -## Install - -Installing is similar like at [Raspberry Pi](Raspberry-Pi) - -You can start it with start-wekan.sh from https://github.com/wekan/wekan or add SystemD service. - -Setup ROOT_URL like described at [Settings](Settings) - -At wiki is also info about Caddy/Nginx/Apache etc. - -Some related links also at [Platforms](Platforms) - -## How this s390x bundle package was created for RHEL 7 - -1. Install Node.js -2. scp wekan-VERSION.zip bundle to s390x server, and unzip it -2. Clone and build Fibers, copy fibers to bundle, and zip bundle. -``` -git clone https://github.com/laverdet/node-fibers -cd node-fibers -node build.js -cd .. -cp -pR /home/linux1/node-fibers/bin/linux-s390x-72-glibc bundle/programs/server/node_modules/fibers/bin/ -zip -r wekan-VERSION-s390x.zip bundle -``` diff --git a/docs/Platforms/FOSS/virtual-appliance.md b/docs/Platforms/FOSS/virtual-appliance.md deleted file mode 100644 index 0c6c800a8..000000000 --- a/docs/Platforms/FOSS/virtual-appliance.md +++ /dev/null @@ -1,158 +0,0 @@ -## Virtual Appliance by xet7 - -Requirements: [VirtualBox version 5.2.22 or newer](https://www.virtualbox.org/). Old versions of VirtualBox are not compatible. Both of these have username: wekan , password: wekan , Network Bridged mode so VM has separate IP address so you can also ssh to it. - -[Wekan for VirtualBox bug reports and feature requests](https://github.com/wekan/wekan/issues) - -a) For general Wekan usage: Only Wekan and building it from source in Ubuntu 14.04 64bit VM. - -Download wekan-VERSION.ova at https://releases.wekan.team - -b) For Developers, only this one Wekan-Sandstorm.ova needed for all development: for compiling Wekan, Sandstorm, Wekan for Sandstorm, etc, all. Also has Snap, Docker, Firefox, Chrome, Visual Studio Code with Meteor.js additions, GHex hex editor, etc. Based on Debian 9 64bit. Also see https://github.com/sandstorm-io/sandstorm/issues/3047#issuecomment-369002784 about what dependencies were installed for compiling Sandstorm, although after that dependencies have been changed to [automatically download up-to-date Clang from Chromium project](https://github.com/sandstorm-io/sandstorm/commit/4463c3f52093de8f0c546c93cd55a7bb556aa9d7), so it's easier to compile Sandstorm also on Ubuntu, without using Clang ppa. - -Wekan-Sandstorm-VERSION.ova at https://releases.wekan.team - -### Build scripts - -[Scripts from virtual appliance](https://github.com/wekan/wekan-maintainer/tree/master/virtualbox), can be used on any Ubuntu 14.04 64bit or Debian 9 or newer install like native or VM. Includes script how to run Node.js on port 80. - -### Wekan Meteor 1.4 and Node.js v4.x version on Ubuntu 14.04 64bit desktop, Gnome fallback, in VirtualBox - -- Ubuntu 14.04 64bit desktop with latest updates. -- Wekan installed from source. -- Includes VirtualBox Guest Additions. - -### Download - -.ova files can be downloaded at https://releases.wekan.team - -VirtualBox .ova file contains harddisk image that has current size of 16 GB and maximum growable size of 500GB. - -You can enlarge it with VBoxManage command and then starting with LiveCD iso deleting logical swap and -extended and resizing and creating extended and inside it logical swap. - -Size of this VirtualBox image has been reduced: [http://acidx.net/wordpress/2014/03/how-to-reduce-the-size-of-virtualbox-vms/](http://acidx.net/wordpress/2014/03/how-to-reduce-the-size-of-virtualbox-vms/). - -Use 7zip (Windows) or p7zip (Linux etc) to unarchive. - -### Updating VirtualBox image to have newest Wekan - -Download newest VirtualBox scripts: - -[https://github.com/wekan/wekan-maintainer/tree/master/virtualbox](https://github.com/wekan/wekan-maintainer/tree/master/virtualbox) - -There is script rebuild-wekan-meteor-1.6.sh - -First do some sudo command so you get to insert sudo password, for example: -``` -sudo ls -``` - -Then run script as as normal user: -``` -./rebuild-wekan-meteor-1.6.sh -``` - -Run it with option 1 at first to install dependencies, and then option 3 to rebuild source code. - -### Updating to newest Ubuntu updates - -``` -sudo apt-get update -``` -( password: wekan ) - -``` -sudo apt-get -y dist-upgrade -``` - -### Instructions - -When using VirtualBox bridged mode, you can browse from other computer to http://ipadress -to use Wekan. Node runs on port 80 and is started from /etc/rc.local on boot. -See also README.txt at Ubuntu desktop, scripts at ~/repos directory, and -/home/wekan/.bash_history how it was installed, including typos :) - -To login to the virtual machine with ssh port 22: - -username: wekan - -password: wekan - -### Install VirtualBox - -VirtualBox is available for example Windows, Mac, Linux and Solaris from: - -* VirtualBox website: [https://virtualbox.org](https://virtualbox.org) - -### How to use - -a) Import Virtual Appliance .ova - -b) Extract .ova to use as .vmdk for virtualization raw .img for Qubes OS: -[https://www.qubes-os.org/doc/hvm/#converting-virtualbox-vm-to-hvm](https://www.qubes-os.org/doc/hvm/#converting-virtualbox-vm-to-hvm) - -These settings are for example with VirtualBox: - -* new Ubuntu 64bit VM -* 2GB RAM -* Add Wekan.vmdk as harddisk. -* Not needed usually: Audio, Serial Ports, USB -* Network: If you select Bridged Adapter, name is your network you use, like eth0 / exp9s0 for Ethernet, and there's also wlan etc if available: - -![BridgedAdapter.png](https://wekan.github.io/BridgedAdapter.png) - -If you select NAT to keep virtual machine using same address as your server: - -![NAT.png](https://wekan.github.io/NAT.png) - -Then you can also setup port forwarding to Wekan VM port 8080: - -![PortForwarding.png](https://wekan.github.io/PortForwarding.png) - -2) Start VM - -3) To access Wekan on local network, setup ROOT_URL to your IP address at /home/wekan/repos/start-wekan.sh inside VM. - -``` -cd repos - -./stop-wekan.sh - -nano start-wekan.sh -``` - -4) Add have there your IP address, for example: -``` -export ROOT_URL=http://192.168.1.200 - -export MAIL_URL=smtp://user:pass@mailserver.example.com:25/ - -export MAIL_FROM='Example Wekan Support ' -``` - -5) Save with Ctrl-o Enter and after that exit with Ctrl-x - -6) Allow port 80 and start Wekan: -``` -./node-allow-port-80.sh - -./start-wekan.sh -``` - -7) Access Wekan at your network with IP address of VM, for example - -More details of settings at: - -[https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml](https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml) - -## Virtual Appliance by anselal - -You can download a virtual appliance from https://github.com/anselal/wekan/releases - -To login to the virtual machine use: - -* username: wekan -* password: wekan - -You can find more information at https://github.com/anselal/wekan including the script which was used to create the Virtual Appliance. \ No newline at end of file diff --git a/docs/Platforms/Propietary/Chromebook.md b/docs/Platforms/Propietary/Chromebook.md deleted file mode 100644 index b586152b7..000000000 --- a/docs/Platforms/Propietary/Chromebook.md +++ /dev/null @@ -1,285 +0,0 @@ -## WARNING: PLEASE do not try on your Chromebook below info. - -First, [download all your Google Account data as 4 GB .zip files](https://takeout.google.com/) and burn them to DVD or Blueray disks, where they can not be easily accidentally deleted. - -Because this happened: -- Someone else had their Google Drive full. -- That someone else did not backup local data from Chromebook. -- Installing Linux etc did fill up Chromebook harddisk. -- Chromebook got stuck and messed up, and needed to be reinstalled. -- That someone else lost some data. - -Below intructions only worked for xet7, because xet7 did have free disk space on Chromebook. There is **NO WARRANTY OF ANY KIND** for any of below info. If your Chomebook breaks, well, thank your backups, and have a nice day! - -## Installing Wekan Snap to Chromebook - -Installing to Asus Chromebook C223NA-GJ0007 11.6" laptop, that was cheapest available at local shop, did cost 199 euro. - -It has: -- 4 GB RAM -- 32 GB eMMC disk -- Intel® Celeron® N3350 CPU -- Bluetooth -- webcam -- WLAN -- USB3 -- 2 x USB-C, both work for charging (I have not tried data transfer yet) -- microSD slot -- package includes USB-C charger and USB mouse -- keys for fullscreen, switch apps, brighness, volume, those do not need any modifier keys like other laptops -- playing youtube videos fullscreen works very well -- speakers sound can be set to very loud if needed -- big enough keys, good keyboard layout -- small and lightweight laptop -- has Play Store Android apps and Linux apps that can work fullscreen -- I did not try yet replacing Chrome OS with full Linux https://galliumos.org that has some drivers Chromebook needs, but according to their [hardware compatibility](https://wiki.galliumos.org/Hardware_Compatibility) this model has Known issues: internal audio, suspend/resume, when using galliumos. - -## 1) Install Linux Beta - -At Chromebook settings, install Linux Beta. It will have Debian 10, that will be changed to Ubuntu 20.10 64bit. - -## 2) Install Ubuntu Container - -[Source](http://intertwingly.net/blog/2020/07/21/Ubuntu-20-04-on-Chromebook) - -Start by entering the Chrome shell (crosh) by pressing CTRL+ALT+T, then enter the default termina VM: -``` -vmc start termina -``` -Delete the default penguin container that had Debian 10: -``` -lxc stop penguin --force -lxc rm penguin -``` -Create a new Ubuntu container named penguin: -``` -lxc launch ubuntu:20.10 penguin -``` -Enter the new container (as root): -``` -lxc exec penguin -- bash -``` -## 3) Import public keys - -While Ubuntu 20.10 will install, various apt commands will fail due to an inability to verify GPG keys. This problem is not unique to Crostini, it is seen in other environments, like Raspberry Pis. - -The fix is to import two public keys: -``` -apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010 -apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC -``` -## 4) Update groups -``` -groups ubuntu >update-groups -sed -i 'y/ /,/; s/ubuntu,:,ubuntu,/sudo usermod -aG /; s/$/ \$USER/' update-groups -killall -u ubuntu -userdel -r ubuntu # ignore warning about mail spool -sed -i '/^ubuntu/d' /etc/sudoers.d/90-cloud-init-users -``` -## 5) Install Crostini packages - -Prepare for installing Google's Crostini specific packages. First bring Ubuntu up to date: -``` -apt update -apt upgrade -y -``` -Now add the Crostini package repository to apt. This repository provides the Linux integration with Chrome OS (ignore RLIMIT_CORE warning): -``` -echo "deb https://storage.googleapis.com/cros-packages stretch main" > /etc/apt/sources.list.d/cros.list -if [ -f /dev/.cros_milestone ]; then sudo sed -i "s?packages?packages/$(cat /dev/.cros_milestone)?" /etc/apt/sources.list.d/cros.list; fi -apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1397BC53640DB551 -apt update -``` -A work-around is needed for a cros-ui-config package installation conflict. First, install binutils to get the ar command: -``` -apt install -y binutils -``` -Then create the cros-ui-config work-around package: -``` -apt download cros-ui-config # ignore any warning messages -ar x cros-ui-config_0.12_all.deb data.tar.gz -gunzip data.tar.gz -tar f data.tar --delete ./etc/gtk-3.0/settings.ini -gzip data.tar -ar r cros-ui-config_0.12_all.deb data.tar.gz -rm -rf data.tar.gz -``` -Now install the Crostini packages and the "work-around" package, ignoring any warning messages. This will take awhile: -``` -apt install -y cros-guest-tools ./cros-ui-config_0.12_all.deb -``` -Delete the "work-around" package: -``` -rm cros-ui-config_0.12_all.deb -``` -Install the adwaita-icon-theme-full package. Without this package, GUI Linux apps may have a very small cursor: -``` -apt install -y adwaita-icon-theme-full -``` -Now, shut down the container: -``` -shutdown -h now -``` -Reboot Chrome OS and start the Terminal application from the launcher. If it fails to start the first time, try again and it should work. - -Rebooting is by clicking desktop right bottom clock / Power icon. After Chromebook has shutdown, short press laptop power button to start Chromebook. - -### 8) Optional, if you install some Snap GUI apps - -These are from same [Source](http://intertwingly.net/blog/2020/07/21/Ubuntu-20-04-on-Chromebook) -but xet7 did not test them. - -The fix is to copy the desktop and pixmap files to your .local environment: -``` -mkdir -p ~/.local/share/pixmaps -cp /snap/code/current/snap/gui/com.visualstudio.code.png ~/.local/share/pixmaps -cp /snap/code/current/snap/gui/code.desktop ~/.local/share/applications -``` -Finally, you will need to change three lines in the code.desktop file in your ~/.local directory. - -First, you will need to change Exec=code to specify the full path, namely Exec=/snap/bin/code. - -Next, in the two places where Icon= is defined, you will need to replace this with the path to the icon that you copied into your .local directory. In my case, the resulting lines look as follows: - -Icon=/home/rubys/.local/share/pixmaps/com.visualstudio.code.png - -Once these changes are made, you should be able to launch the application using the Launcher in the lower left hand corder of the screen, by clicking on the circle, entering code into the search box and then clicking on the Visual Studio Code icon. Once launched, the application will appear in the shelf at the bottom of the screen. Right clicking on this icon will give you the option to pin the application to the shelf. - -It is still a beta, and the installation instructions (above) are still a bit daunting. More importantly, things that used to work can stop working at any time, like, for example, Ubuntu 18.04. - -That being said, it is a full, no-compromise Ubuntu. I've developed and tested code using this setup. I even have installed my full development environment using Puppet. - -The only glitch I do see is occasionally GUI applications don't receive keystrokes. This is generally fixed by switching focus to Chromebook application and then back again. Once the application is able to process keystrokes, it remains able to do so. - -## 6) Install Wekan - -At Ubuntu terminal: -``` -sudo snap install wekan -``` - -#### a) Use Wekan locally - -At Ubuntu terminal, type: -``` -ip address -``` -It shows container internal IP address. You can set it to use Wekan locally, for example: -``` -sudo snap set wekan root-url='http://100.115.92.200' -sudo snap set wekan port='80' -``` -Then Wekan works locally using Ubuntu webbrowser at http://100.115.92.200 , and you can open cards. - -#### b) Use Wekan from other computers at LAN - -Look at your Chromebook wifi settings `(i)`, what is your laptop IP address, and use it with below http address: -``` -sudo snap set wekan root-url='http://192.168.0.2:2000' -sudo snap set wekan port='2000' -``` -At Chromebook settings / Linux Beta / > / Port forwarding, forwart port `2000` with nickname like for example `wekan`. This does forward Chromebook port to inside Ubuntu 20.10 64bit LXC container where Wekan is running. - -NOTE: Sometimes reboot stops port forwarding, then it needs to be enabled again at Chromebook settings. - -But problem is, using that LAN IP address does not work from Chromebook's own browser like Chrome or Linux Firefox. So looking at that at the next option: - -#### c) Use hosts file - -At your Chromebook Ubuntu, edit hosts: -``` -sudo nano /etc/hosts -``` -There add: -``` -127.0.0.1 localhost wekan -``` -Then with Ubuntu webbrowser you can browse http://wekan:2000 . - -At other LAN computer, edit hosts: -``` -sudo nano /etc/hosts -``` -There add: -``` -192.168.0.2 wekan -``` -Then you can browse http://wekan:2000 from LAN computers. But mobile phones like Android and iOS can not usually change those settings, and if you don't have a way to setup local network computer names, let's look at next option: - -#### d) Use some subdomain - -If you have some domain, you can set new record `wekan.example.com A 192.168.0.2` . That is internet wide, but resolves to your local IP address on your local network. Then on your LAN mobile phones you can browse to http://wekan.example.com:2000 . - -At Chromebook Ubuntu: -``` -sudo nano /etc/hosts -``` -There add: -``` -127.0.0.1 localhost wekan.example.com -``` -So then you can browse to http://wekan.example.com:2000 from Chromebook Ubuntu Firefox, Chromebook Chrome, other LAN computers and mobile phones. - -#### Mobile app icon - -For iOS and Android, you can [create app PWA icon this way](PWA). - -## 7) Optional: Change Linux desktop apps language and install Firefox - -Here changing to Finnish: -``` -sudo dpkg-reconfigure-locales -``` -There add this language, and set is as default: -``` -fi_FI.UTF8 -``` -And install Ubuntu 20.10 version Firefox and translation: -``` -sudo apt install firefox firefox-locale-fi -``` -Shutdown Ubuntu container: -``` -sudo shutdown -h now -``` -Reboot Chromebook by clicking desktop right bottom clock / Power icon. After Chromebook has shutdown, short press laptop power button to start Chromebook. - -## 8) Optional: Install HP DeskJet 2600 multifunction printer/scanner - -This inkjet printer was cheapest available, and does print excellent quality similar to laser color printer. - -You should set your wireless network printer to have Static IP address. - -[Source](https://chromeunboxed.com/how-to-use-your-hp-printer-with-linux-on-chrome-os/) -``` -sudo apt install hplip hplip-gui cups system-config-printer -sudo xhost + -sudo hp-setup -``` -Check: -``` -[X] Network/Ethernet/Wireless newtork (direct connection or JetDirect) -``` -Click: -``` -> Show Advanced Options: -``` -Check: -``` -[X] Manual Discovery -IP Address or network name: [ YOUR-PRINTER-STATIC-IP-HERE, for example 192.168.0.200 ] -JetDirect port: [1] -``` -Next, Next, Add Printer. -``` -sudo system-config-printer -``` -Set printer as Default. - -You are also able to Scan images from your multifunction printer with XSane, that was installed with HP printer drivers. - -You can print from Ubuntu Linux apps, like for example Firefox, LibreOffice, Inkscape, etc what you can install with apt. - -## 9) Optional: Gimp - -[Gimp PPA for Ubuntu 20.10 Groovy](https://launchpad.net/~ubuntuhandbook1/+archive/ubuntu/gimp). Note: Other versions of Gimp do not have all translations or do not create icons, like default Gimp from Ubuntu 20.10 repos and Snap. \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/AWS.md b/docs/Platforms/Propietary/Cloud/AWS.md deleted file mode 100644 index 970c3fd14..000000000 --- a/docs/Platforms/Propietary/Cloud/AWS.md +++ /dev/null @@ -1,186 +0,0 @@ -[Scaling Meteor](https://medium.freecodecamp.org/scaling-meteor-a-year-on-26ee37588e4b) - -## Production setup at AWS for thousands of users - -* 3-4x m4.large for Node (ECS Cluster) -* 3x r4.large for Mongo (1 Primary for read and write, 2 replicas) - -This setup runs very well for thousands of users. - -To improve scalability even more, add [Redis Oplog support](https://github.com/cult-of-coders/redis-oplog), also see related [Redis Oplog discussion forum post](https://forums.meteor.com/t/meteor-scaling-redis-oplog-status-prod-ready/30855/479). At AWS you can use AWS ElastiCache that has Redis support. - -### Mongo URL AND Oplog settings -From [comment at issue](https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-378343587): -We've fixed our CPU usage problem today with an environment -change around Wekan. I wasn't aware during implementation -that if you're using more than 1 instance of Wekan -(or any MeteorJS based tool) you're supposed to set -MONGO_OPLOG_URL as an environment variable. -Without setting it, Meteor will perform a pull-and-diff -update of it's dataset. With it, Meteor will update from -the OPLOG. See here -https://blog.meteor.com/tuning-meteor-mongo-livedata-for-scalability-13fe9deb8908 - -After setting in [docker-compose.yml](https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml): -``` -MONGO_OPLOG_URL=mongodb://:@/local?authSource=admin&replicaSet=rsWekan -``` -the CPU usage for all Wekan instances dropped to an average -of less than 10% with only occasional spikes to high usage -(I guess when someone is doing a lot of work) -``` -- MONGO_URL=mongodb://wekandb:27017/wekan -- MONGO_OPLOG_URL=mongodb://:@/local?authSource=admin&replicaSet=rsWekan -``` - -If there is other ideas to improve scalability, add info to [existing scalability issue](https://github.com/wekan/wekan-mongodb/issues/2) or [scalability forum post](https://discourse.wekan.io/t/cpu-utilization-problems-with-large-userbase/579/15), there is also mentioned that smart-disconnect is already in Wekan. - -For Enterprises using Wekan xet7 recommends participating in Wekan development, see [Benefits of contributing your features to Upstream Wekan](https://blog.wekan.team/2018/02/benefits-of-contributing-your-features-to-upstream-wekan/index.html), having your own developers working on Wekan daily, and using Commercial Support at https://wekan.team , as Wekan Team [already has access to high performance bare metal servers at CNCF / Packet for running high load testing](https://blog.wekan.team/2018/01/wekan-progress-on-x64-and-arm/index.html). With the benefits you get by using Wekan, it’s [time well spent](https://blog.wekan.team/2018/02/time-well-spent/index.html). Some [DTrace and eBPF info here](https://news.ycombinator.com/item?id=16375938). - -## Single Server Install for small teams - -1) Add AWS Security Group with for example name wekan, and incoming ports 80 and 443 for all. Only add ssh access to your own IP address CIDR like 123.123.123.123/32 so it means one IP address. - -2) Start Ubuntu 17.10 64bit EC2 instance that has at least 2 GB RAM, 30 GB diskspace, probably you need more when you add more customers. Add your SSH public key to instance or let it create new. - -3) Add new Elastic IP address pointing to your EC2 instance. That way IP address stays same, and you can also make snapshot of EC2 instance and start that as new EC2 instance with more RAM and change Elastic IP to point to new EC2 instance with minimal downtime, but prefer times when there is no active changes to Wekan. - -4) Set your subdomain.yourdomain.com address DNS pointing to your Elastic IP address as A record in Route 53, Namecheap or elsewhere where your domain control panel is. It will take max 24h for DNS to propagate globally. - -5) ssh to your server, for example: - -``` -ssh -i pubkey.pem ubuntu@server-ip-address - -(or: root@) -``` - -6) Update all packages: - -``` -sudo apt update -sudo apt -y dist-upgrade -reboot -``` - -7) Install Docker CE and docker-compose for ubuntu from www.docker.com , also add user ubuntu to group docker in post-install step. - -8) Install nginx, for example: - -``` -sudo apt install nginx -(or: nginx-full) -sudo systemctl start nginx -sudo systemctl enable nginx -``` - -[Example nginx config](Nginx-Webserver-Config) - -Test nginx config with: - -``` -sudo nginx -t -``` - -And take config into use with: - -``` -sudo systemctl reload nginx -``` - -9) Install certbot from https://certbot.eff.org for Let's Encrypt SSL certs, redirect http to https - -10) For different customers, you use different location /customer1 2 etc block and wekan running behind nginx proxy on different localhost port in same nginx virtualhost subdomain config file. - -11) Get latest wekan release info from https://github.com/wekan/wekan/releases , read docker-compose.yml file from https://github.com/wekan/wekan-mongodb where all settings are explained, so you setup ROOT_URL=https://sub.yourdomain.com/customer1 and for example the 8080:80 for local server port 8080 to go inside docker port 80. - -For example Wekan v0.70, use in docker-compose.yml file: -image: quay.io/wekan/wekan:v0.70 -Only use release version tags, because latest tag can be broken sometimes. - -12) For email, in AWS SES add email address to domain, verify SPF and DKIM with Route53 wizard if you have domain at Route53 as I recommend. At SES create new SMTP credentials and [add them to docker-compose.yml SMTP settings](Troubleshooting-Mail) - -13) Start wekan and mongodb database containers with command: - -``` -docker-compose up -d -``` - -So it goes nginx SSL port 443 => proxy to localhost port 8080 or any other => wekan-app port 80 inside docker - -14) For different customers have different docker-compose.yml script in directories named by customer names. You may need to rename docker containers from wekan-app to wekan-customer1 etc, and probably also docker internal network names. - -15) [Backup, restore, and moving data outside/inside docker](Export-Docker-Mongo-Data) - -16) Register as user at https://subdomain.yourdomain.com/customer1/sign-up and login at https://subdomain.yourdomain.com/customer1/sign-in , first user will be admin. Click your username at top right corner / Admin Panel, and there chang settings to invite only. - -## Upgrading Wekan - -1) Go to directory where docker-compose.yml is, as in install step 14) , and create directory for backup - -``` -cd wekan-customer1 -mkdir backup-2018-02-03 -cd backup-2018-02-03 -``` - -2) Make backup of database outside docker in that backup directory, as in install step 15) - -3) Edit docker-compose.yml to have new Wekan release number: - -``` -image: quay.io/wekan/wekan:v0.71 -``` - -4) Restart Wekan: - -``` -docker-compose stop -docker-compose start -``` - -5) Login to Wekan and check at Admin Panel that Wekan version is updated. - -6) If version is not updated, you could also need some of these: - -Seeing what Docker containers are running: -``` -docker ps -``` - -Seeing what Docker images are installed: - -``` -docker images -``` - -Stopping containers (or start, if starting containers) - -``` -docker stop wekan-app -docker stop CONTAINER-ID-HERE -``` - -Removing containers: - -``` -docker rm wekan-app -docker rm CONTAINER-ID-HERE -``` - -Removing images: - -``` -docker rmi quay.io/wekan/wekan:latest -docker rmi quay.io/wekan/wekan:v0.70 -``` - -Starting new containers from docker-compose.yml file: - -``` -docker-compose up -d -``` - -TODO: -- allow resend invites https://github.com/wekan/wekan/issues/1320 -- changing logo everywhere, whitelabeling https://github.com/wekan/wekan/issues/1196 diff --git a/docs/Platforms/Propietary/Cloud/Azure.md b/docs/Platforms/Propietary/Cloud/Azure.md deleted file mode 100644 index 15a9de760..000000000 --- a/docs/Platforms/Propietary/Cloud/Azure.md +++ /dev/null @@ -1,180 +0,0 @@ -### Install for example from: -- [Snap](Snap) -- [Docker](Docker) - -*Make sure you are running at least **v2.21*** - -### Redirect URL - -[About AZURE-NEW-APP-CLIENT-ID and AZURE-NEW-APP-SECRET](https://community.microfocus.com/t5/Identity-Manager-Tips/Creating-the-application-Client-ID-and-Client-Secret-from/ta-p/1776619). The redirect URL is your Wekan root-url+_oauth/oidc like this: https://boards.example.com/_oauth/oidc - -Wekan logo - -AZURE_DIRECTORY_ID = TENANT-NAME-FOR-YOUR-ORGANIZATION - -### If Azure Active Directory login does not work - -Check that your CLIENT_SECRET = AZURE-NEW-APP-SECRET has not expired. If it has, delete old secret, and add new secret. -Add it like this, and also check that your Azure Directory ID is in server URL: - -``` -sudo snap set wekan oauth2-secret='AZURE-CLIENT-SECRET' - -sudo snap set wekan oauth2-server-url='https://login.microsoftonline.com/AZURE_DIRECTORY_ID' -``` - -Azure App Client Secret - - -### - - -## Note: Mailjet is not available at Azure anymore - -Instead, use O365 at upcoming Wekan v5.38 or newer. - -### Mailjet: getaddrinfo ENOTFOUND - -With Wekan Snap and Mailjet, if you get getaddrinfo ENOTFOUND error when you try to send a test email from within Wekan, it can be something with networking for the snap. Fix can be found in [Ubuntu DNS resolution issue affecting other snap packages](https://github.com/nextcloud/nextcloud-snap/issues/881). Thanks to [peterk for info](https://github.com/wekan/wekan/issues/3184#issuecomment-699669350). - -### Mailjet: mail-from - -When using sending email with Mailjet, set `mail-from` to some real email address so you get info if email bounces back. - -### Snap settings -``` -sudo snap set wekan debug='true' -sudo snap set wekan caddy-enabled='true' -sudo snap set wekan mail-from='Example Boards ' -sudo snap set wekan mail-url='smtps://username:password@in-v3.mailjet.com:465/' -sudo snap set wekan oauth2-enabled='true' -sudo snap set wekan oauth2-request-permissions='openid' -sudo snap set wekan oauth2-client-id='AZURE-NEW-APP-CLIENT-ID' -sudo snap set wekan oauth2-secret='AZURE-NEW-APP-SECRET' -sudo snap set wekan oauth2-auth-endpoint='/oauth2/v2.0/authorize' -sudo snap set wekan oauth2-server-url='https://login.microsoftonline.com/AZURE_DIRECTORY_ID' -sudo snap set wekan oauth2-token-endpoint='/oauth2/v2.0/token' -sudo snap set wekan oauth2-userinfo-endpoint='https://graph.microsoft.com/oidc/userinfo' -sudo snap set wekan oauth2-email-map='email' -sudo snap set wekan oauth2-username-map='email' -sudo snap set wekan oauth2-fullname-map='name' -sudo snap set wekan oauth2-id-map='email' -sudo snap set wekan port='3001' -sudo snap set wekan richer-card-comment-editor='false' -sudo snap set wekan root-url='https://boards.example.com' -sudo snap set wekan with-api='true' -``` - -At Admin Panel / Settings / Email: -- SMTP Host: `in-v3.mailjet.com` -- SMTP Port: `465` -- Username: `MAILJET-USERNAME` -- Password: `MAILJET-PASSWORD` -- TLS Support: `[_]` (not checked) - -If you use Caddy Let's Encrypt SSL for public server, that requires SSL cert validation from multiple not-listed IP addresses of Let's Encrypt, file `/var/snap/wekan/common/Caddyfile` - -``` -boards.example.com { - tls { - alpn http/1.1 - } - proxy / localhost:3001 { - websocket - transparent - } -} - -# If you have static main website in this directory, also add it: -example.com { - root /var/snap/wekan/common/example.com - tls { - alpn http/1.1 - } -} -``` -If you have private server that should be only accessible from private IP (limited by Azure firewall settings), and need SSL, you can not use Let's Encrypt free SSL that validates public availability from multiple non-disclosed IP addresses. For this purpose, you can get SSL certificate. Here is example of SSL cert from with SSL.com . - -Join certificates together to .pem file, in order of: -1) privatekey of example.com -2) wildcard (or one subdomain cert) of example.com -3) sub ca -4) root ca -5) trusted network ca -``` -cat example_com.key >> example.com.pem -cat STAR_example_com.crt >> example.com.pem -cat SSL_COM_RSA_SSL_SUBCA.crt >> example.com.pem -cat SSL_COM_ROOT_CERTIFICATION_AUTHORITY_RSA.crt >> example.com.pem -cat CERTUM_TRUSTED_NETWORK_CA.crt >> example.com.pem -``` -Then transfer SSL cert to server: -``` -scp example.com.pem ubuntu@example.com:/home/ubuntu -ssh ubuntu@example.com -sudo mkdir /var/snap/wekan/common/certs -sudo mv example.com.pem /var/snap/wekan/common/certs/ -sudo chown root:root /var/snap/wekan/common/certs/example.com.pem -sudo chmod og-rwx /var/snap/wekan/common/certs/example.com.pem -sudo nano /var/snap/wekan/common/Caddyfile -``` -At Caddyfile, add these settings for SSL cert: -``` -# Static main website, if you have that, redirect to SSL -http://example.com { - redir https://example.com -} - -# Wekan redirect to SSL -http://boards.example.com { - redir https://boards.example.com -} - -# Static main website, if you have that in this directory -https://example.com { - root /var/snap/wekan/common/example.com - tls { - load /var/snap/wekan/common/certs - alpn http/1.1 - } -} - -# Wekan -https://boards.example.com { - tls { - load /var/snap/wekan/common/certs - alpn http/1.1 - } - proxy / localhost:3001 { - websocket - transparent - } -} -``` -Optionally you can would like to [disable all Snap automatic updates](https://github.com/wekan/wekan-snap/wiki/Automatic-update-schedule#if-required-you-can-disable-all-snap-updates) (not recommended, only required by some clients). - -### There are two major steps for configuring Wekan to authenticate to Azure AD via OpenID Connect (OIDC) - -Note: These old docs below don't have all settings listed that above new Snap settings have. Text case and _- is different, for example at Docker there is `OAUTH2_ENABLED=true` when at Snap same setting is `sudo snap set wekan oauth-enabled='true'` - -1. Register the application with Azure. Make sure you capture the application ID as well as generate a secret key. -2. Configure the environment variables. This differs slightly by installation type, but make sure you have the following: -* OAUTH2_ENABLED = true -* OAUTH2_CLIENT_ID = xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx (application GUID captured during app registration) -* OAUTH2_SECRET = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (secret key generated during app registration) -* OAUTH2_SERVER_URL = https://login.microsoftonline.com/ -* OAUTH2_AUTH_ENDPOINT = /oauth2/v2.0/authorize -* OAUTH2_USERINFO_ENDPOINT = https://graph.microsoft.com/oidc/userinfo -* OAUTH2_TOKEN_ENDPOINT = /oauth2/v2.0/token -* OAUTH2_ID_MAP = email (the claim name you want to map to the unique ID field) -* OAUTH2_USERNAME_MAP = email (the claim name you want to map to the username field) -* OAUTH2_FULLNAME_MAP = name (the claim name you want to map to the full name field) -* OAUTH2_EMAIL_MAP = email (the claim name you want to map to the email field) - -I also recommend setting DEBUG = true until you have a working configuration. It helps. - -You may also find it useful to look at the following configuration information: -https://login.microsoftonline.com/**the-tenant-name-for-your-organization**/v2.0/.well-known/openid-configuration - -Some Azure links also at wiki page about moving from Sandstorm to Docker/Snap , and using Docker Swarm: -- https://github.com/wekan/wekan/wiki/Export-from-Wekan-Sandstorm-grain-.zip-file#azure-links \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/Cloudron.md b/docs/Platforms/Propietary/Cloud/Cloudron.md deleted file mode 100644 index dcd99b619..000000000 --- a/docs/Platforms/Propietary/Cloud/Cloudron.md +++ /dev/null @@ -1,19 +0,0 @@ -# Cloudron setup - -Status: -- [Cloudron now uses upstream Wekan directly](https://github.com/wekan/wekan/issues/3035), so Cloudron users get all Wekan newest features and fixes - -Cloudron is a complete solution for running apps on your server and keeping them up-to-date and secure. - -1. First install Cloudron on your server with 3 simple commands - https://cloudron.io/get.html -2. Install Wekan from the Cloudron Store. Once installed, you will get automatic updates for Wekan as and when they get released. - -[![Install](https://wekan.github.io/hosting/cloudron.svg)](https://cloudron.io/button.html?app=io.wekan.cloudronapp) - -The source code for the package can be found [here](https://git.cloudron.io/cloudron/wekan-app/). - -You can also test the wekan installation on the demo Cloudron instance - https://my.demo.cloudron.io (username: cloudron password: cloudron). - -# Backup - -[Backup Cloudron](Backup#Cloudron) \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/Dome.md b/docs/Platforms/Propietary/Cloud/Dome.md deleted file mode 100644 index 2d92c54de..000000000 --- a/docs/Platforms/Propietary/Cloud/Dome.md +++ /dev/null @@ -1,6 +0,0 @@ -- Website: http://trydome.io -- Location: USA -- Free trial of WeKan Hosting at https://app.trydome.io/signup?package=wekan -- Paid SaaS hosting at propietary backend -- Hosted code examples at https://github.com/domeplatform -- Developer info at https://www.trydome.io/developer diff --git a/docs/Platforms/Propietary/Cloud/Heroku.md b/docs/Platforms/Propietary/Cloud/Heroku.md deleted file mode 100644 index 21b40564e..000000000 --- a/docs/Platforms/Propietary/Cloud/Heroku.md +++ /dev/null @@ -1,14 +0,0 @@ -[![Deploy][heroku_button]][heroku_deploy] - -[Heroku deployment quide needed](https://github.com/wekan/wekan/issues/693) - -[Deploy error](https://github.com/wekan/wekan/issues/638) - -[Problem with Heroku](https://github.com/wekan/wekan/issues/532) - -Email to work on already working Heroku: Use 3rd party email like SendGrid, update process.env.MAIL_URL , -change from email at Accounts.emailTeamplates.from , new file in server folder called smtp.js on code -`Meteor.startup(function () });` . TODO: Test and find a way to use API keys instead. - -[heroku_button]: https://www.herokucdn.com/deploy/button.png -[heroku_deploy]: https://heroku.com/deploy?template=https://github.com/wekan/wekan/tree/devel \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/Metal.md b/docs/Platforms/Propietary/Cloud/Metal.md deleted file mode 100644 index 0695a0fdd..000000000 --- a/docs/Platforms/Propietary/Cloud/Metal.md +++ /dev/null @@ -1,52 +0,0 @@ -https://blog.wekan.team/2019/06/wekan-on-raspi3-and-arm64-server-now-works-and-whats-next-with-cncf/ - -https://github.com/cncf/cluster/issues/45 - -CNCF Packet is now part of Equinix Metal. - -## Equinix Metal Console - -https://console.equinix.com - -## Ubuntu Reboot Fix - -https://gist.github.com/vielmetti/dafb5128ef7535c218f6d963c5bc624e - -``` -sudo apt-get update - -sudo apt-get install grub2-common - -sudo grub-install --bootloader-id=ubuntu -``` - -Failure to reboot - -If an affected system is rebooted, it might not come back online. Instead, the [serial over SSH](https://metal.equinix.com/developers/docs/resilience-recovery/serial-over-ssh/) or SOS console will show the system at the GRUB prompt. - -To recover from this condition, log in to the SOS console, which will connect you to GRUB. Then issue the following command: -``` -grub> configfile ($root)/EFI/GRUB/grub.cfg -``` -The device will load the correct boot sequence and return to service. - -## SSH SOS fix - -https://osxdaily.com/2022/12/22/fix-ssh-not-working-macos-rsa-issue/ - -How to Fix SSH Not Working with RSA Signatures on MacOS Ventura - -We’re going to modify the ssh_config file to allow for RSA host key again, here’s how to do this. - -Open the Terminal (via Spotlight or through the Utilities folder) and enter the following command string: -``` -sudo nano /etc/ssh/ssh_config -``` -You’ll need to authenticate with the admin password. - -Scroll all the way to the bottom of the ssh_config file and then add the following lines to the bottom of ssh_config: -``` -HostkeyAlgorithms +ssh-rsa -PubkeyAcceptedAlgorithms +ssh-rsa -``` -Hit Control+O to save, and Control+X to exit. diff --git a/docs/Platforms/Propietary/Cloud/OVH.md b/docs/Platforms/Propietary/Cloud/OVH.md deleted file mode 100644 index 4ae7adb96..000000000 --- a/docs/Platforms/Propietary/Cloud/OVH.md +++ /dev/null @@ -1,3 +0,0 @@ -Currently only way is to get Wekan working at OVH is [install from source](Source). - -OVH and Kimsufi servers have restricted OVH kernels, so you can't run Snap or Docker. \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/OpenVZ.md b/docs/Platforms/Propietary/Cloud/OpenVZ.md deleted file mode 100644 index a92497c17..000000000 --- a/docs/Platforms/Propietary/Cloud/OpenVZ.md +++ /dev/null @@ -1,3 +0,0 @@ -Only [install from Source](Source) works. - -OpenVZ does usually have 2.x kernel that would [support Snap](https://github.com/wekan/wekan-snap/issues/30) or [Docker](Docker). \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/PikaPods.md b/docs/Platforms/Propietary/Cloud/PikaPods.md deleted file mode 100644 index 095b9feea..000000000 --- a/docs/Platforms/Propietary/Cloud/PikaPods.md +++ /dev/null @@ -1,3 +0,0 @@ -Instantly run WeKan on [PikaPods.com](https://www.pikapods.com): - -[![Run on PikaPods](https://wekan.github.io/hosting/pikapods.svg)](https://www.pikapods.com/pods?run=wekan) \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/RepoCloud.md b/docs/Platforms/Propietary/Cloud/RepoCloud.md deleted file mode 100644 index fc07e6349..000000000 --- a/docs/Platforms/Propietary/Cloud/RepoCloud.md +++ /dev/null @@ -1,3 +0,0 @@ -https://repocloud.io - -[![Deploy on RepoCloud](RepoCloud.svg)](https://repocloud.io/details/?app_id=34) diff --git a/docs/Platforms/Propietary/Cloud/RepoCloud.svg b/docs/Platforms/Propietary/Cloud/RepoCloud.svg deleted file mode 100644 index d1d128c4d..000000000 --- a/docs/Platforms/Propietary/Cloud/RepoCloud.svg +++ /dev/null @@ -1,11 +0,0 @@ - - New Project - - - - - - - \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/Scalingo.md b/docs/Platforms/Propietary/Cloud/Scalingo.md deleted file mode 100644 index 7c196e6a6..000000000 --- a/docs/Platforms/Propietary/Cloud/Scalingo.md +++ /dev/null @@ -1,4 +0,0 @@ -[![Deploy to Scalingo][scalingo_button]][scalingo_deploy] - -[scalingo_button]: https://cdn.scalingo.com/deploy/button.svg -[scalingo_deploy]: https://my.scalingo.com/deploy?source=https://github.com/wekan/wekan#master \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/Uberspace.md b/docs/Platforms/Propietary/Cloud/Uberspace.md deleted file mode 100644 index 4bb27e41a..000000000 --- a/docs/Platforms/Propietary/Cloud/Uberspace.md +++ /dev/null @@ -1,175 +0,0 @@ -# NEWEST: - -[UberLab/Uberspace 7 Manual: Wekan](https://lab.uberspace.de/guide_wekan.html) - ([Source](https://github.com/wekan/wekan/issues/2009#issuecomment-817010524)) - -*** - -# OLD: - -**NOTE**: -- [Newest Node/Mongo/Meteor versions](https://github.com/wekan/wekan/blob/main/Dockerfile). -- For x64 wekan-VERSION.zip is at https://releases.wekan.team and some related install info https://github.com/wekan/wekan/wiki/Raspberry-Pi - -**Purpose**: Install latest Wekan release on [Uberspace](https://uberspace.de/) 6 and run as [daemontools](https://cr.yp.to/daemontools/faq/create.html) service in local userspace. - -This script installs Wekan on a fresh Uberspace 6. It setup Node 4, MongoDB, a Port, installs Wekan and starts it as a service. It's tested with Wekan versions 0.32 and 0.63. - -You have two Options to use it. - -# Option 1: -You can run the commands of the following script step-by-step in the shell. - -At first step set the SMTP-Password variable. Replace the `$1` with the password in that way `SMTP_PASS="smtp_password"` and continue line-by-line. - -# Option 2: -Or you can run it automatically. -* Save it as script in file `install_wekan.sh` -* Make it executable `chmod +x install_wekan.sh` -* And run it. Pass the SMTP-Password as command line parameter `./install_wekan.sh smtp_password`. - -## ./install_wekan.sh -``` -#!/bin/sh -## -## Usage: ./install_wekan.sh SMTP-password -## -## Draft -## Install Wekan (v0.63) on Uberspace 6 by Noodle / Chris -## -## Sources: -## https://github.com/wekan/wekan/wiki/Install-and-Update#manual-installation-steps -## https://wiki.uberspace.de/database:mongodb -## https://wiki.uberspace.de/development:nodejs -## https://wiki.uberspace.de/system:daemontools -## https://github.com/wekan/wekan/issues/907 - - -## Set SMTP password -# SMTP_PASS="xxxxxxxxxx" - -SMTP_PASS="$1" - - -##################### -### Setup Node.js ### -##################### - -cat <<__EOF__ > ~/.npmrc -prefix = $HOME -umask = 077 -__EOF__ - -echo 'export PATH=/package/host/localhost/nodejs-4/bin:$PATH' >> ~/.bash_profile -source ~/.bash_profile - - -##################### -### Setup MongoDB ### -##################### - -test -d ~/service || uberspace-setup-svscan -TEMPMDB="$(uberspace-setup-mongodb)" - -MONGO_USER="${USER}_mongoadmin" -MONGO_PORT="$(echo ${TEMPMDB} | grep -E -o 'm#:\s[0-9]{5}\sUs' | cut -d' ' -f 2)" -MONGO_PASS="$(echo ${TEMPMDB} | grep -E -o 'rd:\s.+\sTo\sconn' | cut -d' ' -f 2)" - -echo -e "MONGO_USER: ${MONGO_USER} \nMONGO_PORT: ${MONGO_PORT} \nMONGO_PASS: ${MONGO_PASS}" - - -############################ -### Setup Websocket Port ### -############################ - -export FREE_PORT="$(uberspace-add-port --protocol tcp --firewall | grep -E -o '[0-9]{5}')" - -echo "FREE_PORT: ${FREE_PORT}" - - -################### -### Setup Wekan ### -################### - -## Issue #907 - Port must be speccified in root url, when Version > 0.10.1 -MONGO_URL="mongodb://${MONGO_USER}:${MONGO_PASS}@127.0.0.1:${MONGO_PORT}/wekan?authSource=admin" -ROOT_URL="http://${USER}.${HOSTNAME}:${FREE_PORT}/" -MAIL_URL="smtp://${USER}:${SMTP_PASS}@${HOSTNAME}:587/" -MAIL_FROM="${USER}@${HOSTNAME}" -PORT="${FREE_PORT}" - -echo -e "MONGO_URL: ${MONGO_URL} \nPORT: ${PORT} \nROOT_URL: ${ROOT_URL} \nMAIL_URL ${MAIL_URL} \nMAIL_FROM: ${MAIL_FROM}" - - -##################### -### Install Wekan ### -##################### - -mkdir ~/wekan && cd ~/wekan - -# Tested versions 0.32, 0.63 -WEKAN_VERSION=0.63 -curl -OL https://github.com/wekan/wekan/releases/download/v${WEKAN_VERSION}/wekan-${WEKAN_VERSION}.tar.gz && tar xzf wekan-${WEKAN_VERSION}.tar.gz && rm wekan-${WEKAN_VERSION}.tar.gz - -cd ~/wekan/bundle/programs/server && npm install -cd ~ - - -##################### -### Setup Service ### -##################### - -cat <<__EOF__ > ~/etc/wekan-setup -#!/bin/bash -export MONGO_URL=${MONGO_URL} -export ROOT_URL=${ROOT_URL} -export MAIL_URL=${MAIL_URL} -export MAIL_FROM=${MAIL_FROM} -export PORT=${PORT} -__EOF__ - -cat <<__EOF__ > ~/etc/wekan-start -#!/bin/bash -source ~/etc/wekan-setup -exec node ~/wekan/bundle/main.js -__EOF__ - -chmod 700 ~/etc/wekan-setup -chmod a+x ~/etc/wekan-start - - -## Init & Start as servcie -uberspace-setup-service wekan ~/etc/wekan-start - -## Setup & Start in bg for debugging -# source ~/etc/wekan-setup && node ~/wekan/bundle/main.js & - - -##################### -### Finish ### -##################### - -echo -e "\n Login: ${ROOT_URL} \n\n" -``` - -# Control Wekan Service -Basic control of the Wekan service: -* Stop the service: `svc -d ~/service/wekan` -* Start the service: `svc -u ~/service/wekan` -* Keep an eye on the log while running the service: `tailf ~/service/wekan/log/main/current` - -More about [daemontools](https://cr.yp.to/daemontools/faq/create.html). - - -# Uninstall Wekan -To remove Wekan from your uberspace you have to do the following steps. -* Stop and remove the service. -`uberspace-remove-service -s wekan` -* Remove the complete data. -``` -mongo admin --port $MONGO_PORT -u $MONGO_USER -p $MONGO_PASS -use wekan -db.dropDatabase() -exit -``` -* Remove the installation. -`rm -Rf ~/wekan/ ~/etc/wekan-*` diff --git a/docs/Platforms/Propietary/Cloud/Vultr.md b/docs/Platforms/Propietary/Cloud/Vultr.md deleted file mode 100644 index b46d592fb..000000000 --- a/docs/Platforms/Propietary/Cloud/Vultr.md +++ /dev/null @@ -1 +0,0 @@ -https://www.vultr.com/docs/install-wekan-on-debian-10 \ No newline at end of file diff --git a/docs/Platforms/Propietary/Mac.md b/docs/Platforms/Propietary/Mac.md deleted file mode 100644 index 25488deee..000000000 --- a/docs/Platforms/Propietary/Mac.md +++ /dev/null @@ -1,143 +0,0 @@ -Wekan logo - -Powered by MacStadium - -## ChangeLog -- Previously: - - Below info about Wekan on Mac x64 - - [Wekan PWA on iOS Safari](PWA) - - Many mobile web fixes -- 2021-05-14 Wekan maintainer [xet7](https://github.com/xet7) got donated hardware [OpenSource MacStadium](https://www.macstadium.com/opensource) remote access to Mac Mini M1 that has 16 GB RAM and 1 TB SSD. -- 2021-05-15 xet7 bought Apple Developer access for 99 euro/year. Trying to figure out how to sign some test app for iPhone, did not get it working yet. -- 2021-05-16 Instructions added below by xet7 about how to run Wekan Server Node.js/MongoDB for development on M1. -- 2021-06-21 xet7 got iPhone 12 mini for testing prototypes locally. Some testing of coding tools on M1. -- 2022-02-12 [Enable drag handles on iPad landscape mode automatically](https://github.com/wekan/wekan/issues/3755). -- TODO: - - Trying to find out some way how to make macOS App Store and iOS iPhone/iPad App Store versions of Wekan. - -## Docker: Easiest for install and use - -1. Install Docker Desktop for Mac and start it. Then: - -``` -git clone https://github.com/wekan/wekan - -cd wekan -``` -2. Look what is your Mac IP address: -``` -ifconfig | grep broadcast | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1 -``` -3. Edit docker-compose.yml-arm64 -``` -nano docker-compose.yml-arm64 -``` -4. Change ROOT_URL to be your IP address, like http://192.168.0.100 : - -https://github.com/wekan/wekan/blob/main/docker-compose.yml-arm64#L185 - -5. Save and exit: Cmd-o Enter Cmd-x. - -6. Start WeKan: -``` -docker-compose up -d -f docker-compose.yml-arm64 -``` -7. At same local network, use any webbrowser at any computer/smartphone/TV to browse to your WeKan IP address, like http://192.168.0.100 - -## Mac M1 Wekan development - -Meteor includes Node.js and MongoDB version, when developing. But if not developing, those can be installed like below in Bundle section. - -1) Install rosetta: -``` -softwareupdate --install-rosetta --agree-to-license -``` -2) Clone Wekan: -``` -git clone https://github.com/wekan/wekan -cd wekan -``` -3) Install Meteor etc -``` -curl https://install.meteor.com/ | arch -x86_64 sh -arch -x86_64 meteor npm install --save @babel/runtime -``` -3a) Run Meteor on localhost port 4000: -``` -WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false arch -x86_64 meteor --port 4000 -``` -3b) Run Meteor on computer IP address on local network port 4000: -``` -WRITABLE_PATH=.. ROOT_URL=http://192.168.0.100:4000 PORT=4000 WITH_API=true RICHER_CARD_COMMENT_EDITOR=false arch -x86_64 meteor --port 4000 -``` - -## Bundle for non-devepment use with start-wekan.sh - -1. Download Node.js from https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4 , and MongoDB 6.x from https://www.mongodb.com/try/download/community -2. Download wekan-VERSIONNUMBER.zip from https://releases.wekan.team -3. Unzip file you downloaded at step 2. There will be directory called `bundle`. -4. Download [start-wekan.sh script](https://raw.githubusercontent.com/wekan/wekan/master/start-wekan.sh) to directory `bundle` and set it as executeable with `chmod +x start-wekan.sh` -5. Install Node.js version mentioned at https://wekan.github.io Download section -6. Install MongoDB version mentioned at https://wekan.github.io Download section [with Mac install info](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/) -7. Edit `start-wekan.sh` so that it has for example: -``` -export WRITABLE_PATH=.. -export ROOT_URL=http://localhost:2000 -export PORT=2000 -export MONGO_URL=mongodb://127.0.0.1:27017/wekan -``` -[More info about ROOT_URL](Settings) - -8. Edit `start-wekan.sh` so that it starts in bundle directory command `node main.js` - -## Build bundle from source and develop Wekan - -1. Install XCode -2. [With steps 3-6 fork and clone your fork of Wekan](https://github.com/wekan/wekan-maintainer/wiki/Developing-Wekan-for-Sandstorm#3-fork-wekan-and-clone-your-fork) - -## Docker - -Note: With Docker, please don't use latest tag. Only use release tags. See https://github.com/wekan/wekan/issues/3874 - -- [Repair Docker](Repair-Docker) -- [Docker](Docker) -- [Docker Dev Environment](https://github.com/wekan/wekan-dev) - -If you don't need to build Wekan, use prebuilt container with docker-compose.yml from https://github.com/wekan/wekan like this: -``` -docker-compose up -d -``` - -If you like to build from source, clone Wekan repo: -``` -git clone https://github.com/wekan/wekan -``` -Then edit docker-compose.yml with [these lines uncommented](https://github.com/wekan/wekan/blob/main/docker-compose.yml#L132-L142) this way: -``` - #------------------------------------------------------------------------------------- - # ==== BUILD wekan-app DOCKER CONTAINER FROM SOURCE, if you uncomment these ==== - # ==== and use commands: docker-compose up -d --build - build: - context: . - dockerfile: Dockerfile - args: - - NODE_VERSION=${NODE_VERSION} - - METEOR_RELEASE=${METEOR_RELEASE} - - NPM_VERSION=${NPM_VERSION} - - ARCHITECTURE=${ARCHITECTURE} - - SRC_PATH=${SRC_PATH} - - METEOR_EDGE=${METEOR_EDGE} - - USE_EDGE=${USE_EDGE} - #------------------------------------------------------------------------------------- -``` -Then you can build Wekan with -``` -docker-compose up -d --build -``` - -## macOS Finder: Show hidden files - -Q: Is there file manager, that shows all files and directories that are at directory? Or should I use mc at zsh? For example, if there is directory /Users/username/repos, it is not visible in Finder, until I move it to /Users/username/Downloads/repos - -A: I just add my home directory to the list of favorites. You can also just go to any directory you want with CMD+Shift+G . -CMD+Shift+Period toggles hidden files on and off \ No newline at end of file diff --git a/docs/Platforms/Propietary/Qnap-NAS.md b/docs/Platforms/Propietary/Qnap-NAS.md deleted file mode 100644 index 0d0cf87da..000000000 --- a/docs/Platforms/Propietary/Qnap-NAS.md +++ /dev/null @@ -1,8 +0,0 @@ -## Qnap TS-469L - -Related older info: https://github.com/wekan/wekan/issues/1180 - -Use wekan-VERSION.zip bundle from https://releases.wekan.team - -with these instructions: https://github.com/wekan/wekan/wiki/Raspberry-Pi - diff --git a/docs/Platforms/Propietary/Windows/Install-Wekan-from-source-on-Windows.md b/docs/Platforms/Propietary/Windows/Install-Wekan-from-source-on-Windows.md deleted file mode 100644 index 03e147446..000000000 --- a/docs/Platforms/Propietary/Windows/Install-Wekan-from-source-on-Windows.md +++ /dev/null @@ -1,103 +0,0 @@ -# Newest Windows info here - -https://github.com/wekan/wekan/wiki/Offline - -## OLD INFO BELOW, DOES NOT WORK - -Also see: [Excel and VBA](Excel-and-VBA) - -a) Lowest resource usage: [Windows Subsystem for Linux, build from source](https://github.com/wekan/wekan/issues/2066#issuecomment-468328001) - -b) Docker for Windows, [prebuilt without --build option, or build from source](https://github.com/wekan/wekan-dev/issues/12#issuecomment-468657290) - -*** - - -### Source install required dependencies - -Questions, comments to old closed issue about nexe https://github.com/wekan/wekan/issues/710 - -Beginnings of build and run scripts, please add PRs for additional fixes etc: -- https://github.com/wekan/wekan/blob/edge/rebuild-wekan.bat -- https://github.com/wekan/wekan/blob/edge/start-wekan.bat - -Script for using MongoDB portable: -- https://github.com/wekan/wekan/issues/883#issuecomment-283755906 - -Requirements: -- Install [MeteorJS](https://www.meteor.com/) -- Install [NodeJS](https://nodejs.org/en/download/releases/) (Optional but recommended) -- Install Python 2.7 (Installation through Chocolatey(`choco install python2 -y`) is recomended) -- If you are on windows 7, Install .NET 4.5.1+ -- **MUST MAKE SURE TO** Install [Visual C++ 2015 Build Tools](http://landinghub.visualstudio.com/visual-cpp-build-tools) or run this command from an elevated PowerShell or CMD.exe (run as Administrator) to install, `npm install --global --production windows-build-tools` -- Install Git -- Restart Windows (Optional but recommended) - -From this point, it's advised to use **Git bash** to run commands to make sure everything works as is, but if you had trouble accessing meteor or npm commands via Git bash, windows CMD will most likely work without any problem. - -Inside the Git Bash, run these commands: - -``` -npm config -g set msvs_version 2015 - -meteor npm config -g set msvs_version 2015 -``` - -# Running Wekan -- Clone the repo (`https://github.com/wekan/wekan`) -- Browse the wekan directory and run `meteor`, -- If you see any error regarding **xss**, do `meteor npm i --save xss` to install xss. -- Set the Environment variables, or create a .env file with the following data. -- open your browser, make changes and see it reflecting real-time. - -## Example of setting environment variables - -You need to have start-wekan.bat textfile with that content of those environment variables. -In Windows, .bat files use DOS style of setting varibles. - -Similar file for Linux bash is here: -https://github.com/wekan/wekan-maintainer/blob/master/virtualbox/start-wekan.sh - -ROOT_URL examples are here: -https://github.com/wekan/wekan/releases - -``` -SET MONGO_URL=mongodb://127.0.0.1:27017/wekan -SET ROOT_URL=http://127.0.0.1/ -SET MAIL_URL=smtp://user:pass@mailserver.example.com:25/ -SET MAIL_FROM=admin@example.com -SET PORT=8081 -``` - -## Example contents of `.env` file -``` -MONGO_URL=mongodb://127.0.0.1:27017/wekan -ROOT_URL=http://127.0.0.1/ -MAIL_URL=smtp://user:pass@mailserver.example.com:25/ -MAIL_FROM=admin@example.com -PORT=8081 -``` - -That URL format is: mongodb://ip-address-of-server:port/database-name - -You can access MongoDB database with GUI like Robo 3T https://robomongo.org . -There is no username and password set by default. - -## Overview, -Here is how it looks like, -``` -git clone https://github.com/wekan/wekan -cd wekan - -meteor npm install --save xss -meteor -``` - -![](https://i.imgur.com/aNVBhj5.png) - -# FAQ -### I am getting `node-gyp` related issues. -Make sure to install all required programs stated here, https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows#setup-required-dependencies - -### I am getting `Error: Cannot find module 'fibers'` related problem. -Make sure to run the command `meteor` instead of `node`. \ No newline at end of file diff --git a/docs/Platforms/Propietary/Windows/Install-Windows.md b/docs/Platforms/Propietary/Windows/Install-Windows.md deleted file mode 100644 index 7cb525e40..000000000 --- a/docs/Platforms/Propietary/Windows/Install-Windows.md +++ /dev/null @@ -1,50 +0,0 @@ -## 1. Get Windows 8/10/11 key, if there is no key sticker - -1.1. Get USB stick (USB2 works better than USB3) that is 8 GB or a little bigger (not too big like 128 GB) - -1.2. Download Rufus https://rufus.ie (or BalenaEtcher https://etcher.balena.io) - -1.3. Download some live distro, for example: - -- newest Linux Mint Mate https://linuxmint.com , .iso size about 4 GB -- UPupBB https://sourceforge.net/projects/zestypup/files/ , .iso size about 340 MB -- Puppy Linux https://puppylinux-woof-ce.github.io/ , .iso small download about 400 MB - -1.4. With Rufus of BalenaEtcher, write .iso to USB stick - -1.5. Boot from USB Linux Mint, usually after power on F8 key is boot menu, or F12 - -Windows 8 and Windows 10/11 OEM product key from BIOS when using Linux - -``` -sudo cat /sys/firmware/acpi/tables/MSDM | tail -1 -``` - -## 2. Create bootable Windows Install USB stick - -2.1. Download Rufus https://rufus.ie - -2.2. Download Windows, big download - -https://www.microsoft.com/software-download/windows11 - -https://www.microsoft.com/fi-fi/software-download/windows10ISO - -2.3. If you are installing Windows to VirtualBox, newest VirtualBox has TPM 2.0 and Secure Boot emulation. - -Win11 on VirtualBox may have some visual transparency bugs, that updates to VirtualBox -display drivers may fix later. Earlier OS shows correctly. - -2.4. If you are installing Windows 11 to computer that does not support Windows 11 - -Try adding some Windows Registry keys: -https://blogs.oracle.com/virtualization/post/install-microsoft-windows-11-on-virtualbox - -2.5. Boot from USB Instal Windows stick, usually after power on F8 key is boot menu, or F12 - -2.6. If using same license key at dual boot: - -- Win11 -- Ubuntu host, VirtualBox Win11 Guest - -If some activation phone call asks in how many computers you use license at, answer 1. \ No newline at end of file diff --git a/docs/Platforms/Propietary/Windows/Offline.md b/docs/Platforms/Propietary/Windows/Offline.md deleted file mode 100644 index 41808d969..000000000 --- a/docs/Platforms/Propietary/Windows/Offline.md +++ /dev/null @@ -1,181 +0,0 @@ -Also see: [Windows](Windows) - -[Other CPU/OS On-Premise WeKan install](https://github.com/wekan/wekan/wiki/Raspberry-Pi) - -## Wekan Windows 64bit version On-Premise - -INFO ABOUT SETTINGS: https://github.com/wekan/wekan/issues/5591#issuecomment-2503681293 - -This is without container (without Docker or Snap). - -Right click and download files 1-4: - -1. [wekan-7.84-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.84/wekan-7.84-amd64-windows.zip) - -2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe) - -3. [mongodb-windows-x86_64-6.0.20-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.20-signed.msi) - -4. [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/main/start-wekan.bat) - -5. Copy files from steps 1-4 with USB stick or DVD to offline Windows computer - -6. Double click `mongodb-windows-x86_64-6.0.20-signed.msi` . In installer, uncheck downloading MongoDB compass. - -7. Unzip `wekan-7.84-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files: - -``` -bundle (directory) - |_ start-wekan.bat (downloaded file) - |_ node.exe (downloaded file) - |_ main.js (extracted file) -``` -8. Edit `start-wekan.bat` with Notepad. There add [Windows computer IP address](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9) , like this, then Wekan will be at http://IP-ADDRESS-HERE/sign-in , for example http://192.168.0.100/sign-in but your different IP address. Add there wekan server computer IP address, not localhost. `node.exe main.js` is at bottom of `start-wekan.bat`, change there longer filename: -``` -SET ROOT_URL=http://IP-ADDRESS-HERE - -SET PORT=80 - -node.exe main.js -``` -If there is already some webserver at port 80, change to other port: -``` -REM # Writable path required to exist and be writable for attachments to migrate and work correctly -SET WRITABLE_PATH=.. - -SET ROOT_URL=http://IP-ADDRESS-HERE:2000 - -SET PORT=2000 -``` -Then Wekan will be at http://IP-ADDRESS-HERE:2000/sign-in , for example http://192.168.0.100/sign-in , but with your different IP address. - -9. Double click `start-wekan.bat` to run it. Give permission to network. If it does not work, try instead with right click, Run as Administrator. - -10. For mobile devices, you can [create PWA app icon](PWA) using that http://IP-ADDRESS-HERE:2000/sign-in - -RELATED INFO: -- Windows 2022 server example https://github.com/wekan/wekan/issues/5084 -- Other settings example https://github.com/wekan/wekan/issues/4932 - -## Docker WeKan Offline - - -At Internet connected computer, download: - -1. Docker for Windows -2. docker-compose.yml from https://github.com/wekan/wekan -3. `docker-compose up -d` at Internet connected computer -4. Save wekan-app and wekan-db containers to files https://docs.docker.com/engine/reference/commandline/save/ - -At Offline Windows computer: - -1. Install Docker for Windows -2. Load `wekan-app` container from file https://docs.docker.com/engine/reference/commandline/load/ -3. Check what is ID of `wekan-app` container with `docker images` -4. Change at `docker-compose.yml` wekan-app contaier `image:gc....` to `image:ID` where ID from step 3 above -5. Do steps 2-4 also for `wekan-db` container -6. `docker-compose up -d` - -## WeKan Updates - -1. Updating only WeKan. Not updating Node.js and MongoDB. - -1.1. Make backup, look at steps 2.1. and 2.2 below. - -1.2. Download newest WeKan bundle .zip file from https://github.com/wekan/wekan/releases - -1.3. Replace old bundle with new from that .zip file. - -1.4. Start WeKan with `start-wekan.sh` - -2. If it does not work, you maybe need to update Node.js and MongoDB. - -2.1. Backup part 1/2. Try mongodump to backup database like this command. If mongodump command does not exist, download MongoDB Tools from https://www.mongodb.com/try/download/database-tools . Make backup: -``` -mongodump -``` -Backup will be is in directory `dump`. More info at https://github.com/wekan/wekan/wiki/Backup - -2.2. Backup part 2/2. If there is files at `WRITABLE_PATH` directory mentioned at `start-wekan.bat` of https://github.com/wekan/wekan , also backup those. For example, if there is `WRITABLE_PATH=..`, it means previous directory. So when WeKan is started with `node main.js` in bundle directory, it may create in previous directory (where is bundle) directory `files`, where is subdirectories like `files\attachments`, `files\avatars` or similar. - -2.3. Check required compatible version of Node.js from https://wekan.github.io `Install WeKan ® Server` section and Download that version node.exe for Windows 64bit from https://nodejs.org/dist/ - -2.4. Check required compatible version of MongoDB from https://wekan.github.io `Install WeKan ® Server` section and Download that version Windows MongoDB .msi installer from https://www.mongodb.com/try/download/community - -2.5. Remove old Node.js and MongoDB (at Windows, Control Panel / Add Remove Programs). - -2.6. Install newest Node.js and MongoDB. - -2.7. Restore database with mongorestore, like this: -``` -mongorestore --drop -``` -If there are errors, try this instead: -``` -mongorestore --drop --noIndexRestore -``` -2.8. Start wekan with `start-wekan.bat` - -2.9. If WeKan does not start with your old start-wekan.bat, download newest [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/master/start-wekan.bat) and look are there differences to your old start-wekan.bat . For example, with this command, could work on WSL or PowerShell or Linux or after installing git: -``` -diff old-start-wekan.bat start-wekan.bat -``` - -## b) How to fix errors on Linux bundle to create Windows bundle - -Download Linux bundle wekan-VERSION.zip from from https://github.com/wekan/wekan/releases or https://releases.wekan.team/ - -``` -npm install -g node-pre-gyp - -cd bundle\programs\server\npm\node_modules\meteor\accounts-password - -npm remove bcrypt - -npm install bcrypt -``` - -## c) WSL - -[WSL](WSL) - -## d) Wekan to VirtualBox Ubuntu offline - -1. Install newest [VirtualBox](https://www.virtualbox.org/) - -2. Install newest [Ubuntu 64bit](https://ubuntu.com) to VirtualBox - -3. Install Wekan [Snap](https://github.com/wekan/wekan-snap/wiki/Install) version to Ubuntu with these commands: -``` -sudo snap install wekan -``` - -4. Shutdown Ubuntu - -5. At VirtualBox menu, export appliance to `wekan.ova` file - -6. Copy `virtualbox-install.exe` and `wekan.ova` to offline computer - -7. At offline computer, install virtualbox and import wekan.ova - -8. Set virtualbox network to bridged: -https://github.com/wekan/wekan/wiki/virtual-appliance#how-to-use - -9. Start VirtualBox and Ubuntu - -10. In Ubuntu, type command: -``` -ip address -``` -=> it will show Ubuntu IP address - -11. In Ubuntu Terminal, type with your IP address, -at below instead of 192.168.0.100: -``` -sudo snap set wekan root-url='http://192.168.0.100' - -sudo snap set wekan port='80' -``` - -12. Then at local network Wekan is at: -http://192.168.0.100 diff --git a/docs/Platforms/Propietary/Windows/WSL.md b/docs/Platforms/Propietary/Windows/WSL.md deleted file mode 100644 index e8748eda7..000000000 --- a/docs/Platforms/Propietary/Windows/WSL.md +++ /dev/null @@ -1,69 +0,0 @@ -https://learn.microsoft.com/en-us/windows/wsl/install - -``` -wsl --install - -wsl --list --online - -wsl --install -d Ubuntu-22.04 -``` - -https://ubuntu.com/blog/ubuntu-wsl-enable-systemd - -## If GitHub problems in WSL - -If you have these problems in WSL: -``` -~/repos/wekan$ git pull -ssh: Could not resolve hostname github.com: Name or service not known -fatal: Could not read from remote repository. - -Please make sure you have the correct access rights -and the repository exists. -``` -Then edit `/etc/wsl.conf`: -``` -sudo nano /etc/wsl.conf -``` -There have these: -``` -[boot] -systemd=true - -[network] -generateResolvConf = false -``` -Then edit `/etc/resolf.conf`: -``` -sudo nano /etc/resolv.conf -``` -There have for example this, CloudFlare nameserver: -``` -nameserver 1.1.1.1 -``` -Then edit Windows Internet network settings. There: -- Have only IPv4 enabled (not IPv6) -- DNS: 1.1.1.1 with HTTPS Automatic encryption settings. - -## WeKan Snap amd64 on WSL2 - -1. At https://ubuntu.com/blog/ubuntu-wsl-enable-systemd read `How to enable systemd in Ubuntu WSL` to install WSL2 and SystemD. - -2. `sudo snap install wekan --channel=latest/candidate` - -3. Your Windows computer IP address, change there: `sudo snap set wekan root-url='http://192.168.0.200'` - -4. Your Windows compoter webserver port: `sudo snap set wekan port='80'` - -5. Use Chromium Edge (or Chromium/Firefox/Safari based browsers) to browse http://192.168.0.200 (your computer IP address there) - -6. For mobile devices, make PWA icon like https://github.com/wekan/wekan/wiki/PWA - -7. Optional: For SSL/TLS, look at Caddy/Apache/Nginx configs at https://github.com/wekan/wekan/wiki right menu, and https://github.com/wekan/wekan/wiki/Settings - -## Related - -- https://github.com/wekan/wekan/wiki/Offline -- https://ubuntu.com/blog/ubuntu-wsl-enable-systemd -- https://github.com/wekan/wekan-snap/wiki/Install -- https://github.com/wekan/wekan/wiki/Windows \ No newline at end of file diff --git a/docs/Platforms/Propietary/Windows/Windows.md b/docs/Platforms/Propietary/Windows/Windows.md deleted file mode 100644 index 478e96b23..000000000 --- a/docs/Platforms/Propietary/Windows/Windows.md +++ /dev/null @@ -1,262 +0,0 @@ -Use these instructions instead: [Offline](Offline) - - -*** - -Windows Updates: - - -1) WuMgr: Windows Update but Not Automatic - -- https://github.com/DavidXanatos/wumgr - -- https://news.ycombinator.com/item?id=34175466 - -2) Legacy Update - -- https://legacyupdate.net - -- https://news.ycombinator.com/item?id=34019900 - -3) Win7 Extended Security Updates Ending - -- https://news.ycombinator.com/item?id=34307029 -- How to create Win7.iso with all updates - - https://www.youtube.com/watch?v=l5ADP-VZMsw - - https://en.wikipedia.org/wiki/Windows_Update_MiniTool - -4) Snappy Driver installer - -- https://sdi-tool.org - -*** - - -## OLD BELOW: a) Bundle with Windows Node+MongoDB - -This has **highest performance and lowest RAM usage**, because there is no virtualization like Docker, Windows Subsystem for Linux, etc. Wekan is run with Windows native version of Node.js and MongoDB, directly at Windows filesystem. - -1. If you have important data in Wekan, do [backup](Backup). - -2. Install newest Node.js LTS v12.x for Windows from https://nodejs.org . When installing, checkmark "Install additional tools" that will install also Chocolatey etc. - -3. Run cmd.exe as Administrator, and there type: -``` -choco install -y mongodb -``` - -4. Download and newest Wekan bundle wekan-x.xx.zip from https://releases.wekan.team - -5. Unzip wekan-x.xx.zip, it has directory name `bundle` - -6. Download [start-wekan.bat](https://raw.githubusercontent.com/wekan/wekan/master/start-wekan.bat) to your bundle directory. Default settins are: `ROOT_URL=http://localhost` and `PORT=80`, so it works only in local [compatible browser](Browser-compatibility-matrix). You can edit [ROOT_URL](Settings) to be or `http://YOUR-IP-ADDRESS` so it works on local network with `http://YOUR-IP-ADDRESS` . - -7. Start Wekan in cmd.exe as Administrator: -``` -cd bundle -start-wekan.bat -``` - -8. Start MongoDB cmd.exe as Administrator: -``` -net start mongodb -``` -You can also stop MongoDB this way: -``` -net stop mongodb -``` -When you have MongoDB running, you can connect to database with nosqlbooster GUI, to localhost 27017. - -You can create backup of MongoDB database with this mongodump command, that is similar to mysqldump: -``` -"C:\Program Files\MongoDB\Server\4.2\bin\mongodump" -``` -It will create subdirectory `dump` that contains backup. You can restore with: -``` -"C:\Program Files\MongoDB\Server\4.2\bin\mongorestore" -``` -You can connect to MongoDB CLI with this command: -``` -"C:\Program Files\MongoDB\Server\4.2\bin\mongo" -``` -There you can show databases. One MongoDB server can have many databases, similarly like MySQL server can have many databases created with MySQL `CREATE DATABASE` command: -``` -show dbs -``` -Then use Wekan database: -``` -use wekan -``` -List wekan database collections/tables: -``` -show collections -``` -Show content of users collection/table: -``` -db.users.find() -``` -Create new database: -``` -use testing -``` -Delete current database: -``` -db.dropDatabase() -``` -List databases again to show that database testing is not there anymore: -``` -show dbs -``` -Also see [Forgot Password](Forgot-Password) - -Exit MongoDB CLI: -``` -exit -``` -You should not backup Windows MongoDB RAW database files that are here, when you in File Explorer folder properties show hidden system files and file extensions: -``` -C:\ProgramData\MongoDB\data\db -``` -[More info about MongoDB](Export-from-Wekan-Sandstorm-grain-.zip-file) - -9. [Add users](Adding-users). - - -*** - -## b) [Docker](Docker) - -Note: With Docker, please don't use latest tag. Only use release tags. See https://github.com/wekan/wekan/issues/3874 - -[Repair Docker](Repair-Docker) - -If you don't need to build Wekan, use prebuilt container with docker-compose.yml from https://github.com/wekan/wekan like this: -``` -docker-compose up -d -``` - -If you like to build from source, clone Wekan repo: -``` -git clone https://github.com/wekan/wekan -``` -Then edit docker-compose.yml with [these lines uncommented](https://github.com/wekan/wekan/blob/main/docker-compose.yml#L132-L142) this way: -``` - #------------------------------------------------------------------------------------- - # ==== BUILD wekan-app DOCKER CONTAINER FROM SOURCE, if you uncomment these ==== - # ==== and use commands: docker-compose up -d --build - build: - context: . - dockerfile: Dockerfile - args: - - NODE_VERSION=${NODE_VERSION} - - METEOR_RELEASE=${METEOR_RELEASE} - - NPM_VERSION=${NPM_VERSION} - - ARCHITECTURE=${ARCHITECTURE} - - SRC_PATH=${SRC_PATH} - - METEOR_EDGE=${METEOR_EDGE} - - USE_EDGE=${USE_EDGE} - #------------------------------------------------------------------------------------- -``` -Then you can build Wekan with -``` -docker-compose up -d --build -``` - -## c) Windows Subsystem for Linux on Windows 10 -- [Install Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/wsl2-install) in PowerShell as Administrator `Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux` and reboot -- Install Ubuntu 18.04 from Windows Store - -If you don't need to build from source, download newest wekan-VERSION.zip from https://releases.wekan.team and unzip it. Then: -``` -sudo apt update -sudo apt install npm mongodb-server mongodb-clients -sudo npm -g install n -sudo n 12.16.1 -sudo npm -g install npm -``` -Then edit `start-wekan.sh` to start at correct port, ROOT_URL setting, and MONGO_URL to port 27017, cd to correct bundle directory where `node main.js` can be run, and then: -``` -./start-wekan.sh -``` -More info at https://github.com/wekan/wekan/wiki/Raspberry-Pi -- You could try to proxy from IIS SSL website to Wekan localhost port, for example when ROOT_URL=https://example.com and PORT=3001 , and you make IIS config that supports websockets proxy to Wekan http port 3001. - -If you need to build from source, do as above, and build Wekan with `wekan/rebuild-wekan.sh`. -After building, if you like to start meteor faster by excluding some parts, have rebuilds after file change, and test on local network devices, try with your computer IP address: -``` -WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://192.168.0.200:4000 meteor --exclude-archs web.browser.legacy,web.cordova --port 4000 -``` -## d) VirtualBox with Ubuntu 19.10 64bit - -Install Ubuntu to VirtualBox and then Wekan, for example Wekan Snap. - -Currently Snap works only when installed to Ubuntu 19.10 64bit running on VirtualBox VM. - -https://github.com/wekan/wekan-snap/wiki/Install - -[Related VM info how to expose port with bridged networking](Virtual-Appliance) - -[UCS has prebuilt VirtualBox VM](Platforms#production-univention-platform-many-apps-and-wekan) - -*** - -# BELOW: DOES NOT WORK - -## e) Probaby does not work - -[Install from source directly on Windows](Install-Wekan-from-source-on-Windows) to get Wekan running natively on Windows. [git clone on Windows has been fixed](https://github.com/wekan/wekan/issues/977). Related: [running standalone](https://github.com/wekan/wekan/issues/883) and [nexe](https://github.com/wekan/wekan/issues/710). - -## f) Install Meteor on Windows - does not build correctly, gives errors - -https://github.com/zodern/windows-meteor-installer/ - -``` -REM Install Chocolatey from -REM https://chocolatey.org/install -REM in PowerShell as Administrator - -Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) - -REM Install with cmd.exe or PowerShell as Administrator -REM - nodejs-lts, that is 12.x -REM - ndm, that is npm package manager for Windows - -choco install -y nodejs-lts ndm git - -REM Close and open cmd.exe or PowerShell as normal user. -REM Update npm: - -npm -g install npm - -REM Install meteor using https://github.com/zodern/windows-meteor-installer/ - -npm i -g @zodern/windows-meteor-installer - -REM Close and open cmd.exe or PowerShell as normal user. - -git clone https://github.com/wekan/wekan -cd wekan - -REM a) For development, available at local network, at your computer IP address. Does rebuild when code changes. - -SET WITH_API=true -SET RICHER_CARD_EDITOR=false -SET ROOT_URL=http://192.168.0.200:4000 -meteorz --port 4000 - -REM b) For development, available only at http://localhost:4000 . Does rebuild when code changes. - -SET WITH_API=true -SET RICHER_CARD_EDITOR=false -meteorz --port 4000 - -REM c) For production, after Wekan is built to "wekan/.build/bundle", -REM edit "start-wekan.bat" to "cd" to correct bundle directory to run "node main.js" -``` -## g) Snap - -[WSL](WSL) - -## Related - -[Linux stuff in Windows 10 part 1](https://cepa.io/2018/02/10/linuxizing-your-windows-pc-part1/) and [part 2](https://cepa.io/2018/02/20/linuxizing-your-windows-pc-part2/). diff --git a/docs/Secure-Boot.md b/docs/Secure-Boot.md deleted file mode 100644 index 1c1e7b97d..000000000 --- a/docs/Secure-Boot.md +++ /dev/null @@ -1 +0,0 @@ -https://arstechnica.com/security/2024/07/secure-boot-is-completely-compromised-on-200-models-from-5-big-device-makers/ \ No newline at end of file diff --git a/docs/Security-Disclosure.md b/docs/Security-Disclosure.md deleted file mode 100644 index 75fcab8e4..000000000 --- a/docs/Security-Disclosure.md +++ /dev/null @@ -1 +0,0 @@ -Moved to [SECURITY.md](https://github.com/wekan/wekan/blob/main/SECURITY.md) \ No newline at end of file diff --git a/docs/Stats/Burndown-and-Velocity-Chart.md b/docs/Stats/Burndown-and-Velocity-Chart.md deleted file mode 100644 index 40cf912b1..000000000 --- a/docs/Stats/Burndown-and-Velocity-Chart.md +++ /dev/null @@ -1,7 +0,0 @@ -[Discussion](https://github.com/wekan/wekan/discussions/4282) - -WeKan Python Burndown Chart: -- [Original](https://github.com/Gelmes/Wekan-Python-Burndown) -- [WeKan fork](https://github.com/wekan/Wekan-Python-Burndown) - -[WeKan Burndown Chart Chrome extension](https://chrome.google.com/webstore/detail/burndown-for-wekan/agdbocbobcbelnekjibocbilodjgopgh?) \ No newline at end of file diff --git a/docs/Stats/Gantt.md b/docs/Stats/Gantt.md deleted file mode 100644 index 8afe57856..000000000 --- a/docs/Stats/Gantt.md +++ /dev/null @@ -1,123 +0,0 @@ -# What is this? - -Original WeKan is MIT-licensed software. - -This different Gantt version here currently uses Gantt chart component that has GPL license, so this Wekan Gantt version is GPL licensed. - -Sometime later if that GPL licensed Gantt chart component will be changed to MIT licensed one, then that original MIT-licensed WeKan will get Gantt feature, and maybe this GPL version will be discontinued. - -# How to use - -[Source](https://github.com/wekan/wekan/issues/2870#issuecomment-721690105) - -At cards, both Start and End dates should be set (not Due date) for the tasks to be displayed. - -# Funding for more features? - -You can fund development of more features of Gantt at https://wekan.team/commercial-support, like for example: -- more of day/week/month/year views -- drag etc - -# Issue - -https://github.com/wekan/wekan/issues/2870 - -# Install - -Wekan GPLv2 Gantt version: -- https://github.com/wekan/wekan-gantt-gpl -- https://snapcraft.io/wekan-gantt-gpl -- https://hub.docker.com/repository/docker/wekanteam/wekan-gantt-gpl -- https://quay.io/wekan/wekan-gantt-gpl - -## How to install Snap - -[Like Snap install](https://github.com/wekan/wekan-snap/wiki/Install) but with commands like: -``` -sudo snap install wekan-gantt-gpl - -sudo snap set wekan-gantt-gpl root-url='http://localhost' - -sudo snap set wekan-gantt-gpl port='80' -``` -Stopping all: -``` -sudo snap stop wekan-gantt-gpl -``` -Stopping only some part: -``` -sudo snap stop wekan-gantt-gpl.caddy - -sudo snap stop wekan-gantt-gpl.mongodb - -sudo snap stop wekan-gantt-gpl.wekan -``` - -## Changing from Wekan to Wekan Gantt GPL - -1) Install newest MongoDB to have also mongorestore available - -2) Backup database and settings: -``` -sudo snap stop wekan.wekan - -mongodump --port 27019 - -snap get wekan > snap-set.sh - -sudo snap remove wekan - -sudo snap install wekan-gantt-gpl - -sudo snap stop wekan-gantt-gpl.wekan - -nano snap-set.sh -``` -Then edit that textfile so all commands will be similar to this: -``` -sudo snap set wekan-gantt-gpl root-url='https://example.com' -``` -And run settings: -``` -chmod +x snap-set.sh - -./snap-set.sh - -sudo snap start wekan-gantt-gpl.wekan -``` -## Changing from Wekan Gantt GPL to Wekan - -1) Install newest MongoDB to have also mongorestore available - -2) Backup database and settings: -``` -sudo snap stop wekan-gantt-gpl.wekan - -mongodump --port 27019 - -snap get wekan-gantt-gpl > snap-set.sh - -sudo snap remove wekan-gantt-gpl - -sudo snap install wekan - -sudo snap stop wekan.wekan - -nano snap-set.sh -``` -Then edit that textfile so all commands will be similar to this: -``` -sudo snap set wekan root-url='https://example.com' -``` -And run settings: -``` -chmod +x snap-set.sh - -./snap-set.sh - -sudo snap start wekan.wekan -``` - -# UCS - -[Gantt feature at UCS](UCS#gantt) diff --git a/docs/Stats/Logs.md b/docs/Stats/Logs.md deleted file mode 100644 index 0cf611c92..000000000 --- a/docs/Stats/Logs.md +++ /dev/null @@ -1,75 +0,0 @@ -Also see at this wiki right menu Webhooks: -- Global Webhooks at Admin Panel, sends most board actions to webhook (chat, etc) -- Per-board webhooks at Wekan board click hamburger menu => cog icon at right side of members => Board Settings / Webhooks, send actions of one board to some webhook - -## Enable more Wekan debug logs: - -a) Snap: `sudo snap set wekan debug='true'` - but also notice that [in Wekan v4.56 newer most mongo logs go to `/dev/null` on Snap](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v456-2020-11-30-wekan-release) - -b) docker-compose.yml: `DEBUG=true` - -c) start-wekan.sh: `DEBUG=true` - -d) [MongoDB logs docs](https://docs.mongodb.com/manual/reference/log-messages/) - -e) Logging all MongoDB queries, info [from StackOverflow](https://stackoverflow.com/questions/15204341/mongodb-logging-all-queries) below: -``` -$ mongo -MongoDB shell version: 2.4.9 -connecting to: test -> use myDb -switched to db myDb -> db.getProfilingLevel() -0 -> db.setProfilingLevel(2) -{ "was" : 0, "slowms" : 1, "ok" : 1 } -> db.getProfilingLevel() -2 -> db.system.profile.find().pretty() -``` -Source: http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/ -``` -db.setProfilingLevel(2) means "log all operations". -``` - -## Wekan logs could be at syslog - -Logs are at /var/log/syslog , like with: -``` -sudo tail -f 1000 /var/log/syslog | less -``` - -Or: - -## Snap -All: -``` -sudo snap logs wekan -``` -Partial: -``` -sudo snap logs wekan.wekan - -sudo snap logs wekan.mongodb - -sudo snap logs wekan.caddy -``` -## Docker - -``` -docker logs wekan-app - -docker logs wekan-db -``` -## Sandstorm - -When Wekan grain is open, click at top terminal icon, so then opens new window that shows logs - -## Additional logs - -- https://github.com/wekan/wekan-logstash -- https://github.com/wekan/wekan-stats -- Boards count https://github.com/wekan/wekan/pull/3556 -- At this wiki right menu, also look at Webhooks topic -- https://github.com/wekan/wekan/wiki/Features#Stats -- https://github.com/wekan/wekan/issues/1001 diff --git a/docs/Stats/Mermaid-Diagram.md b/docs/Stats/Mermaid-Diagram.md deleted file mode 100644 index b31b7b907..000000000 --- a/docs/Stats/Mermaid-Diagram.md +++ /dev/null @@ -1,83 +0,0 @@ -## DOES NOT WORK ANYMORE - -https://github.com/wekan/wekan/issues/4841 - -As of newest Mermaid 10.0.0, Mermaid does not work in WeKan anymore, so Mermaid was removed in WeKan v6.76. xet7 did maintain https://www.npmjs.com/package/@wekanteam/markdown-it-mermaid but after updating to Mermaid 10.0.0 using Mermaid on WeKan card description etc did not work anymore. - -## Source - -- [Original issue, please comment there if Mermaid is useful](https://github.com/wekan/wekan/issues/3794). -- [Original commit](https://github.com/wekan/wekan/commit/5ab20a925763a3af941c42d1943da9c8bb8852bd) - -## Npm package - -- NPM package at https://www.npmjs.com/package/@liradb2000/markdown-it-mermaid - -## About examples - -- Below examples and more at https://mermaid-js.github.io/mermaid/#/examples -- https://jessems.com/posts/2023-07-22-the-unreasonable-effectiveness-of-sequence-diagrams-in-mermaidjs -- https://news.ycombinator.com/item?id=36845714 - -## Howto - -- Add mermaid code to Wekan card or any other input field. After some time, if chart is not visible, reload browser webpage. -- Mermaid code starts with `~~~mermaid` -- Mermaid code ends with `~~~` - -## Example 1: Flowchart - -``` -~~~mermaid - graph TD - A[Client] --> B[Load Balancer] - B --> C[Server01] - B --> D[Server02] -~~~ -``` - -## Example 2: Pie Chart - -``` -~~~mermaid -pie title NETFLIX - "Time spent looking for movie" : 90 - "Time spent watching it" : 10 -~~~ -``` - -## Example 3: Gantt Chart - -``` -~~~mermaid -gantt - dateFormat YYYY-MM-DD - title Adding GANTT diagram functionality to mermaid - excludes weekends - %% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".) - - section A section - Completed task :done, des1, 2014-01-06,2014-01-08 - Active task :active, des2, 2014-01-09, 3d - Future task : des3, after des2, 5d - Future task2 : des4, after des3, 5d - - section Critical tasks - Completed task in the critical line :crit, done, 2014-01-06,24h - Implement parser and jison :crit, done, after des1, 2d - Create tests for parser :crit, active, 3d - Future task in critical line :crit, 5d - Create tests for renderer :2d - Add to mermaid :1d - - section Documentation - Describe gantt syntax :active, a1, after des1, 3d - Add gantt diagram to demo page :after a1 , 20h - Add another diagram to demo page :doc1, after a1 , 48h - - section Last section - Describe gantt syntax :after doc1, 3d - Add gantt diagram to demo page :20h - Add another diagram to demo page :48h -~~~ -``` \ No newline at end of file diff --git a/docs/Stats/Metrics.md b/docs/Stats/Metrics.md deleted file mode 100644 index c6852d117..000000000 --- a/docs/Stats/Metrics.md +++ /dev/null @@ -1,18 +0,0 @@ -## 1) Matomo - -https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys#matomo-web-analytics-integration - -## 2) Metrics - -- [Original PR](https://github.com/wekan/wekan/pull/4700). Thanks to Emile840. -- [Fix typos and translate comments to English](https://github.com/wekan/wekan/commit/551f57b03bbc1dba37862a0cc3407c8d359e2a9a). Thanks to xet7. -- [Added METRICS_ALLOWED_IP_ADDRESSES settings to Docker/Snap/Source](https://github.com/wekan/wekan/commit/34862810df686abfc0ee9ff1a13690a7b2bacc7e) and missing Matomo settings to Snap help. Thanks to xet7. - -### Docker - -[docker-compose.yml](https://raw.githubusercontent.com/wekan/wekan/master/docker-compose.yml) -``` -- METRICS_ALLOWED_IP_ADDRESSES=192.168.0.100,192.168.0.200 -``` - - diff --git a/docs/Theme/Converting-Meteor-Stylus-to-CSS.md b/docs/Theme/Converting-Meteor-Stylus-to-CSS.md deleted file mode 100644 index af79964f2..000000000 --- a/docs/Theme/Converting-Meteor-Stylus-to-CSS.md +++ /dev/null @@ -1,50 +0,0 @@ -[Original issue](https://github.com/wekan/wekan/issues/4512) - -## Introduction - -Previously WeKan used Stylus, that is similar to CSS. Stylus has some additional features. - -Stylus code was located at `wekan/client/components/*/*.styl`, for example `wekan/client/components/boards/boardsList.styl`. - -## Why - -- `coagmano:stylus` is not maintained anymore -- When building meteor bundle, `coagmano:stylus` causes [errors like Warning: Accessing non-existent property 'lineno' of module exports inside circular dependency](https://github.com/Meteor-Community-Packages/meteor-stylus/issues/9) with newest Meteor 2.7.2 -- Removing `coagmano:stylus` fixed [Mermaid Diagram error: Maximum call stack size exceeded](https://github.com/wekan/wekan/issues/4251) from browserside right click / Inspect / Console. After removing `coagmano:stylus`, that error was not there anymore. - -## Converting Stylus to CSS - -[Source](https://github.com/wekan/wekan/blob/main/releases/stylus-to-css.sh) - -#### 1) Install Stylus -``` -sudo npm -g install stylus -``` -#### 2) Comment out `@import 'nib'` that is not supported syntax in newest plain Stylus, for all .styl files in directory -``` -sed -i "s|@import 'nib'|//@import 'nib'|g" *.styl -``` -That code `@import 'nib'` is using [CSS imports](https://developer.mozilla.org/en-US/docs/Web/CSS/@import) that does [Eric Meyer's CSS reset of styles](https://github.com/stylus/nib/blob/master/lib/nib/reset.styl). xet7 [added that reset to separate CSS file](https://github.com/wekan/wekan/commit/985c2cdbfdb38eb43852f3aa257859bbd3f817b9). While in [original converting Stylus to CSS](https://github.com/wekan/wekan/commit/072778b9aaefd7fcaa7519b1ce1cafc1704d646d) that `@import 'nib'` was in many files, it seems it's enough to have it at [client/components/boards/boardsList.css](https://github.com/wekan/wekan/commit/985c2cdbfdb38eb43852f3aa257859bbd3f817b9#diff-c227ea7dd2df8f46604db81ce7c49902b7e8829266ab79bb1c80077b5ba2b5b0) that is used at all pages of WeKan. - -Alternative to CSS imports would be to add that CSS code to beginning of that CSS file where it is needed. - -Other CSS transpilers may use similar imports. - -Not having all requires CSS can be seen like: -- [Some extra bullets](https://github.com/wekan/wekan/issues/4516) -- [Some wrong colors](https://github.com/wekan/wekan/issues/4519) - -#### 3) For all files in directory, run command `stylus filename.styl` -``` -ls *.styl | xargs stylus -``` -#### 4) Remove `coagmano:stylus` -``` -meteor remove coagmano:stylus -``` -#### 5) Delete .styl files -``` -cd wekan -rm client/components/*/*.styl -``` - diff --git a/docs/Theme/Custom-CSS-themes.md b/docs/Theme/Custom-CSS-themes.md deleted file mode 100644 index 1b69eedc0..000000000 --- a/docs/Theme/Custom-CSS-themes.md +++ /dev/null @@ -1,217 +0,0 @@ -Here is how to build wekan code and add your new theme with code changes and send as pull request: -https://github.com/wekan/wekan/wiki/Emoji#how-you-could-add-another-plugin - -Here is how some have sent previous themes to Wekan, what code changes they made: -https://github.com/wekan/wekan/pulls?q=is%3Apr+is%3Aclosed+theme - -After you have sent new theme as pull request, you see it as open pull request: -https://github.com/wekan/wekan/pulls?q=is%3Apr+theme+is%3Aopen - -And when I have merged it to Wekan, that theme will be in next Wekan release, listed at ChangeLog: -https://github.com/wekan/wekan/blob/main/CHANGELOG.md - -At Wekan Snap page you see with webpage reload, when new version has been released: -https://snapcraft.io/wekan - -Wekan Snap version gets updates automatically soon after new Wekan version has been released, or you can update manually immediately: -https://github.com/wekan/wekan-snap/wiki/Automatic-update-schedule - -*** - -Also see: [Dark Mode](Dark-Mode) - -All Wekan themes are directly integrated to Wekan. You can add pull request to master branch to add custom theme, you can see from [from this commit](https://github.com/wekan/wekan/commit/34b2168d0dda253dedabbee47031873efa4ae446) required new color/theme name and changes to these files 3 files listed below. In that commit is also changes to other files, you don't need to change those files. - - `wekan/client/components/boards/boardColors.styl` - - `wekan/models/boards.js` - - `wekan/server/migrations.js` - -Alternatives for sending new theme as pull request: -- If you would like to have some new theme, please add screenshot mockup to [new Wekan issue](https://github.com/wekan/wekan/issues). -- If possible, you can also try to create those CSS changes with [Stylish browser extension](https://userstyles.org/) and add those to new issue too. - -There are currently board color modes/themes, and these full themes: -- Dark: modified from below by @lonix1 and more changes by xet7 -- Relax: Light green background that helps Wekan users to relax in company of Wekan contributor that sent theme CSS. - -Upcoming full themes that will be added by xet7: -- Corteza, that will be mostly-white theme, although different than example of white theme below -- Octopus, that will have different colors and some Wekan features hidden - -![dark wekan](https://wekan.github.io/wekan-dark-mode.png) - -## Dark theme - -[by @lonix1](https://github.com/wekan/wekan/issues/1149), could look a little like this screenshot mockup: - - - -lonix1 created some css overrides with Stylish. It's not complete but I'm happy with it. I work in swimlanes mode, so that is what I changed (not list mode or calendar mode). - -Colors: -- adds dark mode, I used vscode as a reference - -Other: -- hides various useless icons and things -- hides "add card", "add swimlane", "add list" links, until hovered (I find these very "noisy") - -```css -/* HIDE PERMANENTLY -------------------------------------------------- */ - -/* various */ -.wekan-logo, -.close-card-details { display:none; } - -/* header text */ -#header-quick-access >ul >li:nth-child(1) >a { font-size:0; } -#header-quick-access >ul >li:nth-child(1) >a >.fa-home{ font-size:12px; margin:0; } - -/* popup menu titles (boards, swimlanes, lists, cards, labels) */ -.pop-over >.header { display:none; } - -/* OPTIONAL - card fields: received, start, due, end, members, requested, assigned - I rarely use these... uncomment if you want to hide them */ -/* -.card-details-item.card-details-item-received, -.card-details-item.card-details-item-start, -.card-details-item.card-details-item-due, -.card-details-item.card-details-item-end, -.card-details-item.card-details-item-members, -.card-details-item.card-details-item-name { display:none; } -.card-details-items:empty { display:none; } -*/ - -/* HIDE UNTIL HOVER -------------------------------------------------- */ - -/* header "+" button */ -#header-quick-access .fa-plus { display:none; } -#header-quick-access:hover .fa-plus { display:inherit; } - -/* "add card" links (use visibility rather than display so items don't jump) */ - .open-minicard-composer { visibility:hidden; } -.list.js-list:hover .open-minicard-composer { visibility:visible; } - .list-header-menu { visibility:hidden; } -.list.js-list:hover .list-header-menu { visibility:visible; } - -/* "add list/swimlane" links (use visibility rather than display so items don't jump) */ -.list.js-list-composer >.list-header { visibility:hidden; } -.list.js-list-composer:hover >.list-header { visibility:visible; } - -/* DARK MODE -------------------------------------------------- */ - -/* headers */ -#header-quick-access, #header { background-color:rgba(0,0,0,.75) !important; } -#header .board-header-btn:hover { background-color:rgba(255,255,255,0.3) !important; } - -/* backgrounds: swimlanes, lists */ -.swimlane { background-color:rgba(0,0,0,1); } -.swimlane >.swimlane-header-wrap, -.swimlane >.list.js-list, -.swimlane >.list-composer.js-list-composer { background-color:rgba(0,0,0,.9); } - -/* foregrounds: swimlanes, lists */ -.list >.list-header, .swimlane-header { color:rgba(255,255,255,.7); } - -/* minicards */ -.minicard { background-color:rgba(255,255,255,.4); } -.minicard-wrapper.is-selected .minicard, -.minicard:hover, -.minicard-composer.js-composer, -.open-minicard-composer:hover { background-color:rgba(255,255,255,.8) !important; color:#000; } -.minicard, .minicard .badge { color:#fff; } -.minicard:hover .badge, .minicard-wrapper.is-selected .badge { color:#000; } - -/* cards */ -.card-details, -.card-details .card-details-header { background-color:#ccc; } - -/* sidebar */ -.sidebar-tongue, .sidebar { background-color:#666 !important; } -.sidebar-content h3, .sidebar-content .activity-desc { color:rgba(255,255,255,.7) !important; } -``` - -If anyone improves on this, please share here. - -## White theme - -[pravdomil](https://github.com/wekan/wekan/issues/1690) has created small script for tampermonkey to redesign wekan board. - -![image](https://user-images.githubusercontent.com/2387356/41285077-7c5b1c64-6e3b-11e8-91b9-503ffb39eb4a.png) - -script for tampermonkey -```js -// ==UserScript== -// @name Kanban -// @namespace https://pravdomil.com/ -// @version 0.1 -// @match https://wekan.indie.host/* -// @grant none -// ==/UserScript== - -;(function() { - const el = document.createElement("style") - // language=CSS - el.textContent = ` -/* white background */ -body { background-color: white; } - -/* header bar next to top bar */ -#header #header-main-bar { - position: absolute; - right: 70px; - left: 300px; - top: -3px; - padding: 0; - height: calc(28px + 3px); -} - -/* swimlane white background, no borders, fix ellipsis */ -.swimlane { background-color: white; } -.swimlane-header-wrap { border: 0 !important; } -.swimlane-header { text-overflow: initial !important; } - -/* column header only for first row */ -.swimlane .list-header { margin: 4px 12px 4px; } -.swimlane .list-header-name { display: none; } -div:nth-child(1 of .swimlane) .list-header { margin: 20px 12px 4px; } -div:nth-child(1 of .swimlane) .list-header-name { display: inline; } - -/* cells no borders, fix height, less padding, no add new card */ -.list { border: 0; background-color: white; flex: 300px 0 0; } -.list .list-body { height: 160px; padding: 0 2px; } -.list .open-minicard-composer { display: none; } -.list .open-list-composer { opacity: 0; transition: opacity .2s; } -.list .open-list-composer:hover { opacity: 1; } - -/* card style */ -.minicard-wrapper { margin-bottom: 2px !important; } -.minicard { box-shadow: 0 0 16px rgba(0,0,0,0.15) inset; } - -/* card style for first and last column */ -.swimlane .list:nth-child(2) .minicard { opacity: .5 !important; } -.swimlane .list:nth-last-child(2) .minicard { opacity: .1 !important; } - -/* card details always center, menu items tweaks */ -.card-details { - position: absolute; - z-index: 10000 !important; - top: 0; - bottom: 0; - left: calc(50% - 510px / 2); -} -.pop-over-list .js-labels { display: none } -.pop-over-list .js-move-card-to-top { display: none } -.pop-over-list .js-move-card-to-bottom { display: none } -.pop-over-list .js-archive { color: darkred } - -/* not needed */ -.wekan-logo, .js-member, .attachments-galery { display: none; } - -` - - document.body.appendChild(el) -})() - -``` \ No newline at end of file diff --git a/docs/Theme/Dark-Mode.md b/docs/Theme/Dark-Mode.md deleted file mode 100644 index 4208674c9..000000000 --- a/docs/Theme/Dark-Mode.md +++ /dev/null @@ -1,22 +0,0 @@ -## Wekan Dark Mode - -![dark wekan](https://wekan.github.io/wekan-dark-mode.png) - -## Other Dark Modes - -### Chrome Desktop Browser -- [Dark Mode Extension](https://chrome.google.com/webstore/detail/dark-mode-for-chrome/geooakdjiamlhpechokegobmhdmlgidk) - changes all webpages to dark, including Wekan. -- [Decent - Dark Theme](https://chrome.google.com/webstore/detail/decent/bnnjhehfmlfkbdocbphdoagolcknbohp) - -### Firefox Desktop and Mobile Browser -- [Dark Mode Webextension](https://addons.mozilla.org/en-US/android/addon/dark-mode-webextension/) - changes all webpages to dark, including Wekan. -- There is dark themes, depends what someone likes - -### Thunderbird Email -- [TT DeepDark - Dark Theme](https://addons.thunderbird.net/en-US/thunderbird/addon/tt-deepdark/) - after installing click Edit/Preferences/Display/Colors/Font&Colors-Colors Text: Grey Background: Black and also Plain Text Messages Color: Black. - -### Qubes OS Desktop -- Start / System Tools / Appearance / Styles: Adwaita-dark - -### Android M -- [Dark Phone Theme](https://www.phonearena.com/news/Finally-Android-M-scores-a-new-system-wide-dark-UI-theme_id69814) \ No newline at end of file diff --git a/docs/Translations/Change-Language.md b/docs/Translations/Change-Language.md deleted file mode 100644 index 14b99f592..000000000 --- a/docs/Translations/Change-Language.md +++ /dev/null @@ -1,32 +0,0 @@ -## Change language for all users - -Using MongoDB Shell with WeKan Snap Candidate, to change English date format to `DD/MM/YY`. - -MongoDB Shell Download: https://www.mongodb.com/try/download/shell - -language.sh: -``` -mongosh --quiet \ ---host 127.0.0.1 \ ---port 27019 \ ---eval 'use wekan' \ ---eval 'db.users.updateMany({}, { $set: {"profile.language": "en-GB" }});' -``` -Set script as executeable: -``` -chmod +x language.sh -``` -Running script, when 5 new users of total 20 users did not have language set correctly yet: -``` -$ ./language.sh -{ - acknowledged: true, - insertedId: null, - matchedCount: 20, - modifiedCount: 5, - upsertedCount: 0 -} -``` -## Language browser settings - -https://github.com/wekan/wekan/issues/4518#issuecomment-1133763518 \ No newline at end of file diff --git a/docs/Translations/Customize-Translations.md b/docs/Translations/Customize-Translations.md deleted file mode 100644 index 85545bbd4..000000000 --- a/docs/Translations/Customize-Translations.md +++ /dev/null @@ -1,26 +0,0 @@ -In WeKan v7.08 and newer. - -## Description - -WeKan has default translations from English to other languages at https://explore.transifex.com/wekan/wekan/ - -With this feature, you can override some default translation string with custom string, your modified new version of translation text, with GUI at Admin Panel, and changes are immediately in use in WeKan. - -## To translators, about the word Custom - -Custom means something modified, that is not the default. -For example, WeKan has other feature https://github.com/wekan/wekan/wiki/Custom-Fields , -where is added new custom fields, that are not default. - -## Admin Panel / Translation - -- Language: https://github.com/wekan/wekan/blob/main/imports/i18n/languages.js -- Text, source string In English: https://github.com/wekan/wekan/blob/main/imports/i18n/data/en.i18n.json -- Translation text: Your new translation custom string - -## Source - -- https://github.com/wekan/wekan/pull/5085 -- https://github.com/wekan/wekan/issues/5065#issuecomment-1668259510 - -Translation Custom String \ No newline at end of file diff --git a/docs/Translations/Translations.md b/docs/Translations/Translations.md deleted file mode 100644 index cc8d00f9d..000000000 --- a/docs/Translations/Translations.md +++ /dev/null @@ -1,30 +0,0 @@ -# Adding language support for new language - -You are encouraged to translate (or improve the translation of) Wekan in your -locale language. For that purpose we rely on -[Transifex](https://app.transifex.com/wekan/). So the first step is to -create a Transifex account if you don’t have one already. You can then send a -request to join one of the translation teams. If there we will create a new one. - -Once you are in a team you can start translating the application. Please take a -look at the glossary so you can agree with other (present and future) -contributors on words to use to translate key concepts in the application like -“boards” and “cards”. - -# Supporting automatic translation when adding new features - -The original application is written in English, and if you want to contribute to -the application itself, you are asked to fill the `i18n/en.i18n.json` file with your new phrases. - -![adding words to translation file](https://i.imgur.com/GOVY141.png) - -When you do that the new strings of text to translate automatically appears on -Transifex to be translated (the refresh may take a few hours). - -Then in your JADE files, use the string like so: - -`h3.card-details-item-title {{_ 'members'}}` - -We pull all translations from Transifex before every new Wekan release -candidate, ask the translators to review the app, and pull all translations -again for the final release. \ No newline at end of file diff --git a/docs/Webhooks/Chat/RocketChat.md b/docs/Webhooks/Chat/RocketChat.md deleted file mode 100644 index 9f555593a..000000000 --- a/docs/Webhooks/Chat/RocketChat.md +++ /dev/null @@ -1,68 +0,0 @@ -Info for Self-Hosted RocketChat Community Server, using RocketChat server Snap from https://snapcraft.io/rocketchat-server - -## Install snapd - -Linux: - -https://snapcraft.io/docs/installing-snapd - -Windows: - -https://github.com/wekan/hx/tree/main/prototypes/ui/gambas#install-on-windows - -## Install RocketChat Snap - -``` -sudo snap install rocketchat-server -``` - -## Setup siteurl - -List current Snap settings: -``` -sudo snap get rocketchat-server -``` -Then set your siteurl of your RocketChat server: -``` -sudo snap set rocketchat-server siteurl='https://chat.yourcompany.com' -``` - -## RocketChat Skip Install Registration Wizard Fix - -Q: - -- [RocketChat Skip Install Registration Wizard Fix](https://github.com/RocketChat/Rocket.Chat/issues/31163#issuecomment-1848364117) - - -A: - -For someone using snap, it means creating a file `/var/snap/rocketchat-server/common/override-setup-wizard.env ` (the name of the file itself could be anything as long as it has an .env extension) and setting its content to `OVERWRITE_SETTING_Show_Setup_Wizard=completed` - -Then, restarting the server by `systemctl restart snap.rocketchat-server.rocketchat-server.service` - -If it does not work yet, then reboot. - -## Workspace version unsupported - -Q: - -- [Workspace version unsupported, Self-Host Community Server](https://forums.rocket.chat/t/workspace-version-unsupported-self-host-community-server/19698) - -A: - -1) Change to newest Snap Stable channel, list at https://snapcraft.io/rocketchat-server dropdown menu - -``` -sudo snap refresh rocketchat-server --channel=6.x/stable --amend -``` - -2) Register your Self-Managed instance here, so login and mobile app start to work after that: - -- https://cloud.rocket.chat/home -- https://chat.yourcompany.com/admin/subscription - -## More RocketChat Snap related info - -https://github.com/wekan/wekan/wiki/OAuth2 - -https://docs.rocket.chat/deploy/deploy-rocket.chat/deploy-with-snaps \ No newline at end of file diff --git a/docs/Webhooks/Java.md b/docs/Webhooks/Java.md deleted file mode 100644 index 9519a4a23..000000000 --- a/docs/Webhooks/Java.md +++ /dev/null @@ -1,21 +0,0 @@ -This page is about using Wekan from Java code. - -Wekan is made with Javascript and uses MongoDB database. - -## Using Wekan REST API - -With Jython, you can use Wekan REST API [like with Python](New-card-with-Python3-and-REST-API) - -## Global Webhooks - -For Global Webhooks in Admin Panel, Wekan sends all events in all boards to webhook URL, like add card. Although, sending some messages for some events is not yet implemented, more could be added later. - -Data is sent in [this kind of JSON format](Webhook-data). - -[You can receive webhook data in Java like this](https://github.com/Esri/webhooks-samples/tree/master/java/receiver). - -Then for each received data, your code can read content and based on incoming data call Wekan REST API, some Java interface, etc. - -Outgoing Webhooks can also go to Slack, RocketChat, NodeRED, PowerShell etc. See right menu webhook links when scrolling down wiki page https://github.com/wekan/wekan/wiki - -If you call some Java interface that returns some data, you can then write that data to Wekan card with Wekan REST API. \ No newline at end of file diff --git a/docs/Webhooks/Outgoing-Webhook-to-Discord.md b/docs/Webhooks/Outgoing-Webhook-to-Discord.md deleted file mode 100644 index c311d35e5..000000000 --- a/docs/Webhooks/Outgoing-Webhook-to-Discord.md +++ /dev/null @@ -1,37 +0,0 @@ -- [RocketChat Webhook workaround](https://github.com/wekan/univention/issues/15) - -Note: Webhook to Slack and Rocket.Chat does not require adding anything to URL. Discord requires adding `/slack` to end of URL so that it works. - -Outgoing Webhook to Discord - -1. Add Webhook to Discord - -2. On Wekan board, click 3 lines "hamburger" menu / Outgoing Webhooks. - -3. Add /slack to end of your Discord Webhook URL and Save URL, like this: - -``` -https://discordapp.com/api/webhooks/12345/abcde/slack -``` - -Wekan Outgoing Webhook URLs are in Slack/Rocket.Chat/Discord format. - -Note: Not all Wekan activities create Outgoing Webhook events. Missing activities [have been added](https://github.com/wekan/wekan/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+webhook) to [Wekan Roadmap](https://github.com/wekan/wekan/projects/2). If you find some activity that does not yet have GitHub issue about it, please add new GitHub issue. - -Wekan uses this type of JSON when sending to Outgoing Webhook: -https://github.com/wekan/wekan/wiki/Webhook-data - -Discord supports incoming webhooks in different formats, like GitHub, Slack, etc. The incoming format needs to be specified by adding webhook format to end of URL. -https://discordapp.com/developers/docs/resources/webhook#execute-slackcompatible-webhook - -Wekan generated webhooks are Slack compatible. Discord does not know anything about Wekan, Rocket.Chat, and other apps that produce Slack compatible Outgoing Webhook format. But using any other format like GitHub etc does not work, because Wekan Outgoing Webhooks are not in that format. - -When making Wekan Outgoing Webhook to Rocket.Chat and Slack, there is no need to add anything to Webhook URL when those that is added to Wekan board. Discord in this case has decided to implement multiple Incoming Webhook formats and require specifying format in URL. - -## Riot - -Wekan boards have Outgoing Webhooks for board change messages, those can be bridged to Riot: -https://github.com/vector-im/riot-web/issues/4978 - -If you have some Riot bot, you can make it call Wekan REST API to make changes to Wekan. -First [login to API as form data, with admin username and password](REST-API#example-call---as-form-data). Then use that Bearer token [to edit Wekan](https://wekan.github.io/api/). \ No newline at end of file diff --git a/docs/Webhooks/Receiving-Webhooks.md b/docs/Webhooks/Receiving-Webhooks.md deleted file mode 100644 index 1fefb1a71..000000000 --- a/docs/Webhooks/Receiving-Webhooks.md +++ /dev/null @@ -1,20 +0,0 @@ -REQUIRED: Your webhook should reply 200 OK immediately after receiving webhook, so that WeKan continues working: - -https://github.com/wekan/wekan/issues/5077#event-10054506387 - -https://github.com/wekan/webhook/blob/main/public/index.php#L48C1-L48C1 - -*** - -For receiving webhooks on local network, you could use: - -1) Some web form with PHP/Python/other backend, Google search for example code -how to receive webhook. - -2) [NodeRED](https://github.com/wekan/wekan/issues/2017) - -3) [Huginn or Flogo etc](https://github.com/wekan/wekan/issues/1160) - -4) [Java](https://github.com/wekan/wekan/issues/2961#issuecomment-601599745) - -At Internet you could use for example Zapier. \ No newline at end of file diff --git a/docs/Webhooks/WebHook-And-CA.md b/docs/Webhooks/WebHook-And-CA.md deleted file mode 100644 index c0310cd51..000000000 --- a/docs/Webhooks/WebHook-And-CA.md +++ /dev/null @@ -1,12 +0,0 @@ -Because NodeJS uses an [hardcoded list of certificates](https://github.com/nodejs/node/issues/4175) if you deploy a site (receiving the webhook from wekan) behind a reverse proxy on https with a Let's Encrypt certificate you may have a problem: Let's Encrypt's CA is not recognized. The correct answer is [here](https://stackoverflow.com/questions/29283040/how-to-add-custom-certificate-authority-ca-to-nodejs/47160447#47160447). - -* Download the Let’s Encrypt Authority X3 (IdenTrust cross-signed) from [here](https://letsencrypt.org/certificates/) -```sh -cd /etc/ssl/certs -wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt -O lets-encrypt-x3-cross-signed.pem -``` - -* Now start the application with -```sh -NODE_EXTRA_CA_CERTS=/etc/ssl/certs/lets-encrypt-x3-cross-signed.pem node main.js -``` \ No newline at end of file diff --git a/docs/Webhooks/Webhook-data.md b/docs/Webhooks/Webhook-data.md deleted file mode 100644 index 9b9064b4c..000000000 --- a/docs/Webhooks/Webhook-data.md +++ /dev/null @@ -1,360 +0,0 @@ -# Webhook data - -When a webhook is activated it sends the related information within the POST request body. - -## Cards - -### Creation - -When a new card is created on board - -```json -{ - "text": "{{wekan-username}} created card \"{{card-title}}\" to list \"{{list-name}}\" at swimlane \"{{swimlane-name}}\" at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "swimlaneId": "{{swimlane-id}}", - "description": "act-createCard" -} -``` - -### Move - -When a card is moved beweteen lists - -```json -{ - "text": "{{wekan-username}} moved card \"{{card-title}}\" at board \"{{board-name}}\" from list \"{{old-list-name}}\" at swimlane \"{{swimlane-name}}\" to list \"{{new-list-name}}\" at swimlane \"{{swimlane-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "listId": "{{new-list-id}}", - "oldListId": "{{old-list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "swimlaneId": "{{swimlane-id}}", - "description": "act-moveCard" -} -``` - -### Archival - -A card is moved to archive - -```json -{ - "text": "{{wekan-username}} Card \"{{card-title}}\" at list \"{{list-name}}\" at swimlane \"{{swimlane-name}}\" at board \"{{board-name}}\" moved to Archive\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "swimlaneId": "{{swimlane-id}}", - "description": "act-archivedCard" -} -``` - -### Restored - -When a card is restored from archive - -```json -{ - "text": "{{wekan-username}} restored card \"{{card-title}}\" to list \"{{list-name}}\" at swimlane \"{{swimlane-name}}\" at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "swimlaneId": "{{swimlane-id}}", - "description": "act-restoredCard" -} -``` - -## Card content - -Webhooks that are raised on card content change - -### Comment creation - -A user comments the card - -```json -{ - "text": "{{wekan-username}} commented on card \"{{card-title}}\": \"{{comment}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "comment": "{{comment}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "commentId": "{{comment-id}}", - "description": "act-addComment" -} -``` - -### Comment edit - -A user edits a comment on the card - -```json -{ - "text": "{{wekan-username}} commented on card \"{{card-title}}\": \"{{comment}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "comment": "{{comment}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "commentId": "{{comment-id}}", - "swimlaneId": "{{swimlane-id}}", - "description": "act-editComment" -} -``` - -### AddLabel - -A label is added to card - -```json -{ - "text": "{{wekan-username}} Added label __label__ to card \"{{card-title}}\" at list \"{{list-name}}\" at swimlane \"{{swimlane-name}}\" at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "swimlaneId": "{{swimlane-id}}", - "description": "act-addedLabel" -} -``` - -### Join member - -When a member is added to card - -```json -{ - "text": "{{wekan-username}} added member {{wekan-username}} to card \"{{card-title}}\" at list \"{{list-name}}\" at swimlane \"{{swimlane-name}}\" at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "swimlaneId": "{{swimlane-id}}", - "description": "act-joinMember" -} -``` - -### Set custom field - -A custom field on card is set - -```json -{ - "text": "{{wekan-username}} act-setCustomField\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-setCustomField" -} -``` - -### Add attachment - -```json -{ - "text": "{{wekan-username}} added attachment {{attachment-id}} to card \"{{card-title}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-addAttachment" -} -``` - -### Delete attachment - -```json -{ - "text": "{{wekan-username}} deleted attachment __attachment__ at card \"{{card-title}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-deleteAttachment" -} -``` - -### Add checklist - -```json -{ - "text": "{{wekan-username}} added checklist \"{{checklist-name}}\" to card \"{{card-title}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-addChecklist" -} -``` - -### Remove checklist - -```json -{ - "text": "{{wekan-username}} removed checklist \"{{checklist-name}}\" from card \"{{card-title}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-removeChecklist" -} -``` - -### Uncomplete checklist - -```json -{ - "text": "{{wekan-username}} uncompleted checklist \"{{checklist-name}}\" at card \"{{card-title}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-uncompleteChecklist" -} -``` - -### Add checklist item - -```json -{ - "text": "{{wekan-username}} added checklist item {{checklistitem-name}} to checklist \"{{checklist-name}}\" at card \"{{card-title}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-addChecklistItem" -} -``` - -### Checked item - -```json -{ - "text": "{{wekan-username}} checked {{checklist-name}} of checklist \"{{checklist-name}}\" at card \"{{card-title}}\" at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-checkedItem" -} -``` - -### Removed checklist item - -```json -{ - "text": "{{wekan-username}} act-removedChecklistItem\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}/{{card-id}}", - "cardId": "{{card-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "card": "{{card-title}}", - "description": "act-removedChecklistItem" -} -``` - -## Board - -Webhooks that are raised on board events - -### Create custom field - -```json -{ - "text": "{{wekan-username}} created custom field {{customfield-name}} to card __card__ at list __list__ at swimlane __swimlane__ at board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "description": "act-createCustomField" -} -``` - -## Lists - -Webhooks that are raised on list events - -### Create list - -```json -{ - "text": "{{wekan-username}} added list \"{{list-name}}\" to board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "description": "act-createList" -} -``` - -### Archived list - -```json -{ - "text": "{{wekan-username}} List \"{{list-name}}\" at swimlane __swimlane__ at board \"{{board-name}}\" moved to Archive\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "description": "act-archivedList" -} -``` - -### Remove list - -```json -{ - "text": "{{wekan-username}} act-removeList\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}", - "listId": "{{list-id}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "description": "act-removeList" -} -``` - -## Swimlane - -### Create swimlane - -```json -{ - "text": "{{wekan-username}} created swimlane \"{{swimlane-name}}\" to board \"{{board-name}}\"\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "swimlaneId": "{{swimlane-id}}", - "description": "act-createSwimlane" -} -``` - -### Archived swimlane - -```json -{ - "text": "{{wekan-username}} Swimlane \"{{swimlane-name}}\" at board \"{{board-name}}\" moved to Archive\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "swimlaneId": "{{swimlane-id}", - "description": "act-archivedSwimlane" -} -``` - -### Remove swimlane - -```json -{ - "text": "{{wekan-username}} act-removeSwimlane\nhttp://{{wekan-host}}/b/{{board-id}}/{{board-name}}", - "boardId": "{{board-id}}", - "user": "{{wekan-username}}", - "swimlaneId": "{{swimlane-id}", - "description": "act-removeSwimlane" -} -``` diff --git a/docs/Webserver/Apache.md b/docs/Webserver/Apache.md deleted file mode 100644 index ca1c99031..000000000 --- a/docs/Webserver/Apache.md +++ /dev/null @@ -1,143 +0,0 @@ -## 1) Enable Mod_Proxy - -``` -sudo a2enmod ssl proxy proxy_http proxy_wstunnel proxy_balancer -``` - -[Apache Mod_Proxy documentation](http://httpd.apache.org/docs/current/mod/mod_proxy.html) - -## 2) Restart Apache - -Systemd: -``` -sudo systemctl restart apache2 -``` -Init.d: -``` -sudo service apache2 restart -``` - -## 3) Enable SSL in Apache config -``` -Listen 443 - -NameVirtualHost *:443 -``` -## 4) Set Apache proxy - -Remember to set `- ROOT_URL=` to the full URL used for your reverse proxy or as `ServerName`. - -### a) Main URL - -SSL with [Certbot](https://certbot.eff.org). - -Config at `/etc/apache2/sites-available/example.com.conf`: - -```ApacheConf - - - ServerName example.com - - SSLEngine On - SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem - SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem - Include /etc/letsencrypt/options-ssl-apache.conf - ServerSignature Off - - - require all granted - - - ProxyPassMatch "^/(sockjs\/.*\/websocket)$" "ws://127.0.0.1:3001/$1" - ProxyPass "/" "http://127.0.0.1:3001/" - ProxyPassReverse "/" "http://127.0.0.1:3001/" - - - Options FollowSymLinks MultiViews - AllowOverride All - Order allow,deny - allow from all - - - -``` - -### b) Sub URL -Currently, favicon loading does not work with sub-url [wekan/issues/1692](https://github.com/wekan/wekan/issues/1692) - -Config at `/etc/apache2/sites-available/example.com.conf`: - -```ApacheConf - - - ServerName example.com/wekan - - SSLEngine On - SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem - SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem - Include /etc/letsencrypt/options-ssl-apache.conf - ServerSignature Off - - ProxyPassMatch "^/(sockjs\/.*\/websocket)$" "ws://127.0.0.1:3001/wekan/$1" - ProxyPass "/wekan" "http://127.0.0.1:3001/wekan" - ProxyPassReverse "/wekan" "http://127.0.0.1:3001/wekan" - - - Options FollowSymLinks MultiViews - AllowOverride All - Order allow,deny - allow from all - - - -``` -To run as default site: -```ApacheConf - -``` - -## 5) Enable your site - -``` -sudo a2ensite example.com -``` -Or, add symlink manually: -``` -sudo su - -cd /etc/apache2/sites-enabled - -ln -s ../sites-available/example.com.conf example.com.conf -``` -On some distributions, Apache config is at different path: -``` -cd /etc/httpd/conf.d -``` - -## 6) Reload Apache - -Systemd: -``` -sudo systemctl restart apache2 -``` -Init.d: -``` -sudo service apache2 restart -``` - -## 7) Snap settings - -### a) Main URL -``` -sudo snap set wekan port='3001' - -sudo snap set wekan root-url='https://example.com' -``` -### b) Sub URL -``` -snap set wekan port='3001' - -snap set wekan root-url='https://example.com/wekan' -``` - -[All snap settings](https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys) diff --git a/docs/Webserver/Caddy-Webserver-Config.md b/docs/Webserver/Caddy-Webserver-Config.md deleted file mode 100644 index 95417e8a0..000000000 --- a/docs/Webserver/Caddy-Webserver-Config.md +++ /dev/null @@ -1,738 +0,0 @@ -[Caddy 2 .well-known/assetlinks.json config for WeKan Android Play Store app](../PWA#fullscreen-android-app-with-caddy-and-wekan-server) - -# CloudFlare DNS - -CNAME: - -If some customer has CNAME to hosting platform subdomain, -hosting platform subdomain needs to be A record IP address to -hosting server Caddy webserver, because only that way -it can get Let's Encrypt TLS cert. It can not be nested like -customer CNAME to hosting CNAME to hosting A record, -because then getting Let's Encrypt TLS cert does not work. - -Wildcard: - -Wildcard DNS for Sandstorm only works with CloudFlare DNS. -It does not work with FreeDNS of Namecheap. More info at -https://github.com/wekan/wekan/wiki/Sandstorm - -## Caddy 2 - -WeKan Snap Candidate for any Snap distros: https://github.com/wekan/wekan/wiki/OpenSuse , disable internal old Caddy 1, when using Caddy 2: -``` -sudo snap set wekan caddy-enabled='false' -sudo snap set wekan port='3001' -sudo snap set wekan root-url='https://boards.example.com' -``` -More info about root-url at https://github.com/wekan/wekan/wiki/Settings - -Browser needs to have only one language https://github.com/wekan/wekan/issues/4803#issuecomment-1374354425 - -Install Caddy 2 stable release: https://caddyserver.com/docs/install#debian-ubuntu-raspbian - -Like this: -``` -sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https - -curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg - -curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list - -sudo apt update - -sudo apt -y install caddy -``` -Edit Caddyfile: - -``` -sudo nano /etc/caddy/Caddyfile -``` - -Example: - -``` -# Redirecting http to https - -(redirect) { - @http { - protocol http - } - redir @http https://{host}{uri} -} - -# WeKan board, proxy to localhost port, or IP-ADDRESS:PORT -boards.example.com { - tls { - load /var/snap/wekan/common/certs - alpn http/1.1 - } - - reverse_proxy 127.0.0.1:3025 -} - -# Static website -example.com { - tls { - load /var/snap/wekan/common/certs - alpn http/1.1 - } - root * /var/websites/wekan.team - file_server -} - -# Files download directory browse website -files.example.com { - root * /var/websites/ftp.secretchronicles.org/public - file_server browse -} -``` - -Caddy commands list: -``` -caddy help -``` - -*** - -### PWA site.webmanifest icons override Caddy example - -PWABuilder settings to create Android app at https://pwabuilder.com -- Web view (not Custom Tabs) -- Fullscreen (When not showing top and bottom toolbars. If you like to show those toolbars, change fullscreen to standalone) -- Notifications [X] Enable -- Signing key [X] Use mine - -PWABuilder upgrades: -- Android app upgrade to Android SDK 34 was made with help of this video https://github.com/pwa-builder/PWABuilder/issues/4766#issuecomment-2229867608 - -Icons override at site.webmanifest: -- These settings at Caddyfile override icon URLs etc - -If you like to show toolbars at top and bottom, change also here `fullscreen` to `standalone` - -``` -boards.wekan.team { - tls { - alpn http/1.1 - } - header /.well-known/* Content-Type application/json - header /.well-known/* Access-Control-Allow-Origin * - respond /.well-known/assetlinks.json `[ { - "relation": ["delegate_permission/common.handle_all_urls"], - "target": { - "namespace": "android_app", - "package_name": "team.wekan.boards.twa", - "sha256_cert_fingerprints": ["AA:AA:ED:7D:4C:9C:5A:A3:B5:DA:10:66:14:34:07:5D:EB:BE:96:CD:82:7B:09:46:47:13:65:29:5B:EA:96:30","61:41:86:5B:05:13:9B:64:5F:39:75:5A:16:C3:F2:22:25:6C:DA:74:B9:B0:8C:5F:93:B0:D2:26:65:16:1B:E6"] - } - } ]` - header /site.webmanifest/* Content-Type application/json - header /site.webmanifest/* Access-Control-Allow-Origin * - respond /site.webmanifest ` { - "name": "Wekan", - "short_name": "Wekan", - "icons": [ { - "src": "svg-etc/wekan-logo-512.svg", - "sizes": "any", - "type": "image/svg" - } , { - "src": "android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - } , { - "src": "android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } , { - "src": "Square150x150Logo.scale-100.png", - "sizes": "150x150", - "type": "image/png" - } , { - "src": "Square44x44Logo.scale-100.png", - "sizes": "44x44", - "type": "image/png" - } , { - "src": "StoreLogo.scale-100.png", - "sizes": "50x50", - "type": "image/png" - } , { - "src": "maskable_icon.png", - "sizes": "474x474", - "type": "image/png", - "purpose": "maskable" - } , { - "src": "monochrome-icon-512x512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "monochrome" - } , { - "src": "windows11/SmallTile.scale-100.png", - "sizes": "71x71" - } , { - "src": "windows11/SmallTile.scale-125.png", - "sizes": "89x89" - } , { - "src": "windows11/SmallTile.scale-150.png", - "sizes": "107x107" - } , { - "src": "windows11/SmallTile.scale-200.png", - "sizes": "142x142" - } , { - "src": "windows11/SmallTile.scale-400.png", - "sizes": "284x284" - } , { - "src": "windows11/Square150x150Logo.scale-100.png", - "sizes": "150x150" - } , { - "src": "windows11/Square150x150Logo.scale-125.png", - "sizes": "188x188" - } , { - "src": "windows11/Square150x150Logo.scale-150.png", - "sizes": "225x225" - } , { - "src": "windows11/Square150x150Logo.scale-200.png", - "sizes": "300x300" - } , { - "src": "windows11/Square150x150Logo.scale-400.png", - "sizes": "600x600" - } , { - "src": "windows11/Wide310x150Logo.scale-100.png", - "sizes": "310x150" - } , { - "src": "windows11/Wide310x150Logo.scale-125.png", - "sizes": "388x188" - } , { - "src": "windows11/Wide310x150Logo.scale-150.png", - "sizes": "465x225" - } , { - "src": "windows11/Wide310x150Logo.scale-200.png", - "sizes": "620x300" - } , { - "src": "windows11/Wide310x150Logo.scale-400.png", - "sizes": "1240x600" - } , { - "src": "windows11/LargeTile.scale-100.png", - "sizes": "310x310" - } , { - "src": "windows11/LargeTile.scale-125.png", - "sizes": "388x388" - } , { - "src": "windows11/LargeTile.scale-150.png", - "sizes": "465x465" - } , { - "src": "windows11/LargeTile.scale-200.png", - "sizes": "620x620" - } , { - "src": "windows11/LargeTile.scale-400.png", - "sizes": "1240x1240" - } , { - "src": "windows11/Square44x44Logo.scale-100.png", - "sizes": "44x44" - } , { - "src": "windows11/Square44x44Logo.scale-125.png", - "sizes": "55x55" - } , { - "src": "windows11/Square44x44Logo.scale-150.png", - "sizes": "66x66" - } , { - "src": "windows11/Square44x44Logo.scale-200.png", - "sizes": "88x88" - } , { - "src": "windows11/Square44x44Logo.scale-400.png", - "sizes": "176x176" - } , { - "src": "windows11/StoreLogo.scale-100.png", - "sizes": "50x50" - } , { - "src": "windows11/StoreLogo.scale-125.png", - "sizes": "63x63" - } , { - "src": "windows11/StoreLogo.scale-150.png", - "sizes": "75x75" - } , { - "src": "windows11/StoreLogo.scale-200.png", - "sizes": "100x100" - } , { - "src": "windows11/StoreLogo.scale-400.png", - "sizes": "200x200" - } , { - "src": "windows11/SplashScreen.scale-100.png", - "sizes": "620x300" - } , { - "src": "windows11/SplashScreen.scale-125.png", - "sizes": "775x375" - } , { - "src": "windows11/SplashScreen.scale-150.png", - "sizes": "930x450" - } , { - "src": "windows11/SplashScreen.scale-200.png", - "sizes": "1240x600" - } , { - "src": "windows11/SplashScreen.scale-400.png", - "sizes": "2480x1200" - } , { - "src": "windows11/Square44x44Logo.targetsize-16.png", - "sizes": "16x16" - } , { - "src": "windows11/Square44x44Logo.targetsize-20.png", - "sizes": "20x20" - } , { - "src": "windows11/Square44x44Logo.targetsize-24.png", - "sizes": "24x24" - } , { - "src": "windows11/Square44x44Logo.targetsize-30.png", - "sizes": "30x30" - } , { - "src": "windows11/Square44x44Logo.targetsize-32.png", - "sizes": "32x32" - } , { - "src": "windows11/Square44x44Logo.targetsize-36.png", - "sizes": "36x36" - } , { - "src": "windows11/Square44x44Logo.targetsize-40.png", - "sizes": "40x40" - } , { - "src": "windows11/Square44x44Logo.targetsize-44.png", - "sizes": "44x44" - } , { - "src": "windows11/Square44x44Logo.targetsize-48.png", - "sizes": "48x48" - } , { - "src": "windows11/Square44x44Logo.targetsize-60.png", - "sizes": "60x60" - } , { - "src": "windows11/Square44x44Logo.targetsize-64.png", - "sizes": "64x64" - } , { - "src": "windows11/Square44x44Logo.targetsize-72.png", - "sizes": "72x72" - } , { - "src": "windows11/Square44x44Logo.targetsize-80.png", - "sizes": "80x80" - } , { - "src": "windows11/Square44x44Logo.targetsize-96.png", - "sizes": "96x96" - } , { - "src": "windows11/Square44x44Logo.targetsize-256.png", - "sizes": "256x256" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-16.png", - "sizes": "16x16" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-20.png", - "sizes": "20x20" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-24.png", - "sizes": "24x24" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-30.png", - "sizes": "30x30" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-32.png", - "sizes": "32x32" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-36.png", - "sizes": "36x36" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-40.png", - "sizes": "40x40" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-44.png", - "sizes": "44x44" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-48.png", - "sizes": "48x48" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-60.png", - "sizes": "60x60" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-64.png", - "sizes": "64x64" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-72.png", - "sizes": "72x72" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-80.png", - "sizes": "80x80" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-96.png", - "sizes": "96x96" - } , { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-256.png", - "sizes": "256x256" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png", - "sizes": "16x16" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png", - "sizes": "20x20" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png", - "sizes": "24x24" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png", - "sizes": "30x30" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png", - "sizes": "32x32" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png", - "sizes": "36x36" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png", - "sizes": "40x40" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png", - "sizes": "44x44" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png", - "sizes": "48x48" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png", - "sizes": "60x60" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png", - "sizes": "64x64" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png", - "sizes": "72x72" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png", - "sizes": "80x80" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png", - "sizes": "96x96" - } , { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png", - "sizes": "256x256" - } , { - "src": "android/android-launchericon-512-512.png", - "sizes": "512x512" - } , { - "src": "android/android-launchericon-192-192.png", - "sizes": "192x192" - } , { - "src": "android/android-launchericon-144-144.png", - "sizes": "144x144" - } , { - "src": "android/android-launchericon-96-96.png", - "sizes": "96x96" - } , { - "src": "android/android-launchericon-72-72.png", - "sizes": "72x72" - } , { - "src": "android/android-launchericon-48-48.png", - "sizes": "48x48" - } , { - "src": "ios/16.png", - "sizes": "16x16" - } , { - "src": "ios/20.png", - "sizes": "20x20" - } , { - "src": "ios/29.png", - "sizes": "29x29" - } , { - "src": "ios/32.png", - "sizes": "32x32" - } , { - "src": "ios/40.png", - "sizes": "40x40" - } , { - "src": "ios/50.png", - "sizes": "50x50" - } , { - "src": "ios/57.png", - "sizes": "57x57" - } , { - "src": "ios/58.png", - "sizes": "58x58" - } , { - "src": "ios/60.png", - "sizes": "60x60" - } , { - "src": "ios/64.png", - "sizes": "64x64" - } , { - "src": "ios/72.png", - "sizes": "72x72" - } , { - "src": "ios/76.png", - "sizes": "76x76" - } , { - "src": "ios/80.png", - "sizes": "80x80" - } , { - "src": "ios/87.png", - "sizes": "87x87" - } , { - "src": "ios/100.png", - "sizes": "100x100" - } , { - "src": "ios/114.png", - "sizes": "114x114" - } , { - "src": "ios/120.png", - "sizes": "120x120" - } , { - "src": "ios/128.png", - "sizes": "128x128" - } , { - "src": "ios/144.png", - "sizes": "144x144" - } , { - "src": "ios/152.png", - "sizes": "152x152" - } , { - "src": "ios/167.png", - "sizes": "167x167" - } , { - "src": "ios/180.png", - "sizes": "180x180" - } , { - "src": "ios/192.png", - "sizes": "192x192" - } , { - "src": "ios/256.png", - "sizes": "256x256" - } , { - "src": "ios/512.png", - "sizes": "512x512" - } , { - "src": "ios/1024.png", - "sizes": "1024x1024" - } - ], - "screenshots": [ { - "src": "screenshot1.webp", - "sizes": "1280x720", - "type": "image/webp" - } , { - "src": "screenshot2.webp", - "sizes": "1280x720", - "type": "image/webp" - } - ], - "theme_color": "#000000", - "background_color": "#000000", - "start_url": "sign-in", - "display": "fullscreen", - "orientation": "any", - "categories": [ - "productivity" - ], - "iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96", - "description": "Open Source kanban with MIT license", - "dir": "auto", - "scope": "https://boards.wekan.team", - "prefer_related_applications": false, - "display_override": [ - "fullscreen" - ] - } ` - reverse_proxy 127.0.0.1:3025 -} -``` - -*** - -[Caddy OAuth2 with Let's Encrypt SSL example](OAuth2) - -*** - -## CloudFlare free wildcard SSL *start* - -Also works with other SSL certs. - -### 1) Requirements: You have changed nameservers to CloudFlare. - -### 2) Get CloudFlare SSL wildcard Origin Certificate - -Go to CloudFlare login/example.com/Crypto/Origin Certificates. -Create and download certs for `*.example.com, example.com` - -### 3) Create directory /var/snap/wekan/common/certs -``` -sudo su -cd /var/snap/wekan/common -mkdir certs -cd certs -``` -### 4) Create cert file -Create file: `example.com.pem` with content of CloudFlare Origin Certificates. -``` -nano example.com.pem -``` -There add certs: -``` ------BEGIN PRIVATE KEY----- ------END PRIVATE KEY----- ------BEGIN CERTIFICATE----- ------END CERTIFICATE----- -``` - -Then Save: Ctrl-o Enter - -Then Exit: Ctrl-x. - -### 5) Set permissions rw-r--r-- to example.com.pem: -``` -chmod 644 example.com.pem -``` - -### 6) Edit Caddy webserver config -``` -sudo nano /var/snap/wekan/common/Caddyfile -``` -There change config: -``` -http://example.com https://example.com { - tls { - load /var/snap/wekan/common/certs - alpn http/1.1 - } - proxy / localhost:3001 { - websocket - transparent - } -} -``` -Save: Ctrl-o Enter - -Exit: Ctrl-x - -Enable Caddy: -``` -sudo snap set wekan caddy-enabled='true' -sudo snap set wekan port='3001' -sudo snap set wekan root-url='https://example.com' -``` - -### 7) Enable CloudFlare SSL - -Click CloudFlare login/example.com/DNS. - -Check that status of your domains have orange cloud color, so traffic goes through CloudFlare SSL. - -Click CloudFlare login/example.com/Page Rules. -Set for example: -``` -1) http://example.com/* -Always Use HTTPS -2) http://*.example.com/* -Always use HTTPS -``` -Optionally, if you want caching: -``` -3) *example.com/* -Cache Level: Cache Everything -``` -## CloudFlare free wildcard SSL *end* - -*** - -## Other config stuff - -[List of Let's Encrypt implementations](https://community.letsencrypt.org/t/list-of-client-implementations/2103) - -## Caddy webserver config with logs - -Create directory for caddy, website and logs: -```bash -mkdir -p ~/caddy/example.com ~/caddy/logs -``` - -Add this config to ~/caddy/Caddyfile - -There's also some extra examples. - -```bash -example.com { - root /home/username/caddy/example.com - # Static website, markdown or html - ext .md .html - - proxy /wekan 127.0.0.1:3000 { - websocket - } - - log /home/username/caddy/logs/wekan-access.log { - rotate { - size 100 # Rotate after 100 MB - age 7 # Keep log files for 7 days - keep 52 # Keep at most 52 log files - } - } - errors { - log /home/username/caddy/logs/wekan-error.log { - size 100 # Rotate after 100 MB - age 7 # Keep log files for 7 days - keep 52 # Keep at most 52 log files - } - } -} - -example.com/files { - root /home/username/files - # View files in directory, has sorting in browser - browse -} -``` - -Install Caddy. Change username to what user you run caddy, like in /home/username , and Let's Encrypt email to your email adderess: - -```bash -# Install caddy with some plugins -curl https://getcaddy.com | bash -s personal http.ipfilter,http.mailout,http.ratelimit,http.realip -``` - -# Give permissions to caddy to bind 80 and 443 - -``` -sudo setcap cap_net_bind_service=+ep /usr/local/bin/caddy -``` - -And this service file for Caddy to /etc/systemd/system/caddy@.service - -```bash -; see `man systemd.unit` for configuration details -; the man section also explains *specifiers* `%x` - -[Unit] -Description=Caddy HTTP/2 web server %I -Documentation=https://caddyserver.com/docs -After=network-online.target -Wants=network-online.target -Wants=systemd-networkd-wait-online.service - -[Service] -; run user and group for caddy -User=username -Group=username -ExecStart=/home/username/caddy/caddy -conf=/home/username/caddy/Caddyfile -agree -email="admin@example.com" -Restart=on-failure -StartLimitInterval=86400 -StartLimitBurst=5 -RestartSec=10 -ExecReload=/bin/kill -USR1 $MAINPID -; limit the number of file descriptors, see `man systemd.exec` for more limit settings -LimitNOFILE=1048576 -LimitNPROC=64 -; create a private temp folder that is not shared with other processes -PrivateTmp=true -PrivateDevices=true -ProtectSystem=full -CapabilityBoundingSet=CAP_NET_BIND_SERVICE -AmbientCapabilities=CAP_NET_BIND_SERVICE -NoNewPrivileges=true - -[Install] -WantedBy=multi-user.target -``` - -Start caddy and enable service: -``` -sudo systemctl daemon-reload -sudo systemctl start caddy@username -sudo systemctl enable caddy@username -``` diff --git a/docs/Webserver/Cron.md b/docs/Webserver/Cron.md deleted file mode 100644 index 469fb5433..000000000 --- a/docs/Webserver/Cron.md +++ /dev/null @@ -1,57 +0,0 @@ -(TODO: Try to integrate this inside WeKan Snap Candidate, or change code so that these would not be needed.) - -WeKan has some memory leaks. To prevent WeKan becoming slow, this Cron script restarts WeKan Snap once every hour. - -1) Edit /root/hourly.sh - -``` -sudo su - -apt -y install nano cron - -nano /root/hourly.sh -``` -2) There add this text: -``` -snap stop wekan.wekan - -snap start wekan.wekan - -# Wait 10 seconds -sleep 10 - -# Disable telemetry -/snap/wekan/current/usr/bin/mongosh wekan --eval 'disableTelemetry();' --port 27019 - -# Snap: Disable apparmor="DENIED" at syslog -# https://github.com/wekan/wekan/issues/4855 -/snap/wekan/current/usr/bin/mongosh wekan \ ---eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' \ ---port 27019 - -# Delete incomplete uploads so that they would not prevent starting WeKan -/snap/wekan/current/usr/bin/mongosh wekan \ ---eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' \ ---port 27019 -``` -3) Save and exit nano: Ctrl-o Enter Ctrl-x Enter - -4) Make hourly.sh script executeable, and edit cron: -``` -chmod +x /root/hourly.sh - -export EDITOR=nano - -crontab -e -``` -There at bottom, add this line, that will restart WeKan hourly, and log to textfile: -``` -0 * * * * /root/hourly.sh >> /root/hourly-log.txt 2>&1 -``` -5) Save and exit nano: Ctrl-o Enter Ctrl-x Enter - -6) You can also list content of cron: - -``` -crontab -l -``` \ No newline at end of file diff --git a/docs/Webserver/Local-self-signed-TLS.md b/docs/Webserver/Local-self-signed-TLS.md deleted file mode 100644 index 89f6d4603..000000000 --- a/docs/Webserver/Local-self-signed-TLS.md +++ /dev/null @@ -1,121 +0,0 @@ -From [ksaadDE](https://github.com/ksaadDE) at https://github.com/wekan/wekan-snap/issues/167 - -Hi, - -I've read that in e.g. https://github.com/wekan/wekan-snap/issues/118 there is assumed that local https wouldn't work (even not for ips). I provide a small guide to fix this. - -*Despite the fact that you should **never use self-signed certs in production**. You mess up your TLS Certificate Verification/Validation and therefore exposing yourself to various risks in cyberspace. **For limited local uses it can be valid!*** - -# General Config -In both cases your `/etc/hosts` should have *a* entry that routes your "domain" `wekan.local` to `127.0.0.1` (=localhost) like this: -``` -127.0.0.1 wekan.local -``` -You need to enable caddy `sudo snap set wekan caddy-enabled='true'` and set the `root-url` to https://wekan.local. -Keep in mind that 3001 is the wekan webapp port, not the caddy port(!). Caddy will use 80 and 443. - -# Option 1: `tls self_signed` 7d Dev Certificate (Caddy/dev/null - -if [ ! -f "$CERTFILE" ]; then - echo "[-] can't fiund '$CERTFILE' seemingly the generation failed"; - exit -fi - -if [ ! -f "$KEYFILE" ]; then - echo "[-] can't find '$KEYFILE' seemingly the generation failed"; - exit -fi - -echo "[+] completed TLS-Cert generation"; - -# restart snap wekan && wekan.caddy -echo "[+] restarting snap wekan service"; -sudo snap restart wekan &>/dev/null -sudo snap restart wekan.caddy &>/dev/null -echo "[+] completed restart snap wekan service"; -echo " "; -echo "[i] please check https://$SERVERNAME/" -``` -This file generates two files `certificate.pem` and `key.pem`, then checks their existence in `/var/snap/wekan/common/certs/` (same dir). If the CERTFILE or KEYFILE already existing, it will move the existing files to .old. Then it restarts the wekan services wekan and caddy. Afterwards it shows you the address to visit. - -Make the sh file executable `sudo chmod u+x ./runfiles.sh` - -Finally, run `sudo ./runfiles.sh` and it should work at the address being recommended to visit. - - -### Things to keep note of -- Don't try to use `load` it won't work! -- Don't mess around without a SERVERNAME... it won't work -- Don't use the default caddy file with this tls subdirectives. It won't work and break into No Connection or `PR_END_OF_FILE_ERROR` (firefox) -- Caddy has bugs with self_signed certificates for Caddy < 2 (below caddyv2) -- **FIREWALL CONFIG:** Don't forget to block in and out 3001 for outside connections (e.g. using ufw or nfttables / iptables) - -### Sources: -- https://linuxize.com/post/creating-a-self-signed-ssl-certificate/ (openssl cmd) -- https://caddy.community/t/proper-way-to-utilize-self-signed-certificates/7264 (reading docs and issues of caddy) -- https://caddy.community/t/tls-self-signed-not-working/5057 -- - https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config (Wekan Docs) -- https://github.com/wekan/wekan-snap/issues/118 -- Snap Wekan Docs - -Greetings from Germany <3 \ No newline at end of file diff --git a/docs/Webserver/Nginx-Webserver-Config.md b/docs/Webserver/Nginx-Webserver-Config.md deleted file mode 100644 index 70d35e34f..000000000 --- a/docs/Webserver/Nginx-Webserver-Config.md +++ /dev/null @@ -1,253 +0,0 @@ -## If you get 'Welcome to Nginx' screen after setting up config - -From https://github.com/wekan/wekan/issues/3190 - -I installed Nginx using the instructions on the [AWS wiki](AWS) - -I followed the [the Nginx wiki](Nginx-Webserver-Config) and reached a point where everything was installed correctly and 'sudo nginx -t' was passing (with warnings), but when I went to the root-url I was still getting the generic welcome screen from nginx saying 'Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required' - -I got stuck here for a very long time, fiddling with my config files, until I found [this answer](https://stackoverflow.com/questions/11426087/nginx-error-conflicting-server-name-ignored). In my install, 'default' files had been automatically created in /etc/nginx/conf.d/ and in /etc/nginx/sites-available/ - -Once I deleted those files, nginx was working instantly. Propose a new step could be added to the wiki, before the 'sudo nginx -t' step, instructing users to check whether they have those 'default' files and delete them if they do. - -## CentOS 7 - -If you use Nginx in front of Wekan on CentOS 7, please try: `setsebool -P httpd_can_network_connect 1`. This should allow nginx or any other webserver to connect to a container. Please [**do not disable SELinux**](https://github.com/wekan/wekan/issues/2792#issuecomment-630222315) - -## Nginx requires unsafe-eval for WeKan date format - -[Source](https://github.com/wekan/wekan/issues/4220#issuecomment-990243775) - -Thank you for your answers. I figured out that in my nginx config I needed to add allow `unsafe-eval`: - -Old: -``` -add_header Content-Security-Policy "default-src 'self' 'unsafe-inline'"; -``` -Now: -``` -add_header Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'"; -``` -This solves my problem. - -Thanks - -## Attachment file size - -[Source](https://github.com/wekan/wekan/issues/2103#issuecomment-455014303) - -`/etc/nginx.conf`: -``` -http { - ... - client_max_body_size 100M; -} -``` - -## Others - -[Meteor.js on Ubuntu 14.04 with nginx](https://www.digitalocean.com/community/tutorials/how-to-deploy-a-meteor-js-application-on-ubuntu-14-04-with-nginx) - -[List of Let's Encrypt implementations](https://community.letsencrypt.org/t/list-of-client-implementations/2103) - -[Certbot: Let's Encrypt SSL for Nginx](https://certbot.eff.org) - -Below config is tested with Debian 9, it did receive A+ rating at ssllabs.com test. - -## Nginx webserver configs - -If you use Wekan at sub url, change / to /wekan . - -### /etc/nginx/conf.d/example.com.conf or /etc/nginx/sites-available/example.com.conf: - -``` -# this section is needed to proxy web-socket connections -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - -# HTTP -server { - listen 80; # if this is not a default server, remove "default_server" - listen [::]:80 ipv6only=on; - - server_name example.com; - - # redirect non-SSL to SSL - location / { - rewrite ^ https://example.com$request_uri? permanent; - } -} - -# HTTPS server -server { - listen 443 ssl http2; # we enable HTTP/2 here (previously SPDY) - server_name example.com; # this domain must match Common Name (CN) in the SSL certificate - - ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; - - # If your application is not compatible with IE <= 10, this will redirect visitors to a page advising a browser update - # This works because IE 11 does not present itself as MSIE anymore - if ($http_user_agent ~ "MSIE" ) { - return 303 https://browser-update.org/update.html; - } - - # Pass requests to Wekan. - # If you have Wekan at https://example.com/wekan , change location to: - # location /wekan { - location / { - # proxy_pass http://127.0.0.1:3001/wekan; - proxy_pass http://127.0.0.1:3001; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; # allow websockets - proxy_set_header Connection $connection_upgrade; - proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP - - # this setting allows the browser to cache the application in a way compatible with Meteor - # on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days) - # the root path (/) MUST NOT be cached - #if ($uri != '/wekan') { - # expires 30d; - #} - } -} -``` - -### /etc/nginx/nginx.conf - -``` -user www-data; -worker_processes auto; -pid /run/nginx.pid; -include /etc/nginx/modules-enabled/*.conf; - -events { - worker_connections 768; - # multi_accept on; -} - -http { - - ## - # Basic Settings - ## - - ## Max attachment size that can be uploaded to Wekan: - client_max_body_size 100M; - sendfile on; - tcp_nopush on; - tcp_nodelay on; - types_hash_max_size 2048; - server_tokens off; - set_real_ip_from 0.0.0.0/32; # All addresses get a real IP. - real_ip_header X-Forwarded-For; - limit_conn_zone $binary_remote_addr zone=arbeit:10m; - client_body_timeout 60; - client_header_timeout 60; - keepalive_timeout 10 10; - send_timeout 60; - reset_timedout_connection on; - - # server_names_hash_bucket_size 64; - # server_name_in_redirect off; - - include /etc/nginx/mime.types; - default_type application/octet-stream; - - ## - # SSL Settings - ## - - ssl_protocols TLSv1.2 TLSv1.1 TLSv1; # Dropping SSLv3, ref: POODLE - ssl_prefer_server_ciphers on; - ssl_session_cache shared:SSL:30m; - ssl_session_timeout 1d; - ssl_ciphers ECDH+aRSA+AESGCM:ECDH+aRSA+SHA384:ECDH+aRSA+SHA256:ECDH:EDH+CAMELLIA:EDH+aRSA:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA; - ssl_dhparam /etc/ssl/dh_param.pem; - ssl_ecdh_curve secp384r1; - ssl_stapling on; - ssl_stapling_verify on; - add_header X-XSS-Protection '1; mode=block'; - add_header X-Frame-Options SAMEORIGIN; - add_header Strict-Transport-Security 'max-age=31536000'; - add_header X-Content-Options nosniff; - add_header X-Micro-Cache $upstream_cache_status; - - ## - # Logging Settings - ## - - access_log /var/log/nginx/access.log; - error_log /var/log/nginx/error.log; - - ## - # Gzip Settings - ## - - gzip on; - gzip_disable "msie6"; - gzip_buffers 16 8k; - gzip_comp_level 1; - gzip_http_version 1.1; - gzip_min_length 10; - gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/x-icon application/vnd.ms-fontobject font/opentype application/x-font-ttf; - gzip_vary on; - gzip_proxied any; # Compression for all requests. - - ## - # Virtual Host Configs - ## - - include /etc/nginx/conf.d/*.conf; - include /etc/nginx/sites-enabled/*; -} -``` - -# Installing - -If you have example.com.conf at /etc/nginx/sites-available/example.com.conf, make symlink to sites-available: - -Nginx - -``` -sudo apt install nginx -sudo systemctl start nginx -sudo systemctl enable nginx # service -``` - -Nginx configs - -``` -sudo su -cd /etc/nginx/sites-enabled -ln -s ../sites-available/example.com.conf example.com.conf -``` - -:heavy_exclamation_mark: Check if the user "www-data" exist on your system, if no, you can set "nginx" user in /etc/nginx/nginx.conf - -Test nginx config for errors: - -``` -sudo nginx -t -``` - -If config is OK, take it into use: - -``` -sudo systemctl reload nginx (or: sudo service nginx reload) -``` - -Wekan Snap - -``` -sudo apt install snapd -sudo snap install wekan -sudo snap set wekan root-url="https://example.com/wekan" -sudo snap set wekan port="3001" -sudo systemctl restart snap.wekan.mongodb -sudo systemctl restart snap.wekan.wekan -``` - -More info about backups etc at https://github.com/wekan/wekan-snap/wiki diff --git a/docs/Webserver/Scaling.md b/docs/Webserver/Scaling.md deleted file mode 100644 index 104ffa87f..000000000 --- a/docs/Webserver/Scaling.md +++ /dev/null @@ -1,87 +0,0 @@ -## How We Scaled Meteor JS to Handle 30,000 Concurrent Users at Propiedata - -- https://forums.meteor.com/t/first-steps-on-scaling-meteor-js/62570 - -## Meteor Galaxy Guide - -- https://galaxy-guide.meteor.com/scaling - -## Pods - -Reply from customer at 2023-09-29 about WeKan v7.08: - -> The good thing is that that new version is working really well and being able to spread the load between 4 OpenShift pods changes everything. - -Maybe related to these improvements: -- https://github.com/wekan/wekan/pull/5136 -- https://github.com/wekan/wekan/issues/5000 - -[Optimizing Nested Imports](https://zodern.me/posts/nested-imports/) - -## Scaling [Wekan Snap with Automatic Updates](https://github.com/wekan/wekan-snap/wiki/Install) - -Recommended specs: - -- Try to add [Redis Oplog](https://github.com/cult-of-coders/redis-oplog) like [this](Emoji#how-you-could-add-another-plugin) -- One bare metal server (or VM on server that does not have oversubscription), for example [Fastest: UpCloud](https://upcloud.com), [Hetzner](https://www.hetzner.com/?country=en), [Packet](https://packet.com). -- NVME or SSD disk. Speed difference when opening Wekan board: SSD 2 seconds, HDD 5 minutes. -- Minimum 60 GB total disk space, 40 GB free disk space, [Daily Backups](Backup) to elsewhere, monitoring and alerting if server has low disk space, because disk full causes database corruption. -- Newest Ubuntu 64bit -- 4GB RAM minimum. See with `free -h` is server is using any swap. If it is, add more RAM. -- some performance optimized CPUs/cores. 2 minimum, 4 is better. See with `nproc` how many CPUs you have. Look with `top` or `htop` is server using max 100% CPUs, if it is, add higher performance optimized CPUs (or more CPUs). But if it looks like Wekan not using some of those added CPUs, then adding more CPUs is not useful. -- Do not store attachments at database, like uploading file to card. Have markdown links to files, like `[Document](https://example.com/files/document.doc)`. Click `Wekan board` => `☰` => `⚙` => `Board Settings` => `Card Settings`. There uncheck `[_] Attachments` to hide attachments at card. -- Click Wekan `Admin Panel / Settings / Accounts / Hide System Messages of All Users`. If someone needs to show system messages, they can click slider at opened card to show them. Sometime later, if many have manually enabled showing system messages, click that same button at Admin Panel again. -- Check Webhooks: Do you have `Admin Panel / Settings / Global Webhooks` (that sends most board actions to webhook) or at each board, per-board webhooks (that sends most one board actions to webhook, more info at [wiki right menu Webhooks](https://github.com/wekan/wekan/wiki)) at `Wekan board` => `☰` => `⚙` => `Outgoing Webhooks`. You also see this with [DBGate](Backup#dbgate-open-source-mongodb-gui) at port localhost:27019 / database: wekan / table: integrations. Each webhook should [immediately return 200 response before processing any data](https://github.com/wekan/wekan/issues/3575), because otherwise it will slow down Wekan a lot. -- In future Wekan version will be added as default: - - [Setting `NODE_OPTIONS: --max_old_space_size=4096`](https://github.com/wekan/wekan/issues/3585#issuecomment-782431177) - -Minimum specs: -- [RasPi3](Raspberry-Pi), 1 GB RAM, external SSD disk for Wekan and MongoDB. -- While it works, it's only for minimal usage. -- Newer RasPi recommended for minimum use. - - -## Alternatives - -At https://wekan.github.io / Download / Kubernetes or OpenShift, etc - - -*** - -# OLD INFO BELOW: - -## Story: MongoDB on bare metal - -From Tampa: - -Hey, - -... (about other tries) ... - -Last month I threw all this out, recreated all the boards and connected them centrally to a single instance of mongo running on a dedicated server with custom hardware. This was like stepping into the light almost. Since then not a single machine has sent me a mail that it reached 50% usage. It seems insignificant, but the results speak for themselves. - -The cloud instances are all shared 1vcpu, 1GB, 10GB storage, they just run wekan natively piped to the background, no docker, no snap, native install. They are connected to the central DB server sitting in the same datacenter. I stuffed a Raid6 with solid disks in that and gave it a hardware controller with a nice big cache. The latency being below 5ms over the network and the DB server having plenty of IO to go around it almost never has a queue of commits going to it and from the cache and IO use I suspect I could grow this tenfold easily. - -With this setup each board essentially runs on half the hardware, in terms of cost anyways, yet it works so much better. There seems to be some magic ingredient here, being really fast IO for mongo that reduces system load of wekan by such a large amount that is can practically run even large boards with 40+ concurrent users on the least hardware most cloud providers even offer. With the central server setting up backups has become so much easier, I no longer need to wait for low usage to do backups either. - -## Scaling to more users - -For any large scale usage, you can: - -a) scale with Docker Swarm, etc - -b) for big reads or writes, do it on replica - -c) for big reads or writes, do it at small amounts at a time, at night, or when database CPU usage seems to be low - -Related to docker-compose.yml at https://github.com/wekan/wekan , using Docker Swarm: - -[How to scale to more users](https://github.com/wekan/wekan/issues/2711#issuecomment-601163047) - -[MongoDB replication docs](https://docs.mongodb.com/manual/replication/) - -[MongoDB compatible databases](https://github.com/wekan/wekan/issues/2852) - -[AWS](AWS) - -[Azure OIDC](Azure) \ No newline at end of file diff --git a/docs/Webserver/Settings.md b/docs/Webserver/Settings.md deleted file mode 100644 index d142e0be7..000000000 --- a/docs/Webserver/Settings.md +++ /dev/null @@ -1,59 +0,0 @@ -## Standalone Wekan Settings: Snap, Docker, Source etc (not Sandstorm) - -## ROOT_URL / root-url -- See https://github.com/wekan/wekan/issues/4803 -- Docker/Source/Bundle like this, no quotes, big letters, underscore: `ROOT_URL=http://192.168.0.100` -- **Snap** like this, single quotes, small letters: `sudo snap set wekan root-url='http://192.168.0.100'` - -## Webserver config -* [Nginx](Nginx-Webserver-Config) -* [Apache](Apache) -* [Caddy](Caddy-Webserver-Config) - -Examples: - -1) nginx SSL or without SSL, available at internet: -- root-url='https://example.com' or https://example.com/something or https://something.example.com , or with http -- port='3001' -- [Nginx example, proxying to local port 3001](Nginx-Webserver-Config) -=> Wekan at https://example.com - -2) only wekan, no SSL, internal lan, caddy not enabled: -- root-url='http://192.168.1.150' -- port='80' -=> Wekan locally http://192.168.1.150 - -3) only wekan, no SSL, internal lan, caddy not enabled, wekan at different port: -- root-url='http://192.168.1.150:5000' -- port='5000' -=> Wekan locally http://192.168.1.150:5000 - -4) wekan's caddy SSL, available at Internet: -- root-url='https://example.com' or https://example.com/something or https://something.example.com -- port='3001' -- [Caddyfile example](https://github.com/wekan/wekan-snap/wiki/Install#7-replace-first-top-line-of-text-with-subdomainexamplecomsuburl-without-any-beginning-of-httphttps) -=> Wekan at https://example.com - -Wekan runs http server on local port, so it is without SSL. To get SSL, some webserver like Caddy and Nginx that have SSL, can proxy to local Wekan http port where node.js runs. - -## Admin Panel - -First registered Wekan user will get [Admin Panel](Features) on new -Docker and source based installs. You can also on MongoDB -[enable Admin Panel](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v0111-rc2-2017-03-05-wekan-prerelease) and [change you as board admin](https://github.com/wekan/wekan/issues/1060#issuecomment-310545976). - -## LAN + VPN - -[Using same database for both LAN and VPN Wekan](https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml#L86-L100) - -## Proxy - -[Using Proxy](https://github.com/wekan/wekan/issues/1480) - -## Email - -[Troubleshooting Mail](Troubleshooting-Mail). For Exchange, you can use [DavMail](http://davmail.sourceforge.net), Wekan SMTP => DavMail => Exchange. - -## RAM usage - -[RAM usage](https://github.com/wekan/wekan/issues/1088#issuecomment-311843230) \ No newline at end of file diff --git a/docs/Webserver/Traefik-and-self-signed-SSL-certs.md b/docs/Webserver/Traefik-and-self-signed-SSL-certs.md deleted file mode 100644 index a8eba7fd3..000000000 --- a/docs/Webserver/Traefik-and-self-signed-SSL-certs.md +++ /dev/null @@ -1,202 +0,0 @@ -Running Wekan Mongodb with Traefik as a reverse proxy with a self-signed cert as containers on a single docker host. - -## Background - -Craig had been using nginx as a reverse proxy for a restyaboard install, but it was a bit opaque (at least to him) as to how to configure it to reverse proxy for multiple services, so he thought he'd try traefik and use Wekan as the service as a learning exercise and compare the two. - -This was done to demo using containers as services (he works in an older style org and they're still stuck in a vmware/vm mentality). - -Updated 5-10-18 for wekan v1.52 and mongodb 3.2.21 -## Install - -Note: my login is a member of the docker group on this docker host so I can exec docker commands. - -Created directories: -``` -sudo mkdir -p /opt/traefik/certs -sudo chmod 755 /opt/traefik -sudo chmod 750 /opt/traefik/certs -``` - -Created a self-signed cert and key for the application (its on an internal network so didn't want to mess with the Letsencrypt stuff that requires access to the internet and registered dns domains): - -``` -sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout wekan1.key -out wekan1.crt -``` - -Copied these to /opt/traefik/certs and set permissions: -``` -chmod 644 /opt/traefik/certs/wekan1.crt - -chmod 600 /opt/traefik/certs/wekan1.key -``` - -Create a docker network web to use for traefik - this config doesn't require any ports exposed for wekan-app or wekan-db on the docker-host: - -``` -docker network create web -``` - -Created an internal dns entry wekan.myinternaldomain.org that is a cname for the docker host (i.e. Wekan resolves to the ip address of the docker host) - note that this config assumes that ports 80 and 443 don't have any processes from the docker host listening on those ports. If you don't have internal dns - put this in the relevant hosts file on the systems that will access the app, including the docker host. - -## Traefik config - -added the following to `/opt/traefik/docker-compose.yml` - -``` -version: '2' - -services: - traefik: - image: traefik:latest - ports: - - 80:80 - - 443:443 - - 8080:8080 - networks: - - web - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - /opt/traefik/traefik.toml:/traefik.toml - - /opt/traefik/certs/:/certs/ - container_name: traefik - -networks: - web: - external: true -``` - -Created `/opt/traefik/traefik.toml` with: - -``` -debug = false - -logLevel = "DEBUG" -defaultEntryPoints = ["https","http"] - -[entryPoints] - [entryPoints.http] - address = ":80" - [entryPoints.http.redirect] - entryPoint = "https" - [entryPoints.https] - address = ":443" - [entryPoints.https.tls] - [[entryPoints.https.tls.certificates]] - certFile = "/certs/wekan1.crt" - keyFile = "/certs/wekan1.key" - [entryPoints.eightzero] - address = ":8080" - -[api] -entrypoint = "eightzero" - - -[retry] - -[docker] -endpoint = "unix:///var/run/docker.sock" -domain = "docker.localhost" -watch = true -exposedbydefault = false -``` - -Comments - `docker-compose.yml`: - -The image is set as the latest for traefik - you may want to tie it to a particular version. Also added in the entrypoint for the trafik api (8080) - -To test: - -``` -cd /opt/traefik - -docker-compose up -``` - -This will ouput to the terminal till you are ready to run it in the background with `docker-compose up -d` . (stop the container running with Ctrl-c) - -It exposes ports 80, 443 and 8080 on the docker host so you can check by webbing to `` but you should get a 404 error until wekan is up. -``` -curl -H Host:wekan.myinternaldomain.org http://localhost -``` -mounting `/var/run/docker.sock:/var/run/docker.sock` on the container gives access to docker config so that traefik can be dynamic (thats more advanced) see https://traefik.io/ for extensive docs. - -traefik.toml is the config for traefik. It sets up port 80 to redirect to 443. This is a very simple config - there's a whole lot more that you can do. - -endpoint under `[docker]` is where changes are read from. - -- domain - default dns domain used. -- watch = true - watch docker changes. -- exposedbydefault = false - If set to false, containers that don't have `traefik.enable=true` will be ignored. (I haven't tried it with other containers yet so I've set it to false). - -Now for Wekan: - -This fairly standard with the addition of some labels(handy notes have been removed for brevity) - -``` -version: '2' - -services: - - wekandb: - image: mongo:3.2.21 - container_name: wekan-db - restart: always - command: mongod --smallfiles --oplogSize 128 - networks: - - web - expose: - - 27017 - volumes: - - wekan-db:/data/db - - wekan-db-dump:/dump - wekan: - image: quay.io/wekan/wekan:v1.52 - container_name: wekan-app - restart: always - networks: - - web - # traefik magic stuff here - labels: - - "traefik.backend=wekan-app" - - "traefik.docker.network=web" - - "traefik.frontend.rule=Host:wekan.myinternaldomain.org" - - "traefik.enable=true" - - "traefik.port=8080" - - "traefik.default.protocol=http" - #note: mail url points to ip address of docker host which has postfix running as a relay - # for docker apps. ping me at email: silvacraig@gmail.com if you want the postfix config. - # note here that an ip address is used instead of the servce name in the MONGO_URL - - # this is a bug that I have to work out. To identify the IP address use docker network - # inspect web when the wekandb is running - environment: - - MONGO_URL=mongodb://172.xx.xx.2:27017/wekan - - ROOT_URL=http://wekan.myinternaldomain.org - - MAIL_URL=smtp://172.17.0.1:25/ - - MAIL_FROM='Wekan Support - ' - # newer environment variables: - - BROWSER_POLICY_ENABLED=true - - TRUSTED_URL='' - - WEBHOOKS_ATTRIBUTES='' - depends_on: - - wekandb - -volumes: - wekan-db: - driver: local - wekan-db-dump: - driver: local - -networks: - web: - external: true -``` - -One this is done - run wekan with: -``` -docker-compose up -``` -This will run with logging output to the console - once its running ok - CTRL-C and start it up again with: -``` -docker-compose up -d -``` \ No newline at end of file diff --git a/docs/_Footer.md b/docs/_Footer.md deleted file mode 100644 index 5cfb23977..000000000 --- a/docs/_Footer.md +++ /dev/null @@ -1 +0,0 @@ -Wekan - OpenSource Kanban \ No newline at end of file diff --git a/docs/_Sidebar.md b/docs/_Sidebar.md deleted file mode 100644 index a527809b4..000000000 --- a/docs/_Sidebar.md +++ /dev/null @@ -1,259 +0,0 @@ -# Wekan - -# General - -* [Deep Dive Into WeKan](Deep-Dive-Into-WeKan) -* [Meteor WeKan Roadmap](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license) - board at Wekan demo -* [Multiverse WeKan Roadmap](https://github.com/wekan/wekan/wiki/WeKan-Multiverse-Roadmap) -* [Docs/Manual](https://github.com/wekan/wekan/discussions/4522) -* [Change Language](Change-Language) -* [Forgot Password](Forgot-Password) -* [About](https://github.com/wekan/wekan/wiki) -* [Test Edge](Test-Edge) -* [WeKan Design Principles](Design-Principles) -* [FAQ](FAQ) -* [IRC FAQ](IRC-FAQ) - answers to questions asked at IRC -* [Team](Team) -* [Press](Press) -* [Blog](https://blog.wekan.team) -* [Wekan vs Trello vs Restyaboard](Wekan-vs-Trello-vs-Restyaboard) -* [Results of Survey 2020-01](https://blog.wekan.team/2020/06/results-of-wekan-survey-2020-01/) - -# Fake: Not WeKan kanban - -* [Hall of Shame: Fake companies that are NOT WeKan kanban](https://github.com/wekan/wekan/wiki/Hall-of-Shame:-Fake-companies) -* [Others NOT related to WeKan kanban](NOT-related-to-Wekan) - -# Security - -* [Allow private boards only: Disable Public Boards](Allow-private-boards-only) -* [Security Disclosure and details of Security in Wekan](https://github.com/wekan/wekan/blob/main/SECURITY.md) -* [Security issues](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3ASecurity) -* [Password Hashing](Password-Hashing) - -# Scaling - -* [Cron: Hourly restart WeKan, because of memory leaks](Cron) -* [Maybe: Add more RAM to Node.js to prevent crash](https://github.com/wekan/wekan/issues/3585) -* [Clustering AWS etc](AWS) -* [Scaling](Scaling) -* [Kubernetes](https://github.com/wekan/wekan/tree/main/helm/wekan) -* [Redis Oplog](https://github.com/cult-of-coders/redis-oplog) -* [Meteor Scaling](https://galaxy-guide.meteor.com/scaling.html) at [Meteor Cloud](https://www.meteor.com/cloud) -* [Scaling at Meteor forums](https://forums.meteor.com/t/meteor-scaling-performance-best-practices/52886/16) - -# Migrating - -* [From Previous Export, paste big WeKan JSON](https://github.com/wekan/wekan/wiki/From-Previous-Export) -* [Progress: Import/Export/Sync](Sync) -* [From CSV/TSV](CSV) -* [From Trello](Migrating-from-Trello) -* [From Jira](Jira) -* [From Asana](Asana) -* [From Zenkit](ZenKit) -* [From old Wekan manually](Migrating-from-old-Wekan-manually) -* [Converting Meteor Stylus to CSS](Converting-Meteor-Stylus-to-CSS) - -# Support priorities for new features and bugfixes - -1) [Commercial Support](https://wekan.team/commercial-support/) -2) [Community Support](https://github.com/wekan/wekan/issues) -3) [Debugging](Debugging) - -# Backup - -* [Backup and Restore](Backup) - -# Repair - -* [Repair MongoDB](Repair-MongoDB) -* [Using Meteor MongoDB to repair files](Export-from-Wekan-Sandstorm-grain-.zip-file) -* [If board does not open and keeps loading](If-board-does-not-open-and-keeps-loading) -* [Repair Docker](Repair-Docker) - -# Themes - -* [Themes](Custom-CSS-themes) -* [Dark Mode](Dark-Mode) - -# Markdown Syntax - -* [Wekan Markdown](Wekan-Markdown) -* [Emoji](Emoji) -* [Mermaid Diagram](Mermaid-Diagram) DOES NOT WORK ANYMORE -* [Numbered text](Numbered-text) - -# Login Auth - -* [Automatic login](autologin) -* [Disable Password Login](Disable-Password-Login) -* [Forgot Password](Forgot-Password) -* [Admin: Impersonate user](Impersonate-user) -* [Adding Users](Adding-users) -* [Active users Presence](https://github.com/wekan/wekan/issues/3734) -* [Accounts Lockout: Brute force login protection](Accounts-Lockout) -* [LDAP](LDAP) -* [LDAP AD Simple Auth](LDAP-AD-Simple-Auth) -* [Keycloak](Keycloak) -* [Google login](Google-login) -* [Azure](Azure) -* [OAuth2](OAuth2), Auth0, GitLab, RocketChat -* [Oracle OIM on premise using OAuth2](Oracle-OIM) -* [ADFS 4.0 using OAuth2 and OpenID](ADFS) -* [Azure AD B2C using OAuth2](B2C) -* [Nextcloud](Nextcloud) -* [CAS](CAS) Please test -* [SAML](SAML) Please test -* [Zitadel](Zitadel) - -# Metrics, Logs, Stats - -* [Metrics](Metrics) -* [Logs](Logs) -* [Stats](Features#stats) - -# Integrations - -* [IFTTT](IFTTT) -* [n8n Wekan docs](https://docs.n8n.io/nodes/n8n-nodes-base.wekan/#example-usage) - [n8n GitHub](https://github.com/n8n-io/n8n) -* [Integrations](Integrations) -* [Gogs](https://github.com/wekan/wekan-gogs) - -# Time - -* [Time Tracking](Time-Tracking) -* [Gantt Chart](Gantt) -* [Due Date](Due-Date) -* [Day of week start](Day-of-week-start) -* [Calendar](Calendar) - -# Features - -* [Multiline](Multiline) -* [Linked Cards](Linked-Cards) -* [Drag Drop](https://github.com/wekan/wekan/wiki/Drag-Drop) on Mobile and Desktop -* [Rclone: Store attachments to cloud storage like S3, MinIO, etc](Rclone) -* [Python based features](Python) -* [Burndown and Velocity Chart](Burndown-and-Velocity-Chart) -* [Wait Spinners](Wait-Spinners) -* [Translations](Translations) -* [Default Language for All Users](https://github.com/wekan/wekan/issues/3927) -* [Roadmap](Roadmap) -* [Features](Features) -* [Planning Poker](Planning-Poker) -* [Scaling](Scaling) -* [Custom Logo](Custom-Logo) -* [Subtasks](Subtasks) <== Has fix -* [Templates](Templates) -* [Cover](Cover) -* [Archive and Delete](Archive-and-Delete) -* [Custom Fields](Custom-Fields) -* [Fix Export board menu not visible on some boards](https://github.com/wekan/wekan/issues/1060) -* [RAM usage](https://github.com/wekan/wekan/issues/1088#issuecomment-311843230) -* [Demo](https://wekan.indie.host/b/t2YaGmyXgNkppcFBq/wekan-fork-roadmap) -* [Swimlane Documentation](Swimlanes) -* [Customize Translations](Customize-Translations) - -# Email - -* [Email](Troubleshooting-Mail) - -# Required Settings - -* [Requirements](Requirements) -* [Ports, hostsfile, how Internet works](https://github.com/wekan/wekan/issues/2896) -* [ROOT_URL Settings](Settings) - -# Download - -* [Download Wekan for various Platforms](Platforms): Supported by xet7, Operating Systems, NAS, Cloud -* [Helm Chart for Kubernetes](Helm) - -# Webservers - -* [Caddy](Caddy-Webserver-Config) -* [Nginx](Nginx-Webserver-Config) -* [Apache](Apache) -* [OpenLiteSpeed](https://github.com/wekan/wekan/issues/3334#issuecomment-723651328) -* [Local self signed TLS](Local-self-signed-TLS) -* [Let's Encrypt and Google Auth](Let's-Encrypt-and-Google-Auth) -* [TLS with Node.js](https://github.com/wekan/wekan/issues/916) -* [Traefik and self-signed SSL certs](Traefik-and-self-signed-SSL-certs) - -# REST API Docs - -* [REST API Code](REST-API-Code) -* [Login](REST-API) -* [User](REST-API-User) -* [Role](REST-API-Role) -* [Boards](REST-API-Boards) -* [Lists](REST-API-Lists) -* [Cards](REST-API-Cards) -* [Checklists](REST-API-Checklists) -* [Swimlanes](REST-API-Swimlanes) -* [Custom Fields](REST-API-Custom-Fields) -* [Integrations](REST-API-Integrations) - -# REST API issue - -* [REST API Issue](https://github.com/wekan/wekan/issues/1037) - -# REST API client code - -* [Example: New card with Python3 and REST API](New-card-with-Python3-and-REST-API) -* [Python client to REST API](https://github.com/wekan/wekan-python-api-client) -* [Go client to REST API](https://github.com/wekan/wego) -* [Java](Java) -* [Wekan Sandstorm cards to CSV using Python](Wekan-Sandstorm-cards-to-CSV-using-Python) -* [Excel and VBA](Excel-and-VBA) - -# Webhooks - -* [Global Webhook](https://github.com/wekan/wekan/pull/2665) -* [Limiting Webhook data](https://github.com/wekan/wekan/issues/2830) -* [Receiving Webhooks](Receiving-Webhooks) -* [Outgoing Webhook to Discord/Slack/RocketChat/Riot](Outgoing-Webhook-to-Discord) -* [Outgoing Webhook to NodeRed](https://github.com/wekan/wekan/issues/2017) -* [Outgoing Webhook to PowerShell](https://github.com/wekan/wekan/issues/2518) -* [Security: Webhook and CA](WebHook-And-CA) -* [Outgoing Webhooks Data](Webhook-data) -* [Outgoing Webhooks and Let's Encrypt](WebHook-And-CA) -* Outgoing Webhooks [Original Pull Request](https://github.com/wekan/wekan/pull/1119), [multiple Webhooks](https://github.com/wekan/wekan/pull/1199), [more parameters and response order](https://github.com/wekan/wekan/pull/1263) - -# Case Studies - -* [Implementing GDPR](GDPR) - -# Development - -* [Kadira integration](https://github.com/wekan/wekan/issues/2152) -* [Debugging](Debugging) -* [Developer Docs for Standalone Wekan](Developer-Documentation) -* [Developer Docs for Sandstorm Wekan](https://github.com/wekan/wekan-maintainer/wiki/Developing-Wekan-for-Sandstorm) -* [Adding new Snap setting to code](Adding-new-Snap-settings-to-code) -* [Directory Structure](Directory-Structure) -* [Building Wekan for Sandstorm](https://github.com/wekan/wekan-maintainer/wiki/Building-Wekan-for-Sandstorm) -* [Docs - Sandstorm etc](https://github.com/wekan/wekan/labels/Documentation) -* [Beginner](https://github.com/wekan/wekan/labels/Beginner) -* [Maintainer FAQ](https://github.com/wekan/wekan-maintainer/wiki/FAQ) - -# Issues - -* [Bugs](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3ABug) -* [Feature requests](https://github.com/wekan/wekan/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20feature) -* [Import / Export](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3AImport-export) -* [Drag and Drop](https://github.com/wekan/wekan/labels/Feature%3ADrag-and-drop) -* [Accessibility](https://github.com/wekan/wekan/labels/Accessibility) -* [Navigation:Keyboard](https://github.com/wekan/wekan/labels/Navigation%3AKeyboard) -* [Targets:Mobile-web](https://github.com/wekan/wekan/labels/Targets%3AMobile-web) -* [REST API](https://github.com/wekan/wekan/labels/API%3AREST) -* [Admin Panel](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3AAdmin-Panel) -* [Encryption](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3AEncryption) -* [Permissions](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3AUser-accounts%3APermissions) -* [Logs](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3ALogs) -* [Notifications](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3ANotifications) -* [Filters](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3AFilters) -* [Checklists](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3ACards%3AChecklists) -* [Swimlanes](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3ACards%3ASwimlanes) -* [LibreJS](https://github.com/wekan/wekan/issues/1040) -* [Markdown](https://github.com/wekan/wekan/issues?q=is%3Aissue+is%3Aopen+label%3AFeature%3AMarkdown) \ No newline at end of file diff --git a/find-replace.sh b/find-replace.sh index d93a1ba0b..522affab9 100755 --- a/find-replace.sh +++ b/find-replace.sh @@ -2,4 +2,4 @@ # Recursive find/replace. # Syntax: ./find-replace.sh searchtext replacetext -grep -E -lRZ '$1' . | xargs -0 -l sed -i -e 's/$1/$2/g' +egrep -lRZ '$1' . | xargs -0 -l sed -i -e 's/$1/$2/g' diff --git a/docs/Platforms/FOSS/Helm2.md b/helm.md similarity index 100% rename from docs/Platforms/FOSS/Helm2.md rename to helm.md diff --git a/imports/i18n/data/af.i18n.json b/imports/i18n/data/af.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/af.i18n.json +++ b/imports/i18n/data/af.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/af_ZA.i18n.json b/imports/i18n/data/af_ZA.i18n.json index e756e6377..1ce879179 100644 --- a/imports/i18n/data/af_ZA.i18n.json +++ b/imports/i18n/data/af_ZA.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "geskuif na Argief", "activity-attached": "aangeheg", "activity-created": "geskep", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "pasgemaakte veld geskep", "activity-excluded": "uitgesluit", "activity-imported": "ingevoer in van", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ar-DZ.i18n.json b/imports/i18n/data/ar-DZ.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/ar-DZ.i18n.json +++ b/imports/i18n/data/ar-DZ.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ar-EG.i18n.json b/imports/i18n/data/ar-EG.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/ar-EG.i18n.json +++ b/imports/i18n/data/ar-EG.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ar.i18n.json b/imports/i18n/data/ar.i18n.json index 800d0743b..66cc886f9 100644 --- a/imports/i18n/data/ar.i18n.json +++ b/imports/i18n/data/ar.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s انتقل الى الارشيف", "activity-attached": "إرفاق %s ل %s", "activity-created": "أنشأ %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "%s احدت حقل مخصص", "activity-excluded": "استبعاد %s عن %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "إضافة بطاقة", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "قوائم التّدقيق", "click-to-star": "اضغط لإضافة اللوحة للمفضلة.", "click-to-unstar": "اضغط لحذف اللوحة من المفضلة.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "غلق", "close-board": "غلق اللوحة", @@ -300,7 +294,6 @@ "color-white": "أبيض", "color-yellow": "yellow", "unset-color": "غير محدد", - "comments": "Comments", "comment": "تعليق", "comment-placeholder": "أكتب تعليق", "comment-only": "التعليق فقط", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -411,10 +403,10 @@ "user-can-not-export-card-to-pdf": "User can not export card to PDF", "exportBoardPopup-title": "Export board", "exportCardPopup-title": "Export card", - "sort": "رتب", - "sorted": "مرتبة", - "remove-sort": "إزالة الفرز\n ", - "sort-desc": "انقر لفرز القائمة\n ", + "sort": "Sort", + "sorted": "Sorted", + "remove-sort": "Remove sort", + "sort-desc": "Click to Sort List", "list-sort-by": "Sort the List By:", "list-label-modifiedAt": "Last Access Time", "list-label-title": "Name of the List", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "الإسم الكامل", "header-logo-title": "الرجوع إلى صفحة اللوحات", - "show-activities": "Show Activities", + "hide-system-messages": "إخفاء رسائل النظام", "headerBarCreateBoardPopup-title": "إنشاء لوحة", "home": "الرئيسية", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Assign yourself to current card", "shortcut-autocomplete-emoji": "الإكمال التلقائي للرموز التعبيرية", "shortcut-autocomplete-members": "الإكمال التلقائي لأسماء الأعضاء", "shortcut-clear-filters": "مسح التصفيات", "shortcut-close-dialog": "غلق النافذة", "shortcut-filter-my-cards": "تصفية بطاقاتي", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "عرض قائمة الإختصارات ،تلك", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "الوقت", "title": "عنوان", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "تتبع", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "روابط", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "المنشئ", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "تقارير الملفات", "reports": "تقارير", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "النظام الأصلي\n ", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "نص", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "انهيار", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ary.i18n.json b/imports/i18n/data/ary.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/ary.i18n.json +++ b/imports/i18n/data/ary.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ast-ES.i18n.json b/imports/i18n/data/ast-ES.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/ast-ES.i18n.json +++ b/imports/i18n/data/ast-ES.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/az-AZ.i18n.json b/imports/i18n/data/az-AZ.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/az-AZ.i18n.json +++ b/imports/i18n/data/az-AZ.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/az-LA.i18n.json b/imports/i18n/data/az-LA.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/az-LA.i18n.json +++ b/imports/i18n/data/az-LA.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/az.i18n.json b/imports/i18n/data/az.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/az.i18n.json +++ b/imports/i18n/data/az.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/bg.i18n.json b/imports/i18n/data/bg.i18n.json index 36ffe06f4..87bc05a7c 100644 --- a/imports/i18n/data/bg.i18n.json +++ b/imports/i18n/data/bg.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s е преместена в Архива", "activity-attached": "прикачи %s към %s", "activity-created": "създаде %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "създаде собствено поле %s", "activity-excluded": "изключи %s от %s", "activity-imported": "импортира %s в/във %s от %s", @@ -86,12 +85,10 @@ "add-card": "Добави карта", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Списъци със задачи", "click-to-star": "Click to star this board.", "click-to-unstar": "Натиснете, за да премахнете това табло от любими.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Клипборда или с драг & дроп", "close": "Затвори", "close-board": "Затвори Таблото", @@ -300,7 +294,6 @@ "color-white": "бяло", "color-yellow": "жълто", "unset-color": "Премахни", - "comments": "Comments", "comment": "Коментирай", "comment-placeholder": "Напиши коментар", "comment-only": "Само коментар", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Включи WIP лимита", "error-board-doesNotExist": "Това табло не съществува", "error-board-notAdmin": "За да направите това трябва да сте администратор на това табло", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Име", "header-logo-title": "Назад към страницата с Вашите табла.", - "show-activities": "Show Activities", + "hide-system-messages": "Скриване на системните съобщения", "headerBarCreateBoardPopup-title": "Създай Табло", "home": "Начало", "import": "Импорт", @@ -580,14 +572,12 @@ "select-board": "Изберете табло", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Въведи WIP лимит", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Добави себе си към тази карта", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete members", "shortcut-clear-filters": "Изчистване на всички филтри", "shortcut-close-dialog": "Close Dialog", "shortcut-filter-my-cards": "Филтрирай моите карти", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Отвори/затвори сайдбара с филтри", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Има карти с изработено време", "time": "Време", "title": "Заглавие", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Следене", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Задача", "create-task": "Добави задача", "ok": "Окей", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Текст", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Събери", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/br.i18n.json b/imports/i18n/data/br.i18n.json index 695b21cc7..3915d27f6 100644 --- a/imports/i18n/data/br.i18n.json +++ b/imports/i18n/data/br.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "%s liammet ouzh %s", "activity-created": "%s krouet", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "%s enporzhiet eus %s da %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "melen", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -319,7 +312,7 @@ "copy-card-link-to-clipboard": "Copy card link to clipboard", "copy-text-to-clipboard": "Copy text to clipboard", "linkCardPopup-title": "Link Card", - "searchElementPopup-title": "Klask", + "searchElementPopup-title": "Search", "copyCardPopup-title": "Copy Card", "copyManyCardsPopup-title": "Copy Template to Many Cards", "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -572,7 +564,7 @@ "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", "rescue-card-description-dialogue": "Overwrite current card description with your changes?", "save": "Save", - "search": "Klask", + "search": "Search", "rules": "Rules", "search-cards": "Search from card/list titles, descriptions and custom fields on this board", "search-example": "Write text you search and press Enter", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ca.i18n.json b/imports/i18n/data/ca.i18n.json index 7ff6f51f8..83bde623e 100644 --- a/imports/i18n/data/ca.i18n.json +++ b/imports/i18n/data/ca.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s mogut al Arxiu", "activity-attached": "ha adjuntat %s a %s", "activity-created": "ha creat %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "camp personalitzat creat %s", "activity-excluded": "ha exclòs %s de %s", "activity-imported": "important %s troba %s des de %s", @@ -86,12 +85,10 @@ "add-card": "Afegeix Fitxa", "add-card-to-top-of-list": "Afegeix una fitxa al principi de la llista", "add-card-to-bottom-of-list": "Afegeix una fitxa al final de la llista", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Llistes de verificació", "click-to-star": "Fes clic per destacar aquest tauler.", "click-to-unstar": "Fes clic per deixar de destacar aquest tauler.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Portaretalls o estirar i amollar", "close": "Tanca", "close-board": "Tanca tauler", @@ -300,7 +294,6 @@ "color-white": "blanc", "color-yellow": "groc", "unset-color": "Desactivat", - "comments": "Comments", "comment": "Comentari", "comment-placeholder": "Escriu un comentari", "comment-only": "Només comentaris", @@ -383,7 +376,6 @@ "email-sent": "Correu enviat", "email-verifyEmail-subject": "Verifiqueu la vostra adreça de correu electrònic a __siteName__", "email-verifyEmail-text": "Hola __user__,\n\n per verificar el teu correu, segueix l'enllaç següent.\n\n __url__\n\n Gràcies.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Activa i Límit de Treball en Progrés", "error-board-doesNotExist": "Aquest tauler no existeix", "error-board-notAdmin": "Necessites ser administrador d'aquest tauler per dur a lloc aquesta acció", @@ -451,7 +443,7 @@ "advanced-filter-description": "El filtre avançat permet escriure una cadena que contingui els operadors següents: == != <= >= && || ( ) S'utilitza un espai com a separador entre els operadors. Podeu filtrar tots els camps personalitzats escrivint els seus noms i valors. Per exemple: Camp1 == Valor1. Nota: si els camps o els valors contenen espais, cal que els encapsuleu en cometes simples. Per exemple: \"Camp 1\" == \"Valor 1\". Per ometre caràcters de control únics (' \\\\/), podeu utilitzar \\\\. Per exemple: Camp1 == I\\\\'m. També podeu combinar diverses condicions. Per exemple: F1 == V1 || F1 == V2. Normalment, tots els operadors s'interpreten d'esquerra a dreta. Podeu canviar l'ordre posant parèntesis. Per exemple: F1 == V1 && ( F2 == V2 || F2 == V3 ). També podeu cercar camps de text amb regex: F1 == /Tes.*/i", "fullname": "Nom complet", "header-logo-title": "Torna a la teva pàgina de taulers", - "show-activities": "Show Activities", + "hide-system-messages": "Oculta missatges del sistema", "headerBarCreateBoardPopup-title": "Crea tauler", "home": "Inici", "import": "importa", @@ -580,14 +572,12 @@ "select-board": "Selecciona tauler", "set-wip-limit-value": "Limita el nombre màxim de tasques en aquesta llista", "setWipLimitPopup-title": "Configura el Límit de Treball en Progrés", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Assigna't la ftixa actual", "shortcut-autocomplete-emoji": "Emoji autocompletat", "shortcut-autocomplete-members": "Autocompleta membres", "shortcut-clear-filters": "Elimina tots els filtres", "shortcut-close-dialog": "Tanca el diàleg", "shortcut-filter-my-cards": "Filtra les meves fitxes", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Mostra aquesta llista d'accessoris directes", "shortcut-toggle-filterbar": "Canvia la barra lateral del tauler", "shortcut-toggle-searchbar": "Commuta la barra lateral de cerca", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Té fitxes amb temps dedicats", "time": "Hora", "title": "Títol", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Canvia les etiquetes 1-9 per a la fitxa. La selecció múltiple afegeix les etiquetes 1-9", "remove-labels-multiselect": "La selecció múltiple elimina les etiquetes 1-9", "tracking": "En seguiment", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "No podeu suprimir aquesta fitxa abans de suprimir per primera vegada la fitxa enllaçada que té", "delete-linked-cards-before-this-list": "No podeu suprimir aquesta llista abans de suprimir primer les fitxes enllaçades que apunten a fitxes d'aquesta llista", "hide-checked-items": "Amaga els elements marcats", - "hide-finished-checklist": "Hide finished checklist", "task": "Tasca", "create-task": "Crea una tasca", "ok": "D'acord", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Creat a (el més nou primer)", "created-at-oldest-first": "Creat a (el més antic primer)", "links-heading": "Enllaços", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Amaga els missatges del sistema de tots els usuaris", + "now-system-messages-of-all-users-are-hidden": "Ara els missatges del sistema de tots els usuaris estan ocults", "move-swimlane": "Mou el carril", "moveSwimlanePopup-title": "Mou el carril", "custom-field-stringtemplate": "Plantilla de cadena", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separador (utilitza or   per a un espai)", "custom-field-stringtemplate-item-placeholder": "Premeu Intro per afegir més elements", "creator": "Creador", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Informe d'arxius", "reports": "Informes", "rulesReportTitle": "Informe de normes", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Accions de checklist", "moveChecklist": "Mou el checklist", "moveChecklistPopup-title": "Mou el checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "La nova línia es converteix en un nou element del checklist", "copyChecklist": "Copia el checklist", "copyChecklistPopup-title": "Copia el checklist", "card-show-lists": "Llistes de mostres de fitxes", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Contraure", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ca_ES.i18n.json b/imports/i18n/data/ca_ES.i18n.json index e87e7f1c3..78c381c47 100644 --- a/imports/i18n/data/ca_ES.i18n.json +++ b/imports/i18n/data/ca_ES.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "El filtre avançat permet escriure una cadena que contingui els operadors següents: == != <= >= && || ( ) S'utilitza un espai com a separador entre els operadors. Podeu filtrar tots els camps personalitzats escrivint els seus noms i valors. Per exemple: Camp1 == Valor1. Nota: si els camps o els valors contenen espais, cal que els encapsuleu en cometes simples. Per exemple: \"Camp 1\" == \"Valor 1\". Per ometre caràcters de control únics (' \\\\/), podeu utilitzar \\\\. Per exemple: Camp1 == I\\\\'m. També podeu combinar diverses condicions. Per exemple: F1 == V1 || F1 == V2. Normalment, tots els operadors s'interpreten d'esquerra a dreta. Podeu canviar l'ordre posant parèntesis. Per exemple: F1 == V1 && ( F2 == V2 || F2 == V3 ). També podeu cercar camps de text amb regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/cmn.i18n.json b/imports/i18n/data/cmn.i18n.json index 72d99aaa3..a2118a2e2 100644 --- a/imports/i18n/data/cmn.i18n.json +++ b/imports/i18n/data/cmn.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "高级过滤器可以使用包含如下操作符的字符串进行过滤:== != <= >= && || ( ) 。操作符之间用空格隔开。输入字段名和数值就可以过滤所有自定义字段。例如:Field1 == Value1。注意如果字段名或数值包含空格,需要用单引号。例如: 'Field 1' == 'Value 1'。要跳过单个控制字符(' \\\\/),请使用 \\\\ 转义字符。例如: Field1 = I\\\\'m。支持组合使用多个条件,例如: F1 == V1 || F1 == V2。通常以从左到右的顺序进行判断。可以通过括号修改顺序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支持使用正则表达式搜索文本字段。", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/cs-CZ.i18n.json b/imports/i18n/data/cs-CZ.i18n.json index 51e07ec5d..c1ed6158b 100644 --- a/imports/i18n/data/cs-CZ.i18n.json +++ b/imports/i18n/data/cs-CZ.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s bylo přesunuto do archivu", "activity-attached": "přiloženo %s k %s", "activity-created": "%s vytvořeno", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "vytvořeno vlastní pole %s", "activity-excluded": "%s vyjmuto z %s", "activity-imported": "importován %s do %s z %s", @@ -86,12 +85,10 @@ "add-card": "Přidat kartu", "add-card-to-top-of-list": "Přidat kartu na začátek seznamu", "add-card-to-bottom-of-list": "Přidat kartu na konec seznamu", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklisty", "click-to-star": "Kliknutím přidat hvězdičku tomuto tablu.", "click-to-unstar": "Kliknutím odebrat hvězdičku tomuto tablu.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Schránka nebo potáhnout a pustit", "close": "Zavřít", "close-board": "Zavřít tablo", @@ -300,7 +294,6 @@ "color-white": "bílá", "color-yellow": "žlutá", "unset-color": "Nenastaveno", - "comments": "Comments", "comment": "Komentář", "comment-placeholder": "Text komentáře", "comment-only": "Pouze komentáře", @@ -383,7 +376,6 @@ "email-sent": "Email byl odeslán", "email-verifyEmail-subject": "Ověř svou emailovou adresu na", "email-verifyEmail-text": "Ahoj __user__,\n\nPro ověření emailové adresy klikni na odkaz níže.\n\n__url__\n\nDěkujeme.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Povolit WIP Limit", "error-board-doesNotExist": "Toto tablo neexistuje", "error-board-notAdmin": "K provedení změny musíš být administrátor tohoto tabla", @@ -451,7 +443,7 @@ "advanced-filter-description": "Pokročilý filtr dovoluje zapsat řetězec následujících operátorů: == != <= >= && || () Operátory jsou odděleny mezerou. Můžete filtrovat všechny vlastní pole zadáním jejich názvů nebo hodnot. Například: Pole1 == Hodnota1. Poznámka: Pokud pole nebo hodnoty obsahují mezery, je potřeba je obalit v jednoduchých uvozovkách. Například: 'Pole 1' == 'Hodnota 1'. Pro ignorovaní kontrolních znaků (' \\\\/) je možné použít \\\\. Například Pole1 == I\\\\'m. Můžete také kombinovat více podmínek. Například P1 == H1 || P1 == H2. Obvykle jsou operátory interpretovány zleva doprava. Jejich pořadí můžete měnit pomocí závorek. Například: P1 == H1 && ( P2 == H2 || P2 == H3 )", "fullname": "Celé jméno", "header-logo-title": "Jit zpět na stránku s tably.", - "show-activities": "Show Activities", + "hide-system-messages": "Skrýt systémové zprávy", "headerBarCreateBoardPopup-title": "Vytvořit tablo", "home": "Domů", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Vybrat tablo", "set-wip-limit-value": "Nastaví limit pro maximální počet úkolů ve sloupci.", "setWipLimitPopup-title": "Nastavit WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Přiřadit sebe k aktuální kartě", "shortcut-autocomplete-emoji": "Automatické dokončování emoji", "shortcut-autocomplete-members": "Automatický výběr uživatel", "shortcut-clear-filters": "Vyčistit všechny filtry", "shortcut-close-dialog": "Zavřít dialog", "shortcut-filter-my-cards": "Filtrovat mé karty", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Otevřít tento seznam odkazů", "shortcut-toggle-filterbar": "Přepnout lištu filtrování", "shortcut-toggle-searchbar": "Přepnout lištu vyhledávání", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Obsahuje karty se stráveným časem", "time": "Čas", "title": "Název", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Pozorující", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Tuto kratu nemůžete odstranit dokud nesmažete přiřazené karty", "delete-linked-cards-before-this-list": "Tento sloupec nemůžete smazat dokud nesmažete propojené karty, které jsou navázány na karty v tomto sloupci", "hide-checked-items": "Skrýt zvolené položky", - "hide-finished-checklist": "Hide finished checklist", "task": "Úkol", "create-task": "Vytvořit úkol", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Vyvtořeno (Od nejnovějších)", "created-at-oldest-first": "Vytvořeno (Od nejstarších)", "links-heading": "Odkazy", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Skrýt systémové zprávy všech uživatelů", + "now-system-messages-of-all-users-are-hidden": "Systémové zprávy všech uživatelů jsou nyní skryté", "move-swimlane": "Přesunout dráhu", "moveSwimlanePopup-title": "Přesunout dráhu", "custom-field-stringtemplate": "Šablona řetězce", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Oddělovač (pro mezeru použijte nebo  )", "custom-field-stringtemplate-item-placeholder": "Stiskněte enter pro přidání více položek", "creator": "Tvůrce", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Report souborů", "reports": "Reporty", "rulesReportTitle": "Report pravidel", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Sbalit", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/cs.i18n.json b/imports/i18n/data/cs.i18n.json index e529b4195..f3502f587 100644 --- a/imports/i18n/data/cs.i18n.json +++ b/imports/i18n/data/cs.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s bylo přesunuto do archivu", "activity-attached": "přiloženo %s k %s", "activity-created": "%s vytvořeno", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "vytvořeno vlastní pole %s", "activity-excluded": "%s vyjmuto z %s", "activity-imported": "importován %s do %s z %s", @@ -86,16 +85,14 @@ "add-card": "Přidat kartu", "add-card-to-top-of-list": "Přidat kartu na začátek seznamu", "add-card-to-bottom-of-list": "Přidat kartu na konec seznamu", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Nastavit výšku swimlane", - "set-swimlane-height": "Nastavit výšku swimlane", - "set-swimlane-height-value": "Výška swimlane (pixely)", - "swimlane-height-error-message": "Výška swimlane musí být celé kladné číslo", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", "add-swimlane": "Přidat Swimlane", "add-subtask": "Přidat Podúkol", "add-checklist": "Přidat zaškrtávací seznam", @@ -103,10 +100,10 @@ "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Převést na kartu", - "add-cover": "Přidat titulní obrázek k minikartě", + "add-cover": "Add cover image to minicard", "add-label": "Přidat štítek", "add-list": "Přidat sloupec", - "add-after-list": "Přidat za seznam", + "add-after-list": "Add After List", "add-members": "Přidat členy", "added": "Přidán", "addMemberPopup-title": "Členové", @@ -146,13 +143,13 @@ "attachmentDeletePopup-title": "Smazat přílohu?", "attachments": "Přílohy", "auto-watch": "Automaticky sleduj tabla když jsou vytvořena", - "avatar-too-big": "Avatar je příliš velký (__size__ max)", + "avatar-too-big": "The avatar is too large (__size__ max)", "back": "Zpět", "board-change-color": "Změnit barvu", - "board-change-background-image": "Změnit obrázek na pozadí", - "board-background-image-url": "URL obrázku na pozadí", - "add-background-image": "Přidat obrázek na pozadí", - "remove-background-image": "Odstranit obrázek z pozadí", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "All Boards Settings", "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", @@ -165,9 +162,9 @@ "board-public-info": "Toto tablo bude veřejné.", "board-drag-drop-reorder-or-click-open": "Přetažením změníte pořadí ikon tabel. Kliknutím otevřete tablo.", "boardChangeColorPopup-title": "Změnit pozadí tabla", - "boardChangeBackgroundImagePopup-title": "Změnit obrázek na pozadí", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "Změnit barvu", - "allBoardsChangeBackgroundImagePopup-title": "Změnit obrázek na pozadí", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "Přejmenovat tablo", "boardChangeVisibilityPopup-title": "Upravit viditelnost", "boardChangeWatchPopup-title": "Změnit sledování", @@ -266,9 +263,6 @@ "checklists": "Checklisty", "click-to-star": "Kliknutím přidat hvězdičku tomuto tablu.", "click-to-unstar": "Kliknutím odebrat hvězdičku tomuto tablu.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Schránka nebo potáhnout a pustit", "close": "Zavřít", "close-board": "Zavřít tablo", @@ -300,7 +294,6 @@ "color-white": "bílá", "color-yellow": "žlutá", "unset-color": "Nenastaveno", - "comments": "Comments", "comment": "Komentář", "comment-placeholder": "Text komentáře", "comment-only": "Pouze komentáře", @@ -383,7 +376,6 @@ "email-sent": "Email byl odeslán", "email-verifyEmail-subject": "Ověř svou emailovou adresu na", "email-verifyEmail-text": "Ahoj __user__,\n\nPro ověření emailové adresy klikni na odkaz níže.\n\n__url__\n\nDěkujeme.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Povolit WIP Limit", "error-board-doesNotExist": "Toto tablo neexistuje", "error-board-notAdmin": "K provedení změny musíš být administrátor tohoto tabla", @@ -451,7 +443,7 @@ "advanced-filter-description": "Pokročilý filtr dovoluje zapsat řetězec následujících operátorů: == != <= >= && || () Operátory jsou odděleny mezerou. Můžete filtrovat všechny vlastní pole zadáním jejich názvů nebo hodnot. Například: Pole1 == Hodnota1. Poznámka: Pokud pole nebo hodnoty obsahují mezery, je potřeba je obalit v jednoduchých uvozovkách. Například: 'Pole 1' == 'Hodnota 1'. Pro ignorovaní kontrolních znaků (' \\\\/) je možné použít \\\\. Například Pole1 == I\\\\'m. Můžete také kombinovat více podmínek. Například P1 == H1 || P1 == H2. Obvykle jsou operátory interpretovány zleva doprava. Jejich pořadí můžete měnit pomocí závorek. Například: P1 == H1 && ( P2 == H2 || P2 == H3 )", "fullname": "Celé jméno", "header-logo-title": "Jit zpět na stránku s tably.", - "show-activities": "Show Activities", + "hide-system-messages": "Skrýt systémové zprávy", "headerBarCreateBoardPopup-title": "Vytvořit tablo", "home": "Domů", "import": "Import", @@ -540,8 +532,8 @@ "normal": "Normální", "normal-desc": "Může zobrazovat a upravovat karty. Nemůže měnit nastavení.", "not-accepted-yet": "Pozvánka ještě nebyla přijmuta", - "notify-participate": "Dostanete aktualizace o všech kartách, kterých se účastníte jako tvůrce nebo člen", - "notify-watch": "Dostane aktualizace o všech tabel, sloupců nebo karet, které sledujete", + "notify-participate": "Receive updates to any cards you participate as creator or member", + "notify-watch": "Dostane aktualitace to všech tabel, sloupců nebo karet, které sledujete", "optional": "volitelný", "or": "nebo", "page-maybe-private": "Tato stránka může být soukromá. Můžete ji zobrazit po přihlášení.", @@ -558,7 +550,7 @@ "public": "Veřejný", "public-desc": "Toto tablo je veřejné. Je viditelné pro každého, kdo na něj má odkaz a bude zobrazeno ve vyhledávačích jako je Google. Pouze vybraní uživatelé ho mohou upravovat.", "quick-access-description": "Pro přidání odkazu do této lišty označ tablo hvězdičkou.", - "remove-cover": "Odstranit titulní obrázek z minikarty", + "remove-cover": "Remove cover image from minicard", "remove-from-board": "Odstranit z tabla", "remove-label": "Odstranit štítek", "listDeletePopup-title": "Smazat sloupec?", @@ -580,14 +572,12 @@ "select-board": "Vybrat tablo", "set-wip-limit-value": "Nastaví limit pro maximální počet úkolů ve sloupci.", "setWipLimitPopup-title": "Nastavit WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Přiřadit sebe k aktuální kartě", "shortcut-autocomplete-emoji": "Automatické dokončování emoji", "shortcut-autocomplete-members": "Automatický výběr uživatel", "shortcut-clear-filters": "Vyčistit všechny filtry", "shortcut-close-dialog": "Zavřít dialog", "shortcut-filter-my-cards": "Filtrovat mé karty", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Otevřít tento seznam odkazů", "shortcut-toggle-filterbar": "Přepnout lištu filtrování", "shortcut-toggle-searchbar": "Přepnout lištu vyhledávání", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Obsahuje karty se stráveným časem", "time": "Čas", "title": "Název", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Pozorující", @@ -713,8 +702,8 @@ "accounts": "Účty", "accounts-allowEmailChange": "Povolit změnu Emailu", "accounts-allowUserNameChange": "Povolit změnu uživatelského jména", - "tableVisibilityMode-allowPrivateOnly": "Viditelnost tabel: Povolit pouze soukromé tabla", - "tableVisibilityMode" : "Viditelnost tabel", + "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", + "tableVisibilityMode" : "Boards visibility", "createdAt": "Vytvořeno v", "modifiedAt": "Modifikováno", "verified": "Ověřen", @@ -749,10 +738,10 @@ "deposit-subtasks-board": "Vložit podúkoly do tohoto tabla", "deposit-subtasks-list": "Landing list for subtasks deposited here:", "show-parent-in-minicard": "Ukázat předka na minikartě", - "description-on-minicard": "Popis na minikartě", - "cover-attachment-on-minicard": "Titulní obrázek na minikartě", - "badge-attachment-on-minicard": "Počet příloh na minikartě", - "card-sorting-by-number-on-minicard": "Řazení karet podle čísla na minikartě", + "description-on-minicard": "Description on minicard", + "cover-attachment-on-minicard": "Cover image on minicard", + "badge-attachment-on-minicard": "Count of attachments on minicard", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", "prefix-with-full-path": "Prefix s celou cestou", "prefix-with-parent": "Prefix s předkem", "subtext-with-full-path": "Podtext s celou cestou", @@ -894,7 +883,7 @@ "error-ldap-login": "Během přihlašování nastala chyba", "display-authentication-method": "Zobraz způsob ověřování", "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "Výchozí způsob ověřování", + "default-authentication-method": "Zobraz způsob ověřování", "duplicate-board": "Duplikovat tablo", "org-number": "Počet organizací je:", "team-number": "Počet týmů je:", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Tuto kratu nemůžete odstranit dokud nesmažete přiřazené karty", "delete-linked-cards-before-this-list": "Tento sloupec nemůžete smazat dokud nesmažete propojené karty, které jsou navázány na karty v tomto sloupci", "hide-checked-items": "Skrýt zvolené položky", - "hide-finished-checklist": "Hide finished checklist", "task": "Úkol", "create-task": "Vytvořit úkol", "ok": "OK", @@ -985,7 +973,7 @@ "myCardsViewChange-title": "My Cards View", "myCardsViewChangePopup-title": "My Cards View", "myCardsViewChange-choice-boards": "Tabla", - "myCardsViewChange-choice-table": "Tabulka", + "myCardsViewChange-choice-table": "Table", "myCardsSortChange-title": "Pořadí mých karet", "myCardsSortChangePopup-title": "Pořadí mých karet", "myCardsSortChange-choice-board": "Podle tabla", @@ -1111,17 +1099,17 @@ "label-names": "Štítek jména", "archived-at": "archivováno", "sort-cards": "Třídit", - "sort-is-on": "Řazení je zapnuté", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "Třídit", "due-date": "Požadovaný termín", "server-error": "Chyba na serveru", "server-error-troubleshooting": "Odešlete prosím chybu, kterou server vygeneroval.\nV případě instalace přes snap spusťte: `sudo snap logs wekan.wekan`\nV případě instalace přes Docker spusťte: `sudo docker logs wekan-app`", "title-alphabetically": "Nadpis (Abecedně)", - "created-at-newest-first": "Vytvořeno (Od nejnovějších)", + "created-at-newest-first": "Vyvtořeno (Od nejnovějších)", "created-at-oldest-first": "Vytvořeno (Od nejstarších)", "links-heading": "Odkazy", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Skrýt systémové zprávy všech uživatelů", + "now-system-messages-of-all-users-are-hidden": "Systémové zprávy všech uživatelů jsou nyní skryté", "move-swimlane": "Přesunout dráhu", "moveSwimlanePopup-title": "Přesunout dráhu", "custom-field-stringtemplate": "Šablona řetězce", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Oddělovač (pro mezeru použijte nebo  )", "custom-field-stringtemplate-item-placeholder": "Stiskněte enter pro přidání více položek", "creator": "Tvůrce", - "creator-on-minicard": "Tvůrce na minikartě", "filesReportTitle": "Report souborů", "reports": "Reporty", "rulesReportTitle": "Report pravidel", @@ -1152,7 +1139,7 @@ "delete-org-warning-message": "Tuto organizaci není možné smazat, protože do ní patří uživatel(é)", "delete-team-warning-message": "Tento tým není možné smazat, protože do nej patří uživatel(é)", "subject": "Subject", - "details": "Podrobnosti", + "details": "Details", "carbon-copy": "Carbon Copy (Cc:)", "ticket": "Ticket", "tickets": "Tickets", @@ -1166,17 +1153,17 @@ "request": "Request", "requests": "Requests", "help-request": "Help Request", - "editCardSortOrderPopup-title": "Změnit řazení", - "cardDetailsPopup-title": "Podrobnosti karty", - "add-teams": "Přidat týmy", - "add-teams-label": "Přidané týmy jsou zobrazeny zde:", - "remove-team-from-table": "Opravdu chcete odstranit tento tým z tabla ?", - "confirm-btn": "Potvrdit", + "editCardSortOrderPopup-title": "Change Sorting", + "cardDetailsPopup-title": "Card Details", + "add-teams": "Add teams", + "add-teams-label": "Added teams are displayed below:", + "remove-team-from-table": "Are you sure you want to remove this team from the board ?", + "confirm-btn": "Confirm", "remove-btn": "Odstranit", - "filter-card-title-label": "Filtrovat pomocí názvů karet", + "filter-card-title-label": "Filter by card title", "invite-people-success": "Invitation to register sent with success", "invite-people-error": "Error while sending invitation to register", - "can-invite-if-same-mailDomainName": "Emailová doména", + "can-invite-if-same-mailDomainName": "Email domain name", "to-create-teams-contact-admin": "To create teams, please contact the administrator.", "Node_heap_total_heap_size": "Node heap: total heap size", "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1238,35 +1222,26 @@ "if-you-already-have-an-account": "If you already have an account", "register": "Register", "forgot-password": "Forgot password", - "minicardDetailsActionsPopup-title": "Podrobnosti karty", + "minicardDetailsActionsPopup-title": "Card Details", "Mongo_sessions_count": "Mongo sessions count", "change-visibility": "Upravit viditelnost", - "max-upload-filesize": "Maximální velikost nahraného souboru v bajtech:", - "allowed-upload-filetypes": "Povolené typy nahraných souborů:", - "max-avatar-filesize": "Maximální velikost avatara v bajtech:", + "max-upload-filesize": "Max upload filesize in bytes:", + "allowed-upload-filetypes": "Allowed upload filetypes:", + "max-avatar-filesize": "Max avatar filesize in bytes:", "allowed-avatar-filetypes": "Allowed avatar filetypes:", - "invalid-file": "Pokud je název souboru neplatný, nahrávání nebo přejmenovávání se zruší.", - "preview-pdf-not-supported": "Vaše zařízení nepodporuje zobrazení PDF. Zkuste soubor stáhnout.", - "drag-board": "Přetáhnout tablo", - "translation-number": "Počet vlastní překladů je:", - "delete-translation-confirm-popup": "Opravdu chcete smazat tento vlastní překlad? Tuto akci nelze vrátit zpět.", - "newTranslationPopup-title": "Nový vlastní překlad", - "editTranslationPopup-title": "Upravit vlastní překlad", - "settingsTranslationPopup-title": "Smazat tento vlastní překlad?", - "translation": "Překlad", + "invalid-file": "If filename is invalid, upload or rename is cancelled.", + "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", + "drag-board": "Drag board", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "Text", - "translation-text": "Text překladu", + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Sbalit", - "uncollapse": "Rozbalit", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/cy-GB.i18n.json b/imports/i18n/data/cy-GB.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/cy-GB.i18n.json +++ b/imports/i18n/data/cy-GB.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/cy.i18n.json b/imports/i18n/data/cy.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/cy.i18n.json +++ b/imports/i18n/data/cy.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/da.i18n.json b/imports/i18n/data/da.i18n.json index 26cf86c80..2e1fdabe1 100644 --- a/imports/i18n/data/da.i18n.json +++ b/imports/i18n/data/da.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s flyttet til Arkiv", "activity-attached": "vedhæftede %s til %s", "activity-created": "oprettede %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "oprettede brugerdefineret felt %s", "activity-excluded": "ekskluderet %s fra %s", "activity-imported": "importerede %s ind i %s fra %s", @@ -86,16 +85,14 @@ "add-card": "Tilføj kort", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Angiv højde på svømmebane", - "set-swimlane-height": "Angiv højde på svømmebane", - "set-swimlane-height-value": "Svømmebanes bredde (pixels)", - "swimlane-height-error-message": "Svømmebreddes højde skal være et positivt heltal", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", "add-swimlane": "Tilføj svømmebane", "add-subtask": "Tilføj delopgave", "add-checklist": "Tilføj tjekliste", @@ -103,10 +100,10 @@ "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "Tilføj coverbillede til minikort", + "add-cover": "Add cover image to minicard", "add-label": "Tilføj etikette", "add-list": "Tilføj liste", - "add-after-list": "Tilføj efter liste", + "add-after-list": "Add After List", "add-members": "Tilføj medlemmer", "added": "Tilføjet", "addMemberPopup-title": "Medlemmer", @@ -146,10 +143,10 @@ "attachmentDeletePopup-title": "Slet vedhæftning?", "attachments": "Vedhæftninger", "auto-watch": "Følg automatisk tavler når de oprettes", - "avatar-too-big": "Avataren er for stor (__size__ max)", + "avatar-too-big": "The avatar is too large (__size__ max)", "back": "Tilbage", "board-change-color": "Skift farve", - "board-change-background-image": "Skift baggrundsbillede", + "board-change-background-image": "Change Background Image", "board-background-image-url": "Background Image URL", "add-background-image": "Add Background Image", "remove-background-image": "Remove Background Image", @@ -165,9 +162,9 @@ "board-public-info": "Denne tavle vil være offentlig.", "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", "boardChangeColorPopup-title": "Skift tavlens baggrund", - "boardChangeBackgroundImagePopup-title": "Skift baggrundsbillede", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "Skift farve", - "allBoardsChangeBackgroundImagePopup-title": "Skift baggrundsbillede", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "Omdøb tavle", "boardChangeVisibilityPopup-title": "Tilpas synlighed", "boardChangeWatchPopup-title": "Tilpas følgefunktion", @@ -266,9 +263,6 @@ "checklists": "Tjeklister", "click-to-star": "Klik for at tilføje stjerne til tavlen.", "click-to-unstar": "Klik for at fjerne stjerne fra tavlen.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Udklipsholder eller træk-og-slip", "close": "Luk", "close-board": "Luk tavle", @@ -300,7 +294,6 @@ "color-white": "hvid", "color-yellow": "gul", "unset-color": "Nulstil", - "comments": "Comments", "comment": "Kommentér", "comment-placeholder": "Skriv kommentar", "comment-only": "Kun kommentarer", @@ -383,7 +376,6 @@ "email-sent": "E-mail er afsendt", "email-verifyEmail-subject": "Verificér din e-mailadresse på your __siteName__", "email-verifyEmail-text": "Hej __user__,\n\nFor at verificere din e-mail for kontoen, så klik på linket nedenfor.\n\n__url__\n\nTak.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Slå WIP-begrænsning til", "error-board-doesNotExist": "Denne tavle eksisterer ikke.", "error-board-notAdmin": "Du skal være administrator for tavlen for at gøre dette", @@ -451,7 +443,7 @@ "advanced-filter-description": "Avanceret filter gør det muligt at skrive en tekststreng indeholdende følgende operatører: == != <= >= && || ( ) Mellemrum anvendes som adskillelsestegn mellem operatørerne. Du kan filtrere alle Brugerdefinerede felter ved at taste deres navne og værdier. Som eksempel: Felt1 == Værdi1. Bemærk: Hvis felter eller værdier indeholder mellemrum, så skal du indkapsle dem i enkeltcitationstegn. Som eksempel: 'Felt 1' == 'Værdi1'. For at springe over enkelte kontroltegn (' \\\\/), så kan \\\\ benyttes. Som eksempel: Felt1 == Så\\\\'n. Du kan også kombinere flere betingelser. Som eksempel: F1 == V1 || F1 == V2. Normalt vil alle operatører blive fortolket fra venstre mod højre. Du kan ændre rækkefølgen ved brug af parenteser. Som eksempel: F1 == V1 && (F2 == V2 || F2 == V3). Du kan også søge i tekstfelter med brug af regulære udtryk: F1 == /Tes.*/i", "fullname": "Fuldt navn", "header-logo-title": "Gå tilbage til siden med dine tavler", - "show-activities": "Show Activities", + "hide-system-messages": "Skjul systembeskeder", "headerBarCreateBoardPopup-title": "Opret tavle", "home": "Hjem", "import": "Importér", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Angiv en grænse for det maksimale antal opgaver i denne liste", "setWipLimitPopup-title": "Angiv WIP-begrænsning", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Tilknyt dig selv til nuværende kort?", "shortcut-autocomplete-emoji": "Auto-fuldfør emoji", "shortcut-autocomplete-members": "Auto-fuldfør medlemmer", "shortcut-clear-filters": "Ryd alle filtre", "shortcut-close-dialog": "Luk dialogboks", "shortcut-filter-my-cards": "Filtrer mine kort", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Fremvis denne liste med genveje", "shortcut-toggle-filterbar": "Slå filter-sidebjælke til/fra", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Har kort med anvendt tid", "time": "Tid", "title": "Titel", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Sporing", @@ -830,7 +819,7 @@ "r-item": "element", "r-of-checklist": "fra tjekliste", "r-send-email": "Send en e-mail", - "r-to": "til", + "r-to": "to", "r-of": "af", "r-subject": "emne", "r-rule-details": "Detaljer for regel", @@ -839,7 +828,7 @@ "r-d-move-to-bottom-gen": "Flyt kortet til bunden af dens liste", "r-d-move-to-bottom-spec": "Flyt kortet til bunden af listen", "r-d-send-email": "Send e-mail", - "r-d-send-email-to": "til", + "r-d-send-email-to": "to", "r-d-send-email-subject": "emne", "r-d-send-email-message": "besked", "r-d-archive": "Flyt kortet til arkiv", @@ -865,7 +854,7 @@ "r-items-list": "element1,element2,element3", "r-add-swimlane": "Tilføj svømmebane", "r-swimlane-name": "navn på svømmebane", - "r-board-note": "Bemærk: lad et felt stå tomt for at matche alle værdier.", + "r-board-note": "Note: leave a field empty to match every possible value. ", "r-checklist-note": "Bemærk: tjeklistens elementer skal skrives som en kommaadskilte værdier.", "r-when-a-card-is-moved": "Når et kort flyttes til en anden liste.", "r-set": "Angiv", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Du kan ikke slette dette kort før der slettes sammenkædede kort som har", "delete-linked-cards-before-this-list": "Du kan ikke slette denne liste før der slettes sammenkædede kort, der peger til kort i denne liste", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1111,7 +1099,7 @@ "label-names": "Label Names", "archived-at": "archived at", "sort-cards": "Sort Cards", - "sort-is-on": "Sortering er slået til", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "Sort Cards", "due-date": "Due Date", "server-error": "Server Error", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1253,20 +1237,11 @@ "newTranslationPopup-title": "New custom translation string", "editTranslationPopup-title": "Edit custom translation string", "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Oversæt", + "translation": "Translation", "text": "Tekst", - "translation-text": "Oversættelsestekst", - "show-subtasks-field": "Vis felt med underopgaver", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Konvertér til markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Sammenfold", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/de-AT.i18n.json b/imports/i18n/data/de-AT.i18n.json index 0281a474d..a1410cf0e 100644 --- a/imports/i18n/data/de-AT.i18n.json +++ b/imports/i18n/data/de-AT.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "hat %s ins Archiv verschoben", "activity-attached": "hat %s an %s angehängt", "activity-created": "hat %s erstellt", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "hat das benutzerdefinierte Feld %s erstellt", "activity-excluded": "hat %s von %s ausgeschlossen", "activity-imported": "hat %s in %s von %s importiert", @@ -86,12 +85,10 @@ "add-card": "Karte hinzufügen", "add-card-to-top-of-list": "Karte am Anfang der Liste hinzufügen", "add-card-to-bottom-of-list": "Karte am Ende der Liste hinzufügen", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklisten", "click-to-star": "Klicken Sie, um das Board mit einem Stern zu markieren.", "click-to-unstar": "Klicken Sie, um den Stern vom Board zu entfernen.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Zwischenablage oder Drag & Drop", "close": "Schließen", "close-board": "Board schließen", @@ -300,7 +294,6 @@ "color-white": "Weiß", "color-yellow": "gelb", "unset-color": "Nicht festgelegt", - "comments": "Comments", "comment": "Kommentar", "comment-placeholder": "Kommentar schreiben", "comment-only": "Nur Kommentare", @@ -383,7 +376,6 @@ "email-sent": "E-Mail gesendet", "email-verifyEmail-subject": "Bestätigen Sie ihre E-Mail-Adresse auf __siteName__", "email-verifyEmail-text": "Hallo __user__,\n\num ihre E-Mail-Adresse zu bestätigen, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "WIP-Limit einschalten", "error-board-doesNotExist": "Dieses Board existiert nicht", "error-board-notAdmin": "Um das zu tun, müssen Sie Administrator dieses Boards sein", @@ -451,7 +443,7 @@ "advanced-filter-description": "Der erweiterte Filter erlaubt die Eingabe von Zeichenfolgen, die folgende Operatoren enthalten: == != <= >= && || ( ). Ein Leerzeichen wird als Trennzeichen zwischen den Operatoren verwendet. Sie können nach allen benutzerdefinierten Feldern filtern, indem Sie deren Namen und Werte eingeben. Zum Beispiel: Feld1 == Wert1. Hinweis: Wenn Felder oder Werte Leerzeichen enthalten, müssen Sie sie in einfache Anführungszeichen setzen. Zum Beispiel: 'Feld 1' == 'Wert 1'. Um einzelne Steuerzeichen (' \\\\/) zu überspringen, können Sie \\\\ verwenden. Zum Beispiel: Feld1 == Ich bin\\\\'s. Sie können außerdem mehrere Bedingungen kombinieren. Zum Beispiel: F1 == W1 || F1 == W2. Normalerweise werden alle Operatoren von links nach rechts interpretiert. Sie können die Reihenfolge ändern, indem Sie Klammern setzen. Zum Beispiel: F1 == W1 && ( F2 == W2 || F2 == W3 ). Sie können Textfelder auch mithilfe regulärer Ausdrücke durchsuchen: F1 == /Tes.*/i", "fullname": "Vollständiger Name", "header-logo-title": "Zurück zur Board Seite.", - "show-activities": "Show Activities", + "hide-system-messages": "Systemmeldungen ausblenden", "headerBarCreateBoardPopup-title": "Board erstellen", "home": "Home", "import": "Importieren", @@ -580,14 +572,12 @@ "select-board": "Board auswählen", "set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste", "setWipLimitPopup-title": "WIP-Limit setzen", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Fügen Sie sich zur aktuellen Karte hinzu", "shortcut-autocomplete-emoji": "Emojis vervollständigen", "shortcut-autocomplete-members": "Mitglieder vervollständigen", "shortcut-clear-filters": "Alle Filter entfernen", "shortcut-close-dialog": "Dialog schließen", "shortcut-filter-my-cards": "Meine Karten filtern", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Liste der Tastaturkürzel anzeigen", "shortcut-toggle-filterbar": "Filter-Seitenleiste ein-/ausblenden", "shortcut-toggle-searchbar": "Such-Seitenleiste ein-/ausblenden", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Hat Karten mit aufgewendeten Zeiten", "time": "Zeit", "title": "Titel", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Folgen", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Sie können diese Karte nicht löschen, bevor verbundene Karten nicht gelöscht wurden.", "delete-linked-cards-before-this-list": "Sie können diese Liste erst löschen, wenn Sie alle Karten gelöscht haben, die auf Karten in dieser Liste verweisen.", "hide-checked-items": "Erledigte ausblenden", - "hide-finished-checklist": "Hide finished checklist", "task": "Aufgabe", "create-task": "Aufgabe erstellen", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Erstelldatum (neueste zuerst)", "created-at-oldest-first": "Erstelldatum (älteste zuerst)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Alle System-Nachrichten aller Nutzer verbergen", + "now-system-messages-of-all-users-are-hidden": "Alle System-Nachrichten aller Nutzer sind nun verborgen", "move-swimlane": "Swimlane verschieben", "moveSwimlanePopup-title": "Swimlane verschieben", "custom-field-stringtemplate": "String-Vorlage", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Trenner (verwende oder   für einen Leerschritt)", "custom-field-stringtemplate-item-placeholder": "Drücke die Eingabetaste, um weitere Einträge hinzuzufügen", "creator": "Ersteller", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Dateien-Bericht", "reports": "Berichte", "rulesReportTitle": "Regeln-Bericht", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklistenaktionen", "moveChecklist": "Checkliste verschieben", "moveChecklistPopup-title": "Checkliste verschieben", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Neue Zeile wird neuer Checklisteneintrag", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Einklappen", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/de-CH.i18n.json b/imports/i18n/data/de-CH.i18n.json index e52b93ad6..79b01d75b 100644 --- a/imports/i18n/data/de-CH.i18n.json +++ b/imports/i18n/data/de-CH.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "hat %s ins Archiv verschoben", "activity-attached": "hat %s an %s angehängt", "activity-created": "hat %s erstellt", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "hat das benutzerdefinierte Feld %s erstellt", "activity-excluded": "hat %s von %s ausgeschlossen", "activity-imported": "hat %s in %s von %s importiert", @@ -86,12 +85,10 @@ "add-card": "Karte hinzufügen", "add-card-to-top-of-list": "Karte am Anfang der Liste hinzufügen", "add-card-to-bottom-of-list": "Karte am Ende der Liste hinzufügen", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklisten", "click-to-star": "Klicken Sie, um das Board mit einem Stern zu markieren.", "click-to-unstar": "Klicken Sie, um den Stern vom Board zu entfernen.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Zwischenablage oder Drag & Drop", "close": "Schliessen", "close-board": "Board schliessen", @@ -300,7 +294,6 @@ "color-white": "Weiss", "color-yellow": "gelb", "unset-color": "Nicht festgelegt", - "comments": "Comments", "comment": "Kommentar speichern", "comment-placeholder": "Kommentar schreiben", "comment-only": "Nur Kommentare", @@ -383,7 +376,6 @@ "email-sent": "E-Mail gesendet", "email-verifyEmail-subject": "Bestätigen Sie ihre E-Mail-Adresse auf __siteName__", "email-verifyEmail-text": "Hallo __user__,\n\num ihre E-Mail-Adresse zu bestätigen, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "WIP-Limit einschalten", "error-board-doesNotExist": "Dieses Board existiert nicht", "error-board-notAdmin": "Um das zu tun, müssen Sie Administrator dieses Boards sein", @@ -451,7 +443,7 @@ "advanced-filter-description": "Der erweiterte Filter erlaubt die Eingabe von Zeichenfolgen, die folgende Operatoren enthalten: == != <= >= && || ( ). Ein Leerzeichen wird als Trennzeichen zwischen den Operatoren verwendet. Sie können nach allen benutzerdefinierten Feldern filtern, indem Sie deren Namen und Werte eingeben. Zum Beispiel: Feld1 == Wert1. Hinweis: Wenn Felder oder Werte Leerzeichen enthalten, müssen Sie sie in einfache Anführungszeichen setzen. Zum Beispiel: 'Feld 1' == 'Wert 1'. Um einzelne Steuerzeichen (' \\\\/) zu überspringen, können Sie \\\\ verwenden. Zum Beispiel: Feld1 == Ich bin\\\\'s. Sie können ausserdem mehrere Bedingungen kombinieren. Zum Beispiel: F1 == W1 || F1 == W2. Normalerweise werden alle Operatoren von links nach rechts interpretiert. Sie können die Reihenfolge ändern, indem Sie Klammern setzen. Zum Beispiel: F1 == W1 && ( F2 == W2 || F2 == W3 ). Sie können Textfelder auch mithilfe regulärer Ausdrücke durchsuchen: F1 == /Tes.*/i", "fullname": "Vollständiger Name", "header-logo-title": "Zurück zur Board Seite.", - "show-activities": "Show Activities", + "hide-system-messages": "Systemmeldungen ausblenden", "headerBarCreateBoardPopup-title": "Board erstellen", "home": "Home", "import": "Importieren", @@ -580,14 +572,12 @@ "select-board": "Board auswählen", "set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste", "setWipLimitPopup-title": "WIP-Limit setzen", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Fügen Sie sich zur aktuellen Karte hinzu", "shortcut-autocomplete-emoji": "Emojis vervollständigen", "shortcut-autocomplete-members": "Mitglieder vervollständigen", "shortcut-clear-filters": "Alle Filter entfernen", "shortcut-close-dialog": "Dialog schliessen", "shortcut-filter-my-cards": "Meine Karten filtern", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Liste der Tastaturkürzel anzeigen", "shortcut-toggle-filterbar": "Filter-Seitenleiste ein-/ausblenden", "shortcut-toggle-searchbar": "Such-Seitenleiste ein-/ausblenden", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Hat Karten mit aufgewendeten Zeiten", "time": "Zeit", "title": "Titel", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Label 1-9 zur Karte hinzufügen. Bei Mehrfachauswahl Label 1-9 hinzufügen", "remove-labels-multiselect": "Labels 1-9 bei Karten-Mehrfachauswahl entfernen", "tracking": "Folgen", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Sie können diese Karte nicht löschen, bevor verbundene Karten nicht gelöscht wurden.", "delete-linked-cards-before-this-list": "Sie können diese Liste erst löschen, wenn Sie alle Karten gelöscht haben, die auf Karten in dieser Liste verweisen.", "hide-checked-items": "Erledigte ausblenden", - "hide-finished-checklist": "Hide finished checklist", "task": "Aufgabe", "create-task": "Aufgabe erstellen", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Erstelldatum (neueste zuerst)", "created-at-oldest-first": "Erstelldatum (älteste zuerst)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Alle System-Nachrichten aller Nutzer verbergen", + "now-system-messages-of-all-users-are-hidden": "Alle System-Nachrichten aller Nutzer sind nun verborgen", "move-swimlane": "Swimlane verschieben", "moveSwimlanePopup-title": "Swimlane verschieben", "custom-field-stringtemplate": "String-Vorlage", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Trenner (verwende oder   für einen Leerschritt)", "custom-field-stringtemplate-item-placeholder": "Drücke die Eingabetaste, um weitere Einträge hinzuzufügen", "creator": "Ersteller", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Dateien-Bericht", "reports": "Berichte", "rulesReportTitle": "Regeln-Bericht", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Listenaktionen", "moveChecklist": "Checkliste bewegen", "moveChecklistPopup-title": "Checkliste bewegen", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Neue Zeile wird neuer Checklisteneintrag", "copyChecklist": "Checkliste kopieren", "copyChecklistPopup-title": "Checkliste kopieren", "card-show-lists": "Listen anzeigen", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Einklappen", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/de.i18n.json b/imports/i18n/data/de.i18n.json index fbe3b6ecf..77a472bf4 100644 --- a/imports/i18n/data/de.i18n.json +++ b/imports/i18n/data/de.i18n.json @@ -12,7 +12,7 @@ "act-addChecklistItem": "hat Checklistenelement __checklistItem__ zu Checkliste __checkList__ auf der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt", "act-removeChecklist": "hat Checkliste __checklist__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", "act-removeChecklistItem": "hat Checklistenposition __checklistItem__ von Checkliste __checkList__ auf der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", - "act-checkedItem": "hat __checklistItem__ der Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ erledigt", + "act-checkedItem": "hat __checklistItem__ der Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ abgehakt", "act-uncheckedItem": "hat Haken von __checklistItem__ der Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", "act-completeChecklist": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt", "act-uncompleteChecklist": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ unvervollständigt", @@ -49,7 +49,6 @@ "activity-archived": "hat %s ins Archiv verschoben", "activity-attached": "hat %s an %s angehängt", "activity-created": "hat %s erstellt", - "activity-changedListTitle": "Liste umbenannt zu %s", "activity-customfield-created": "hat das benutzerdefinierte Feld %s erstellt", "activity-excluded": "hat %s von %s ausgeschlossen", "activity-imported": "hat %s in %s von %s importiert", @@ -61,16 +60,16 @@ "activity-sent": "hat %s an %s gesendet", "activity-unjoined": "hat %s verlassen", "activity-subtask-added": "Teilaufgabe zu %s hinzugefügt", - "activity-checked-item": "erledigt %s in Checkliste %s von %s", + "activity-checked-item": "markierte %s in Checkliste %s von %s", "activity-unchecked-item": "hat %s in Checkliste %s von %s abgewählt", "activity-checklist-added": "hat eine Checkliste zu %s hinzugefügt", "activity-checklist-removed": "entfernte eine Checkliste von %s", "activity-checklist-completed": "Abgeschlossene Checkliste", "activity-checklist-uncompleted": "unvervollständigte die Checkliste %s von %s", - "activity-checklist-item-added": "hat einen Checklisteneintrag zu '%s' in %s hinzugefügt", - "activity-checklist-item-removed": "hat einen Checklisteneintrag von '%s' in %s entfernt", + "activity-checklist-item-added": "hat ein Checklistenelement zu '%s' in %s hinzugefügt", + "activity-checklist-item-removed": "hat ein Checklistenelement von '%s' in %s entfernt", "add": "Hinzufügen", - "activity-checked-item-card": "erledigt %s in Checkliste %s", + "activity-checked-item-card": "markiere %s in Checkliste %s", "activity-unchecked-item-card": "hat %s in Checkliste %s abgewählt", "activity-checklist-completed-card": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt", "activity-checklist-uncompleted-card": "unvervollständigte die Checkliste %s", @@ -86,12 +85,10 @@ "add-card": "Karte hinzufügen", "add-card-to-top-of-list": "Karte am Anfang der Liste hinzufügen", "add-card-to-bottom-of-list": "Karte am Ende der Liste hinzufügen", - "setListWidthPopup-title": "Setze die Breiten", - "set-list-width": "Setze die Breiten", - "set-list-width-value": "Setze min & max Breite (Pixel)", - "list-width-error-message": "Breite der Liste muss eine ganze Zahl größer als 100 sein", - "keyboard-shortcuts-enabled": "Tastaturkürzel sind aktiviert. Klicke, um sie zu deaktivieren.", - "keyboard-shortcuts-disabled": "Tastaturkürzel sind deaktiviert. Klicke, um sie zu aktivieren.", + "setListWidthPopup-title": "Stelle die Breite der Liste ein", + "set-list-width": "Stelle die Breite der Liste ein", + "set-list-width-value": "Breite der Liste (Pixel)", + "list-width-error-message": "Die Breite der Liste muss eine positive ganze Zahl sein", "setSwimlaneHeightPopup-title": "Stelle die Höhe der Swimlane ein", "set-swimlane-height": "Stelle die Höhe der Swimlane ein", "set-swimlane-height-value": "Höhe der Swimlane (Pixel)", @@ -99,9 +96,9 @@ "add-swimlane": "Swimlane hinzufügen", "add-subtask": "Teilaufgabe hinzufügen", "add-checklist": "Checkliste hinzufügen", - "add-checklist-item": "Einen Eintrag zur Checkliste hinzufügen", - "close-add-checklist-item": "Schließe Einen Eintrag zur Checkliste hinzufügen", - "close-edit-checklist-item": "Schließe Bearbeitung eines Checklisteneintrags", + "add-checklist-item": "Element zu Checkliste hinzufügen", + "close-add-checklist-item": "Schließe Element zu Checkliste hinzufügen", + "close-edit-checklist-item": "Schließe Bearbeitung des Checklisten Elements", "convertChecklistItemToCardPopup-title": "Zu Karte umwandeln", "add-cover": "Cover Bild zu Minikarte hinzufügen", "add-label": "Label hinzufügen", @@ -266,9 +263,6 @@ "checklists": "Checklisten", "click-to-star": "Klicken Sie, um das Board mit einem Stern zu markieren.", "click-to-unstar": "Klicken Sie, um den Stern vom Board zu entfernen.", - "click-to-enable-auto-width": "Automatische Listenbreite ist deaktiviert. Klicke, um sie zu aktivieren.", - "click-to-disable-auto-width": "Automatische Listenbreite ist aktiviert. Klicke, um sie zu deaktivieren.", - "auto-list-width": "Automatische Listenbreite", "clipboard": "Zwischenablage oder Drag & Drop", "close": "Schließen", "close-board": "Board schließen", @@ -300,7 +294,6 @@ "color-white": "Weiß", "color-yellow": "gelb", "unset-color": "Nicht festgelegt", - "comments": "Kommentare", "comment": "Kommentar speichern", "comment-placeholder": "Kommentar schreiben", "comment-only": "Nur Kommentare", @@ -383,7 +376,6 @@ "email-sent": "E-Mail gesendet", "email-verifyEmail-subject": "Bestätigen Sie ihre E-Mail-Adresse auf __siteName__", "email-verifyEmail-text": "Hallo __user__,\n\num ihre E-Mail-Adresse zu bestätigen, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.", - "enable-vertical-scrollbars": "Vertikale Bildlaufleisten aktivieren", "enable-wip-limit": "WIP-Limit einschalten", "error-board-doesNotExist": "Dieses Board existiert nicht", "error-board-notAdmin": "Um das zu tun, müssen Sie Administrator dieses Boards sein", @@ -451,7 +443,7 @@ "advanced-filter-description": "Der erweiterte Filter erlaubt die Eingabe von Zeichenfolgen, die folgende Operatoren enthalten: == != <= >= && || ( ). Ein Leerzeichen wird als Trennzeichen zwischen den Operatoren verwendet. Sie können nach allen benutzerdefinierten Feldern filtern, indem Sie deren Namen und Werte eingeben. Zum Beispiel: Feld1 == Wert1. Hinweis: Wenn Felder oder Werte Leerzeichen enthalten, müssen Sie sie in einfache Anführungszeichen setzen. Zum Beispiel: 'Feld 1' == 'Wert 1'. Um einzelne Steuerzeichen (' \\\\/) zu überspringen, können Sie \\\\ verwenden. Zum Beispiel: Feld1 == Ich bin\\\\'s. Sie können außerdem mehrere Bedingungen kombinieren. Zum Beispiel: F1 == W1 || F1 == W2. Normalerweise werden alle Operatoren von links nach rechts interpretiert. Sie können die Reihenfolge ändern, indem Sie Klammern setzen. Zum Beispiel: F1 == W1 && ( F2 == W2 || F2 == W3 ). Sie können Textfelder auch mithilfe regulärer Ausdrücke durchsuchen: F1 == /Tes.*/i", "fullname": "Vollständiger Name", "header-logo-title": "Zurück zur Board Seite.", - "show-activities": "Aktivitäten anzeigen", + "hide-system-messages": "Systemmeldungen ausblenden", "headerBarCreateBoardPopup-title": "Board erstellen", "home": "Home", "import": "Importieren", @@ -580,14 +572,12 @@ "select-board": "Board auswählen", "set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste", "setWipLimitPopup-title": "WIP-Limit setzen", - "shortcut-add-self": "Füge dich selbst zur Karte hinzu", "shortcut-assign-self": "Fügen Sie sich zur aktuellen Karte hinzu", "shortcut-autocomplete-emoji": "Emojis vervollständigen", "shortcut-autocomplete-members": "Mitglieder vervollständigen", "shortcut-clear-filters": "Alle Filter entfernen", "shortcut-close-dialog": "Dialog schließen", "shortcut-filter-my-cards": "Meine Karten filtern", - "shortcut-filter-my-assigned-cards": "Meine zugewiesenen Karten filtern", "shortcut-show-shortcuts": "Liste der Tastaturkürzel anzeigen", "shortcut-toggle-filterbar": "Filter-Seitenleiste ein-/ausblenden", "shortcut-toggle-searchbar": "Such-Seitenleiste ein-/ausblenden", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Hat Karten mit aufgewendeten Zeiten", "time": "Zeit", "title": "Titel", - "toggle-assignees": "Schalte Zugewiesene 1–9 für die Karte um (in der Reihenfolge der Hinzufügung zum Board).", "toggle-labels": "Label 1-9 zur Karte hinzufügen. Bei Mehrfachauswahl Label 1-9 hinzufügen", "remove-labels-multiselect": "Labels 1-9 bei Karten-Mehrfachauswahl entfernen", "tracking": "Folgen", @@ -804,10 +793,10 @@ "r-when-the-checklist": "Wenn die Checkliste", "r-completed": "abgeschlossen", "r-made-incomplete": "unvollständig gemacht", - "r-when-a-item": "Wenn ein Checklisteneintrag wird", - "r-when-the-item": "Wenn der Checklisteneintrag", - "r-checked": "erledigt", - "r-unchecked": "abgewählt", + "r-when-a-item": "Wenn eine Checklistenposition", + "r-when-the-item": "Wenn der Checklisten Eintrag", + "r-checked": "markiert wird", + "r-unchecked": "abgewählt wird", "r-move-card-to": "Verschiebe Karte an", "r-top-of": "Anfang von", "r-bottom-of": "Ende von", @@ -824,7 +813,7 @@ "r-checklist": "Checkliste", "r-check-all": "Alle markieren", "r-uncheck-all": "Alle abwählen", - "r-items-check": "Einträge der Checkliste", + "r-items-check": "Elemente der Checkliste", "r-check": "Markieren", "r-uncheck": "Abwählen", "r-item": "Element", @@ -965,8 +954,7 @@ "archived": "Archiviert", "delete-linked-card-before-this-card": "Sie können diese Karte nicht löschen, bevor verbundene Karten nicht gelöscht wurden.", "delete-linked-cards-before-this-list": "Sie können diese Liste erst löschen, wenn Sie alle Karten gelöscht haben, die auf Karten in dieser Liste verweisen.", - "hide-checked-items": "Erledigte Einträge ausblenden", - "hide-finished-checklist": "Abgeschlossene Checkliste ausblenden", + "hide-checked-items": "Erledigte ausblenden", "task": "Aufgabe", "create-task": "Aufgabe erstellen", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Teams", "displayName": "Anzeigename", "shortName": "Kurzname", - "autoAddUsersWithDomainName": "Automatisch Benutzer über den Domainnamen hinzufügen", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Webseite", "person": "Person", "my-cards": "Meine Karten", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Erstelldatum (neueste zuerst)", "created-at-oldest-first": "Erstelldatum (älteste zuerst)", "links-heading": "Links", - "hide-activities-of-all-boards": "Zeige die Board Aktivitäten nicht auf allen Boards", - "now-activities-of-all-boards-are-hidden": "Alle Aktivitäten von allen Boards sind nun verborgen", + "hide-system-messages-of-all-users": "Alle System-Nachrichten aller Nutzer verbergen", + "now-system-messages-of-all-users-are-hidden": "Alle System-Nachrichten aller Nutzer sind nun verborgen", "move-swimlane": "Swimlane verschieben", "moveSwimlanePopup-title": "Swimlane verschieben", "custom-field-stringtemplate": "String-Vorlage", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Trenner (verwende oder   für einen Leerschritt)", "custom-field-stringtemplate-item-placeholder": "Drücke die Eingabetaste, um weitere Einträge hinzuzufügen", "creator": "Ersteller", - "creator-on-minicard": "Ersteller auf Minikarte", "filesReportTitle": "Dateien-Bericht", "reports": "Berichte", "rulesReportTitle": "Regeln-Bericht", @@ -1178,21 +1165,21 @@ "invite-people-error": "Fehler beim Versand der Registrierungseinladung", "can-invite-if-same-mailDomainName": "Name der Email-Domain", "to-create-teams-contact-admin": "Bitte kontaktieren Sie den Administrator um Teams anlegen zu lassen.", - "Node_heap_total_heap_size": "Node-Heap: gesamte Heap-Größe", - "Node_heap_total_heap_size_executable": "Node-Heap: gesamte Heap-Größe (Executable)", - "Node_heap_total_physical_size": "Node-Heap: gesamte physische Größe", - "Node_heap_total_available_size": "Node-Heap: gesamte verfügbare Größe", - "Node_heap_used_heap_size": "Node-Heap: benutzte Heap-Größe", - "Node_heap_heap_size_limit": "Node-Heap: Heap-Größen-Limit", - "Node_heap_malloced_memory": "Node-Heap: malloc-belegter Speicher", - "Node_heap_peak_malloced_memory": "Node-Heap: Maximum des malloc-belegten Speichers", - "Node_heap_does_zap_garbage": "Node-Heap: verwendet „Zap-Garbage“", - "Node_heap_number_of_native_contexts": "Node-Heap: Anzahl nativer Kontexte", - "Node_heap_number_of_detached_contexts": "Node-Heap: Anzahl losgelöster Kontexte", - "Node_memory_usage_rss": "Node-Speicherverbrauch: Resident Set-Größe", - "Node_memory_usage_heap_total": "Node-Speicherverbrauch: gesamte Größe des belegten Heaps", - "Node_memory_usage_heap_used": "Node-Speicherverbrauch: tatsächlicher Speicherverbrauch", - "Node_memory_usage_external": "Node-Speicherverbrauch: extern", + "Node_heap_total_heap_size": "Knoten-Heap: totale Heap-Größe", + "Node_heap_total_heap_size_executable": "Knoten-Heap: totale Heap-Größe (Executable)", + "Node_heap_total_physical_size": "Knoten-Heap: totale physische Größe", + "Node_heap_total_available_size": "Knoten-Heap: totale verfügbare Größe", + "Node_heap_used_heap_size": "Knoten-Heap: benutzte Heap-Größe", + "Node_heap_heap_size_limit": "Knoten-Heap: Heap-Größen-Limit", + "Node_heap_malloced_memory": "Knoten-Heap: malloc-belegter Speicher", + "Node_heap_peak_malloced_memory": "Knoten-Heap: Maximum des malloc-belegten Speichers", + "Node_heap_does_zap_garbage": "Knoten-Heap: macht „Zap-Garbage“", + "Node_heap_number_of_native_contexts": "Knoten-Heap: Anzahl nativer Kontexte", + "Node_heap_number_of_detached_contexts": "Knoten-Heap: Anzahl losgelöster Kontexte", + "Node_memory_usage_rss": "Knoten-Speicherverbrauch: Resident Set-Größe", + "Node_memory_usage_heap_total": "Knoten-Speicherverbrauch: totale Größe des belegten Heaps", + "Node_memory_usage_heap_used": "Knoten-Speicherverbrauch: tatsächlicher Speicherverbrauch", + "Node_memory_usage_external": "Knoten-Speicherverbrauch: extern", "add-organizations": "Organisation hinzufügen", "add-organizations-label": "Hinzugefügte Organisationen werden nachfolgend angezeigt:", "remove-organization-from-board": "Sicher, dass du die Organisation von diesem Board entfernen willst?", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklistenaktionen", "moveChecklist": "Checkliste verschieben", "moveChecklistPopup-title": "Checkliste verschieben", - "newlineBecomesNewChecklistItem": "Jede Textzeile wird in einen Checklisteneintrag umgewandelt", - "newLineNewItem": "Eine Textzeile = ein Checklisteneintrag", - "newlineBecomesNewChecklistItemOriginOrder": "Jede Textzeile wird in einen Checklisteneintrag umgewandelt, ursprüngliche Reihenfolge", - "originOrder": "ursprüngliche Reihenfolge", + "newlineBecomesNewChecklistItem": "Neue Zeile wird neuer Checklisteneintrag", "copyChecklist": "Checkliste kopieren", "copyChecklistPopup-title": "Checkliste kopieren", "card-show-lists": "Listen anzeigen", @@ -1256,17 +1240,8 @@ "translation": "Übersetzung", "text": "Text", "translation-text": "Übersetzungstext", + "show-at-minicard": "Zeige auf Minikarte", + "show-checklist-at-minicard": "Checkliste auf Minikarte anzeigen", "show-subtasks-field": "Teilaufgaben Feld anzeigen", - "show-week-of-year": "Kalenderwoche anzeigen (ISO 8601)", - "convert-to-markdown": "Als Markdown konvertieren", - "import-board-zip": "Erstelle .zip Datei, die Board JSON Dateien und Board Unterverzeichnisse mit Boardname inklusive Anhängen enthält", - "collapse": "Einklappen", - "uncollapse": "Aufklappen", - "hideCheckedChecklistItems": "Erledigte Checklisteneinträge ausblenden", - "hideAllChecklistItems": "Verberge alle Checklisteneinträge", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Bedienungshilfe Seite freigeschaltet", - "accessibility-title": "Bedienungshilfe Titel", - "accessibility-content": "Bedienungshilfe Inhalt" + "convert-to-markdown": "Als Markdown konvertieren" } diff --git a/imports/i18n/data/de_DE.i18n.json b/imports/i18n/data/de_DE.i18n.json deleted file mode 100644 index fc3ed5809..000000000 --- a/imports/i18n/data/de_DE.i18n.json +++ /dev/null @@ -1,1272 +0,0 @@ -{ - "accept": "Akzeptieren", - "act-activity-notify": "Aktivitätsbenachrichtigung", - "act-addAttachment": "hat Anhang __attachment__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt", - "act-deleteAttachment": "hat Anhang __attachment__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ gelöscht", - "act-addSubtask": "hat Teilaufgabe __subtask__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt", - "act-addLabel": "hat Label __label__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt", - "act-addedLabel": "hat Label __label__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt", - "act-removeLabel": "hat Label __label__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", - "act-removedLabel": "hat Label __label__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", - "act-addChecklist": "hat Checkliste __checklist__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt", - "act-addChecklistItem": "hat Checklistenelement __checklistItem__ zu Checkliste __checkList__ auf der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt", - "act-removeChecklist": "hat Checkliste __checklist__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", - "act-removeChecklistItem": "hat Checklistenposition __checklistItem__ von Checkliste __checkList__ auf der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", - "act-checkedItem": "hat __checklistItem__ der Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ abgehakt", - "act-uncheckedItem": "hat Haken von __checklistItem__ der Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", - "act-completeChecklist": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt", - "act-uncompleteChecklist": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ unvervollständigt", - "act-addComment": "hat Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ kommentiert: __comment__", - "act-editComment": "hat den Kommentar auf Karte __card__: __comment__ auf Liste __list__ in Swimlane __swimlane__ in Board __board__ bearbeitet", - "act-deleteComment": "hat den Kommentar von Karte __card__: __comment__ auf Liste __list__ in Swimlane __swimlane__ in Board __board__ gelöscht", - "act-createBoard": "hat Board __board__ erstellt", - "act-createSwimlane": "hat Swimlane __swimlane__ in Board __board__ erstellt", - "act-createCard": "hat Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ erstellt", - "act-createCustomField": "hat benutzerdefiniertes Feld __customField__ in Board __board__ angelegt", - "act-deleteCustomField": "hat benutzerdefiniertes Feld __customField__ in Board __board__ gelöscht", - "act-setCustomField": "hat benutzerdefiniertes Feld __customField__: __customFieldValue__ auf Karte __card__ auf Liste __list__ in Swimlane __swimlane__ in Board __board__ bearbeitet", - "act-createList": "hat Liste __list__ zu Board __board__ hinzugefügt", - "act-addBoardMember": "hat Mitglied __member__ zu Board __board__ hinzugefügt", - "act-archivedBoard": "hat Board __board__ ins Archiv verschoben", - "act-archivedCard": "hat Karte __card__ von der Liste __list__ in Swimlane __swimlane__ in Board __board__ ins Archiv verschoben", - "act-archivedList": "hat Liste __list__ in Swimlane __swimlane__ in Board __board__ ins Archiv verschoben", - "act-archivedSwimlane": "hat Swimlane __swimlane__ von Board __board__ ins Archiv verschoben", - "act-importBoard": "hat Board __board__ importiert", - "act-importCard": "hat Karte __card__ in Liste __list__ in Swimlane __swimlane__ in Board __board__ importiert", - "act-importList": "hat Liste __list__ in Swimlane __swimlane__ in Board __board__ importiert", - "act-joinMember": "hat Mitglied __member__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt", - "act-moveCard": "hat Karte __card__ in Board __board__ von Liste __oldList__ in Swimlane __oldSwimlane__ zu Liste __list__ in Swimlane __swimlane__ verschoben", - "act-moveCardToOtherBoard": "hat Karte __card__ von Liste __oldList__ in Swimlane __oldSwimlane__ in Board __oldBoard__ zu Liste __list__ in Swimlane __swimlane__ in Board __board__ verschoben", - "act-removeBoardMember": "hat Mitglied __member__ von Board __board__ entfernt", - "act-restoredCard": "hat Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ wiederhergestellt", - "act-unjoinMember": "hat Mitglied __member__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt", - "act-withBoardTitle": "__board__", - "act-withCardTitle": "[__board__] __card__", - "actions": "Aktionen", - "activities": "Aktivitäten", - "activity": "Aktivität", - "activity-added": "hat %s zu %s hinzugefügt", - "activity-archived": "hat %s ins Archiv verschoben", - "activity-attached": "hat %s an %s angehängt", - "activity-created": "hat %s erstellt", - "activity-changedListTitle": "Liste umbenannt zu %s", - "activity-customfield-created": "hat das benutzerdefinierte Feld %s erstellt", - "activity-excluded": "hat %s von %s ausgeschlossen", - "activity-imported": "hat %s in %s von %s importiert", - "activity-imported-board": "hat %s von %s importiert", - "activity-joined": "ist %s beigetreten", - "activity-moved": "hat %s von %s nach %s verschoben", - "activity-on": "in %s", - "activity-removed": "hat %s von %s entfernt", - "activity-sent": "hat %s an %s gesendet", - "activity-unjoined": "hat %s verlassen", - "activity-subtask-added": "Teilaufgabe zu %s hinzugefügt", - "activity-checked-item": "markierte %s in Checkliste %s von %s", - "activity-unchecked-item": "hat %s in Checkliste %s von %s abgewählt", - "activity-checklist-added": "hat eine Checkliste zu %s hinzugefügt", - "activity-checklist-removed": "entfernte eine Checkliste von %s", - "activity-checklist-completed": "Abgeschlossene Checkliste", - "activity-checklist-uncompleted": "unvervollständigte die Checkliste %s von %s", - "activity-checklist-item-added": "hat ein Checklistenelement zu '%s' in %s hinzugefügt", - "activity-checklist-item-removed": "hat ein Checklistenelement von '%s' in %s entfernt", - "add": "Hinzufügen", - "activity-checked-item-card": "markiere %s in Checkliste %s", - "activity-unchecked-item-card": "hat %s in Checkliste %s abgewählt", - "activity-checklist-completed-card": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt", - "activity-checklist-uncompleted-card": "unvervollständigte die Checkliste %s", - "activity-editComment": "editierte Kommentar %s", - "activity-deleteComment": "löschte Kommentar %s", - "activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s", - "activity-startDate": "hat Startdatum zu %s geändert auf %s", - "activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s", - "activity-endDate": "hat Enddatum zu %s geändert auf %s", - "add-attachment": "Datei anhängen", - "add-board": "neues Board", - "add-template": "Vorlage hinzufügen", - "add-card": "Karte hinzufügen", - "add-card-to-top-of-list": "Karte am Anfang der Liste hinzufügen", - "add-card-to-bottom-of-list": "Karte am Ende der Liste hinzufügen", - "setListWidthPopup-title": "Setze Breite", - "set-list-width": "Setze Breite", - "set-list-width-value": "Setze min & max Breite (Pixels)", - "list-width-error-message": "Breite der Liste muss eine Ganzzahl größer als 100 sein", - "keyboard-shortcuts-enabled": "Tastaturkürzel sind aktiviert. Klicke, um sie zu deaktivieren.", - "keyboard-shortcuts-disabled": "Tastaturkürzel sind deaktiviert. Klicke, um sie zu aktivieren.", - "setSwimlaneHeightPopup-title": "Stelle die Höhe der Swimlane ein", - "set-swimlane-height": "Stelle die Höhe der Swimlane ein", - "set-swimlane-height-value": "Höhe der Swimlane (Pixel)", - "swimlane-height-error-message": "Die Höhe der Swimlane muss eine positive ganze Zahl sein", - "add-swimlane": "Swimlane hinzufügen", - "add-subtask": "Teilaufgabe hinzufügen", - "add-checklist": "Checkliste hinzufügen", - "add-checklist-item": "Element zu Checkliste hinzufügen", - "close-add-checklist-item": "Schließe Element zu Checkliste hinzufügen", - "close-edit-checklist-item": "Schließe Bearbeitung des Checklisten Elements", - "convertChecklistItemToCardPopup-title": "Zu Karte umwandeln", - "add-cover": "Cover Bild zu Minikarte hinzufügen", - "add-label": "Label hinzufügen", - "add-list": "Liste hinzufügen", - "add-after-list": "Unter der Liste hinzufügen", - "add-members": "Mitglieder hinzufügen", - "added": "Hinzugefügt", - "addMemberPopup-title": "Mitglieder", - "memberPopup-title": "Nutzereinstellungen", - "admin": "Admin", - "admin-desc": "Kann Karten anzeigen und bearbeiten, Mitglieder entfernen und Boardeinstellungen ändern.", - "admin-announcement": "Ankündigung", - "admin-announcement-active": "Aktive systemweite Ankündigungen", - "admin-announcement-title": "Ankündigung des Administrators", - "all-boards": "Alle Boards", - "and-n-other-card": "und eine andere Karte", - "and-n-other-card_plural": "und __count__ andere Karten", - "apply": "Übernehmen", - "app-is-offline": "Laden, bitte warten. Das Aktualisieren der Seite führt zu Datenverlust. Wenn das Laden nicht funktioniert, überprüfen Sie bitte, ob der Server nicht angehalten wurde.", - "app-try-reconnect": "Versuche die Verbindung wiederherzustellen", - "archive": "Ins Archiv verschieben", - "archive-all": "Alles ins Archiv verschieben", - "archive-board": "Board ins Archiv verschieben", - "archive-card": "Karte ins Archiv verschieben", - "archive-list": "Liste ins Archiv verschieben", - "archive-swimlane": "Swimlane ins Archiv verschieben", - "archive-selection": "Auswahl ins Archiv verschieben", - "archiveBoardPopup-title": "Board ins Archiv verschieben?", - "archived-items": "Archiv", - "archived-boards": "Boards im Archiv", - "restore-board": "Board wiederherstellen", - "no-archived-boards": "Keine Boards im Archiv.", - "archives": "Archiv", - "template": "Vorlage", - "templates": "Vorlagen", - "template-container": "Vorlagen-Container", - "add-template-container": "Vorlagen-Container hinzufügen", - "assign-member": "Mitglied zuweisen", - "attached": "angehängt", - "attachment": "Anhang", - "attachment-delete-pop": "Das Löschen eines Anhangs kann nicht rückgängig gemacht werden.", - "attachmentDeletePopup-title": "Anhang löschen?", - "attachments": "Anhänge", - "auto-watch": "Neue Boards nach Erstellung automatisch beobachten", - "avatar-too-big": "Das Profilbild ist zu groß (__size__ max)", - "back": "Zurück", - "board-change-color": "Farbe ändern", - "board-change-background-image": "Hintergrundbild ändern", - "board-background-image-url": "Hintergrundbild URL", - "add-background-image": "Hintergrundbild hinzufügen", - "remove-background-image": "Hintergrundbild entfernen", - "show-at-all-boards-page" : "Auf der \"Alle Boards\" Seite anzeigen", - "board-info-on-my-boards" : "Einstellungen für Alle Boards", - "boardInfoOnMyBoardsPopup-title" : "Einstellungen für Alle Boards", - "boardInfoOnMyBoards-title": "Einstellungen für Alle Boards", - "show-card-counter-per-list": "Zeige Kartenanzahl pro Liste", - "show-board_members-avatar": "Zeige Profilbilder der Board-Mitglieder", - "board-nb-stars": "%s Sterne", - "board-not-found": "Board nicht gefunden", - "board-private-info": "Dieses Board wird privat sein.", - "board-public-info": "Dieses Board wird öffentlich sein.", - "board-drag-drop-reorder-or-click-open": "Benutze Drag-and-Drop, um Board-Icons neu anzuordnen. Klicke auf ein Board-Icon, um das Board zu öffnen.", - "boardChangeColorPopup-title": "Farbe des Boards ändern", - "boardChangeBackgroundImagePopup-title": "Hintergrundbild ändern", - "allBoardsChangeColorPopup-title": "Farbe ändern", - "allBoardsChangeBackgroundImagePopup-title": "Hintergrundbild ändern", - "boardChangeTitlePopup-title": "Board umbenennen", - "boardChangeVisibilityPopup-title": "Sichtbarkeit ändern", - "boardChangeWatchPopup-title": "Beobachtung ändern", - "boardMenuPopup-title": "Boardeinstellungen", - "allBoardsMenuPopup-title": "Einstellungen", - "boardChangeViewPopup-title": "Boardansicht", - "boards": "Boards", - "board-view": "Boardansicht", - "board-view-cal": "Kalender", - "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Einklappen", - "board-view-gantt": "Gantt", - "board-view-lists": "Listen", - "bucket-example": "z.B. \"Löffelliste\"", - "cancel": "Abbrechen", - "card-archived": "Diese Karte wurde ins Archiv verschoben", - "board-archived": "Dieses Board wurde ins Archiv verschoben.", - "card-comments-title": "Diese Karte hat %s Kommentar(e).", - "card-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Alle Aktionen, die dieser Karte zugeordnet sind, werden ebenfalls gelöscht.", - "card-delete-pop": "Alle Aktionen werden aus dem Aktivitätsfeed entfernt und die Karte kann nicht wiedereröffnet werden. Die Aktion kann nicht rückgängig gemacht werden.", - "card-delete-suggest-archive": "Sie können eine Karte ins Archiv verschieben, um sie vom Board zu entfernen und die Aktivitäten zu behalten.", - "card-archive-pop": "Die Karte wird nach ihrer Archivierung nicht in dieser Liste sichtbar sein.", - "card-archive-suggest-cancel": "Sie können die Karte später aus dem Archiv wiederherstellen.", - "card-due": "Fällig", - "card-due-on": "Fällig am", - "card-spent": "Aufgewendete Zeit", - "card-edit-attachments": "Anhänge ändern", - "card-edit-custom-fields": "Benutzerdefinierte Felder editieren", - "card-edit-labels": "Labels ändern", - "card-edit-members": "Mitglieder ändern", - "card-labels-title": "Labels für diese Karten ändern.", - "card-members-title": "Der Karte Board-Mitglieder hinzufügen oder entfernen.", - "card-start": "Start", - "card-start-on": "Start am", - "cardAttachmentsPopup-title": "Anhängen von", - "cardCustomField-datePopup-title": "Datum ändern", - "cardCustomFieldsPopup-title": "Benutzerdefinierte Felder editieren", - "cardStartVotingPopup-title": "Abstimmung starten", - "positiveVoteMembersPopup-title": "Befürworter", - "negativeVoteMembersPopup-title": "Gegner", - "card-edit-voting": "Abstimmung editieren", - "editVoteEndDatePopup-title": "Enddatum der Abstimmung ändern", - "allowNonBoardMembers": "Alle eingeloggte Nutzer erlauben", - "vote-question": "Abstimmen über", - "vote-public": "Zeigen, wer was gewählt hat", - "vote-for-it": "Dafür", - "vote-against": "Dagegen", - "deleteVotePopup-title": "Wahl löschen?", - "vote-delete-pop": "Löschen ist unwiderruflich. Alle Aktionen die dieser Karte zugeordnet sind werden ebenfalls gelöscht.", - "cardStartPlanningPokerPopup-title": "Planungspoker starten", - "card-edit-planning-poker": "Planungspoker ändern", - "editPokerEndDatePopup-title": "Enddatum für Planungspoker-Stimme ändern", - "poker-question": "Planungspoker", - "poker-one": "1", - "poker-two": "2", - "poker-three": "3", - "poker-five": "5", - "poker-eight": "8", - "poker-thirteen": "13", - "poker-twenty": "20", - "poker-forty": "40", - "poker-oneHundred": "100", - "poker-unsure": "?", - "poker-finish": "Beenden", - "poker-result-votes": "Werte", - "poker-result-who": "Wer", - "poker-replay": "Wiederholen", - "set-estimation": "Schätzung vornehmen", - "deletePokerPopup-title": "Planungspoker löschen?", - "poker-delete-pop": "Die Löschung ist permanent. Sie werden alles im Zusammenhang mit diesem Planungspoker verlieren.", - "cardDeletePopup-title": "Karte löschen?", - "cardArchivePopup-title": "Karte archivieren?", - "cardDetailsActionsPopup-title": "Kartenaktionen", - "cardLabelsPopup-title": "Labels", - "cardMembersPopup-title": "Mitglieder", - "cardMorePopup-title": "Mehr", - "cardTemplatePopup-title": "Vorlage erstellen", - "cards": "Karten", - "cards-count": "Karten", - "cards-count-one": "Karte", - "casSignIn": "Mit CAS anmelden", - "cardType-card": "Karte", - "cardType-linkedCard": "Verknüpfte Karte", - "cardType-linkedBoard": "Verknüpftes Board", - "change": "Ändern", - "change-avatar": "Profilbild ändern", - "change-password": "Passwort ändern", - "change-permissions": "Berechtigungen ändern", - "change-settings": "Einstellungen ändern", - "changeAvatarPopup-title": "Profilbild ändern", - "changeLanguagePopup-title": "Sprache ändern", - "changePasswordPopup-title": "Passwort ändern", - "changePermissionsPopup-title": "Berechtigungen ändern", - "changeSettingsPopup-title": "Einstellungen ändern", - "subtasks": "Teilaufgaben", - "checklists": "Checklisten", - "click-to-star": "Klicken Sie, um das Board mit einem Stern zu markieren.", - "click-to-unstar": "Klicken Sie, um den Stern vom Board zu entfernen.", - "click-to-enable-auto-width": "Automatische Listenbreite ist deaktiviert. Klicke, um sie zu aktivieren.", - "click-to-disable-auto-width": "Automatische Listenbreite ist aktiviert. Klicke, um sie zu deaktivieren.", - "auto-list-width": "Automatische Listenbreite", - "clipboard": "Zwischenablage oder Drag & Drop", - "close": "Schließen", - "close-board": "Board schließen", - "close-board-pop": "Sie können das Board wiederherstellen, indem Sie die Schaltfläche \"Archiv\" in der Kopfzeile der Startseite anklicken.", - "close-card": "Karte schließen", - "color-black": "schwarz", - "color-blue": "blau", - "color-crimson": "Karminrot", - "color-darkgreen": "Dunkelgrün", - "color-gold": "Gold", - "color-gray": "Grau", - "color-green": "grün", - "color-indigo": "Indigo", - "color-lime": "hellgrün", - "color-magenta": "Magentarot", - "color-mistyrose": "Altrosa", - "color-navy": "Marineblau", - "color-orange": "orange", - "color-paleturquoise": "Blasses Türkis", - "color-peachpuff": "Pfirsich", - "color-pink": "pink", - "color-plum": "Pflaume", - "color-purple": "lila", - "color-red": "rot", - "color-saddlebrown": "Sattelbraun", - "color-silver": "Silber", - "color-sky": "himmelblau", - "color-slateblue": "Schieferblau", - "color-white": "Weiß", - "color-yellow": "gelb", - "unset-color": "Nicht festgelegt", - "comments": "Kommentare", - "comment": "Kommentar speichern", - "comment-placeholder": "Kommentar schreiben", - "comment-only": "Nur Kommentare", - "comment-only-desc": "Kann Karten nur kommentieren.", - "comment-delete": "Sind Sie sicher, dass Sie den Kommentar löschen wollen?", - "deleteCommentPopup-title": "Kommentar löschen?", - "no-comments": "Keine Kommentare", - "no-comments-desc": "Kann keine Kommentare und Aktivitäten sehen.", - "worker": "Arbeiter", - "worker-desc": "Kann Karten nur verschieben, sich selbst zuweisen und kommentieren.", - "computer": "Computer", - "confirm-subtask-delete-popup": "Wollen Sie die Teilaufgabe wirklich löschen?", - "confirm-checklist-delete-popup": "Wollen Sie diese Checkliste wirklich löschen?", - "subtaskDeletePopup-title": "Teilaufgabe löschen?", - "checklistDeletePopup-title": "Checkliste löschen?", - "copy-card-link-to-clipboard": "Kopiere Link zur Karte in die Zwischenablage", - "copy-text-to-clipboard": "Text in die Zwischenablage kopieren", - "linkCardPopup-title": "Karte verknüpfen", - "searchElementPopup-title": "Suche", - "copyCardPopup-title": "Karte kopieren", - "copyManyCardsPopup-title": "Kopiere die Vorlage zu mehreren Karten", - "copyManyCardsPopup-instructions": "Titel und Beschreibungen der Zielkarten im folgenden JSON-Format", - "copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]", - "create": "Erstellen", - "createBoardPopup-title": "Board erstellen", - "chooseBoardSourcePopup-title": "Board importieren", - "createLabelPopup-title": "Label erstellen", - "createCustomField": "Feld erstellen", - "createCustomFieldPopup-title": "Feld erstellen", - "current": "aktuell", - "custom-field-delete-pop": "Dies wird das Feld aus allen Karten entfernen und den dazugehörigen Verlauf löschen. Die Aktion kann nicht rückgängig gemacht werden.", - "custom-field-checkbox": "Kontrollkästchen", - "custom-field-currency": "Währung", - "custom-field-currency-option": "Währungszeichen", - "custom-field-date": "Datum", - "custom-field-dropdown": "Dropdownliste", - "custom-field-dropdown-none": "(keiner)", - "custom-field-dropdown-options": "Listenoptionen", - "custom-field-dropdown-options-placeholder": "Drücken Sie die Eingabetaste, um weitere Optionen hinzuzufügen", - "custom-field-dropdown-unknown": "(unbekannt)", - "custom-field-number": "Zahl", - "custom-field-text": "Text", - "custom-fields": "Benutzerdefinierte Felder", - "date": "Datum", - "decline": "Ablehnen", - "default-avatar": "Standard Profilbild", - "delete": "Löschen", - "deleteCustomFieldPopup-title": "Benutzerdefiniertes Feld löschen?", - "deleteLabelPopup-title": "Label löschen?", - "description": "Beschreibung", - "disambiguateMultiLabelPopup-title": "Labels vereinheitlichen", - "disambiguateMultiMemberPopup-title": "Mitglieder vereinheitlichen", - "discard": "Verwerfen", - "done": "Erledigt", - "download": "Herunterladen", - "edit": "Bearbeiten", - "edit-avatar": "Profilbild ändern", - "edit-profile": "Profil ändern", - "edit-wip-limit": "WIP-Limit bearbeiten", - "soft-wip-limit": "Soft WIP-Limit", - "editCardStartDatePopup-title": "Startdatum ändern", - "editCardDueDatePopup-title": "Fälligkeitsdatum ändern", - "editCustomFieldPopup-title": "Feld bearbeiten", - "addReactionPopup-title": "Reaktion hinzufügen", - "editCardSpentTimePopup-title": "Aufgewendete Zeit ändern", - "editLabelPopup-title": "Label ändern", - "editNotificationPopup-title": "Benachrichtigung ändern", - "editProfilePopup-title": "Profil ändern", - "email": "E-Mail", - "email-enrollAccount-subject": "Ihr Benutzerkonto auf __siteName__ wurde erstellt", - "email-enrollAccount-text": "Hallo __user__,\n\num den Dienst nutzen zu können, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.", - "email-fail": "Senden der E-Mail fehlgeschlagen", - "email-fail-text": "Fehler beim Senden der E-Mail", - "email-invalid": "Ungültige E-Mail-Adresse", - "email-invite": "per E-Mail einladen", - "email-invite-subject": "__inviter__ hat Ihnen eine Einladung geschickt", - "email-invite-text": "Hallo __user__,\n\n__inviter__ hat Sie zu dem Board \"__board__\" eingeladen.\n\nBitte klicken Sie auf folgenden Link:\n\n__url__\n\nDanke.", - "email-resetPassword-subject": "Setzten Sie ihr Passwort auf __siteName__ zurück", - "email-resetPassword-text": "Hallo __user__,\n\num ihr Passwort zurückzusetzen, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.", - "email-sent": "E-Mail gesendet", - "email-verifyEmail-subject": "Bestätigen Sie ihre E-Mail-Adresse auf __siteName__", - "email-verifyEmail-text": "Hallo __user__,\n\num ihre E-Mail-Adresse zu bestätigen, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.", - "enable-vertical-scrollbars": "Vertikale Bildlaufleisten aktivieren", - "enable-wip-limit": "WIP-Limit einschalten", - "error-board-doesNotExist": "Dieses Board existiert nicht", - "error-board-notAdmin": "Um das zu tun, müssen Sie Administrator dieses Boards sein", - "error-board-notAMember": "Um das zu tun, müssen Sie Mitglied dieses Boards sein", - "error-json-malformed": "Ihre Eingabe ist kein gültiges JSON", - "error-json-schema": "Ihre JSON-Daten enthalten nicht die gewünschten Informationen im richtigen Format", - "error-csv-schema": "Deine CSV(Kommatgetrennte Werte)/TSV (Tab getrennte Werte) enthält keine korrekten Informationen im geforderten Format ", - "error-list-doesNotExist": "Diese Liste existiert nicht", - "error-user-doesNotExist": "Dieser Nutzer existiert nicht", - "error-user-notAllowSelf": "Sie können sich nicht selbst einladen.", - "error-user-notCreated": "Dieser Nutzer ist nicht angelegt", - "error-username-taken": "Dieser Benutzername ist bereits vergeben", - "error-orgname-taken": "Dieser Organisationsname ist schon vergeben", - "error-teamname-taken": "Dieser Teamname ist schon vergeben", - "error-email-taken": "E-Mail wird schon verwendet", - "export-board": "Board exportieren", - "export-board-json": "Board als JSON exportieren", - "export-board-csv": "Board als CSV exportieren", - "export-board-tsv": "Board als TSV exportieren", - "export-board-excel": "Board nach Excel exportieren", - "user-can-not-export-excel": "Benutzer kann nicht nach Excel exportieren", - "export-board-html": "Board als HTML exportieren", - "export-card": "Karte exportieren", - "export-card-pdf": "Karte in ein PDF exportieren", - "user-can-not-export-card-to-pdf": "Benutzer kann Karte nicht in ein PDF exportieren", - "exportBoardPopup-title": "Board exportieren", - "exportCardPopup-title": "Karte exportieren", - "sort": "Sortieren", - "sorted": "Sortiert", - "remove-sort": "Sortierung entfernen", - "sort-desc": "Zum Sortieren der Liste klicken", - "list-sort-by": "Sortieren der Liste nach:", - "list-label-modifiedAt": "Letzte Zugriffszeit", - "list-label-title": "Name der Liste", - "list-label-sort": "Ihre manuelle Sortierung", - "list-label-short-modifiedAt": "(Z)", - "list-label-short-title": "(N)", - "list-label-short-sort": "(M)", - "filter": "Filter", - "filter-cards": "Karten oder Listen filtern", - "filter-dates-label": "Nach Datum filtern", - "filter-no-due-date": "Kein Fälligkeitsdatum", - "filter-overdue": "Überfällig", - "filter-due-today": "Heute fällig", - "filter-due-this-week": "Diese Woche fällig", - "filter-due-next-week": "Diese Woche fällig", - "filter-due-tomorrow": "Morgen fällig", - "list-filter-label": "Liste nach Titel filtern", - "filter-clear": "Filter entfernen", - "filter-labels-label": "Nach Label filtern", - "filter-no-label": "Kein Label", - "filter-member-label": "Nach Nutzer filtern", - "filter-no-member": "Kein Mitglied", - "filter-assignee-label": "Nach Zuordnung filtern", - "filter-no-assignee": "Nicht zugewiesen", - "filter-custom-fields-label": "Filtern nach benutzerdefinierten Feldern", - "filter-no-custom-fields": "Keine benutzerdefinierten Felder", - "filter-show-archive": "Archivierte Listen anzeigen", - "filter-hide-empty": "Leere Listen verstecken", - "filter-on": "Filter ist aktiv", - "filter-on-desc": "Sie filtern die Karten in diesem Board. Klicken Sie, um den Filter zu bearbeiten.", - "filter-to-selection": "Ergebnisse auswählen", - "other-filters-label": "Andere Filter", - "advanced-filter-label": "Erweiterter Filter", - "advanced-filter-description": "Der erweiterte Filter erlaubt die Eingabe von Zeichenfolgen, die folgende Operatoren enthalten: == != <= >= && || ( ). Ein Leerzeichen wird als Trennzeichen zwischen den Operatoren verwendet. Sie können nach allen benutzerdefinierten Feldern filtern, indem Sie deren Namen und Werte eingeben. Zum Beispiel: Feld1 == Wert1. Hinweis: Wenn Felder oder Werte Leerzeichen enthalten, müssen Sie sie in einfache Anführungszeichen setzen. Zum Beispiel: 'Feld 1' == 'Wert 1'. Um einzelne Steuerzeichen (' \\\\/) zu überspringen, können Sie \\\\ verwenden. Zum Beispiel: Feld1 == Ich bin\\\\'s. Sie können außerdem mehrere Bedingungen kombinieren. Zum Beispiel: F1 == W1 || F1 == W2. Normalerweise werden alle Operatoren von links nach rechts interpretiert. Sie können die Reihenfolge ändern, indem Sie Klammern setzen. Zum Beispiel: F1 == W1 && ( F2 == W2 || F2 == W3 ). Sie können Textfelder auch mithilfe regulärer Ausdrücke durchsuchen: F1 == /Tes.*/i", - "fullname": "Vollständiger Name", - "header-logo-title": "Zurück zur Board Seite.", - "show-activities": "Aktivitäten anzeigen", - "headerBarCreateBoardPopup-title": "Board erstellen", - "home": "Home", - "import": "Importieren", - "impersonate-user": "als Benutzer ausgeben", - "link": "Verknüpfung", - "import-board": "Board importieren", - "import-board-c": "Board importieren", - "import-board-title-trello": "Board von Trello importieren", - "import-board-title-wekan": "Board aus vorherigem Export importieren", - "import-board-title-csv": "Board von CSV/TSV importieren", - "from-trello": "Von Trello", - "from-wekan": "Aus vorherigem Export", - "from-csv": "Aus CSV/TSV", - "import-board-instruction-trello": "Gehen Sie in ihrem Trello-Board auf 'Menü', dann 'Mehr', 'Drucken und Exportieren', 'JSON-Export' und kopieren Sie den dort angezeigten Text", - "import-board-instruction-csv": "Fügen Sie die Ihre Comma-Separated- (CSV) / bzw. Tab-Separated-Values (TSV) ein.", - "import-board-instruction-wekan": "Gehen Sie in Ihrem Board auf 'Menü', danach auf 'Board exportieren' und kopieren Sie den Text aus der heruntergeladenen Datei.", - "import-board-instruction-about-errors": "Treten beim importieren eines Board Fehler auf, so kann der Import dennoch erfolgreich abgeschlossen sein und das Board ist auf der Seite \"Alle Boards\" zusehen.", - "import-json-placeholder": "Fügen Sie die korrekten JSON-Daten hier ein", - "import-csv-placeholder": "Fügen Sie die korrekten CSV/TSV-Daten hier ein", - "import-map-members": "Mitglieder zuordnen", - "import-members-map": "Das importierte Board hat einige Mitglieder. Bitte ordnen sie die Mitglieder, die Sie importieren wollen, Ihren Benutzern zu.", - "import-members-map-note": "Anmerkung: Nicht zugeordnete Mitglieder werden dem aktuellen Benutzer zugeordnet.", - "import-show-user-mapping": "Mitgliederzuordnung überprüfen", - "import-user-select": "Wählen Sie den bestehenden Benutzer aus, den Sie für dieses Mitglied verwenden wollen.", - "importMapMembersAddPopup-title": "Mitglied auswählen", - "info": "Version", - "initials": "Initialen", - "invalid-date": "Ungültiges Datum", - "invalid-time": "Ungültige Zeitangabe", - "invalid-user": "Ungültiger Benutzer", - "joined": "beigetreten", - "just-invited": "Sie wurden soeben zu diesem Board eingeladen", - "keyboard-shortcuts": "Tastaturkürzel", - "label-create": "Label erstellen", - "label-default": "%s Label (Standard)", - "label-delete-pop": "Aktion kann nicht rückgängig gemacht werden. Das Label wird von allen Karten entfernt und seine Historie gelöscht.", - "labels": "Labels", - "language": "Sprache", - "last-admin-desc": "Sie können keine Rollen ändern, weil es mindestens einen Administrator geben muss.", - "leave-board": "Board verlassen", - "leave-board-pop": "Sind Sie sicher, dass Sie __boardTitle__ verlassen möchten? Sie werden von allen Karten in diesem Board entfernt.", - "leaveBoardPopup-title": "Board verlassen?", - "link-card": "Link zu dieser Karte", - "list-archive-cards": "Alle Karten dieser Liste ins Archiv verschieben", - "list-archive-cards-pop": "Alle Karten dieser Liste werden vom Board entfernt. Um Karten im Papierkorb anzuzeigen und wiederherzustellen, klicken Sie auf \"Menü\" > \"Archiv\".", - "list-move-cards": "Alle Karten in dieser Liste verschieben", - "list-select-cards": "Alle Karten in dieser Liste auswählen", - "set-color-list": "Lege Farbe fest", - "listActionPopup-title": "Listenaktionen", - "settingsUserPopup-title": "Benutzereinstellungen", - "settingsTeamPopup-title": "Team-Einstellungen", - "settingsOrgPopup-title": "Organisations-Einstellungen", - "swimlaneActionPopup-title": "Swimlaneaktionen", - "swimlaneAddPopup-title": "Swimlane unterhalb einfügen", - "listImportCardPopup-title": "Eine Trello-Karte importieren", - "listImportCardsTsvPopup-title": "CSV/TSV importieren", - "listMorePopup-title": "Mehr", - "link-list": "Link zu dieser Liste", - "list-delete-pop": "Alle Aktionen werden aus dem Verlauf gelöscht und die Liste kann nicht wiederhergestellt werden.", - "list-delete-suggest-archive": "Listen können ins Archiv verschoben werden, um sie aus dem Board zu entfernen und die Aktivitäten zu behalten.", - "lists": "Listen", - "swimlanes": "Swimlanes", - "log-out": "Ausloggen", - "log-in": "Einloggen", - "loginPopup-title": "Einloggen", - "memberMenuPopup-title": "Nutzereinstellungen", - "members": "Mitglieder", - "menu": "Menü", - "move-selection": "Auswahl verschieben", - "moveCardPopup-title": "Karte verschieben", - "moveCardToBottom-title": "Ans Ende verschieben", - "moveCardToTop-title": "Zum Anfang verschieben", - "moveSelectionPopup-title": "Auswahl verschieben", - "multi-selection": "Mehrfachauswahl", - "multi-selection-label": "Label für die Auswahl setzen", - "multi-selection-member": "Mitglied für die Auswahl setzen", - "multi-selection-on": "Mehrfachauswahl ist aktiv", - "muted": "Stumm", - "muted-info": "Sie werden nicht über Änderungen auf diesem Board benachrichtigt", - "my-boards": "Meine Boards", - "name": "Name", - "no-archived-cards": "Keine Karten im Archiv.", - "no-archived-lists": "Keine Listen im Archiv.", - "no-archived-swimlanes": "Keine Swimlanes im Archiv.", - "no-results": "Keine Ergebnisse", - "normal": "Normal", - "normal-desc": "Kann Karten anzeigen und bearbeiten, aber keine Einstellungen ändern.", - "not-accepted-yet": "Die Einladung wurde noch nicht angenommen", - "notify-participate": "Benachrichtigungen zu allen Karten erhalten, bei denen Sie Ersteller oder Mitglied sind", - "notify-watch": "Benachrichtigungen über alle Boards, Listen oder Karten erhalten, die Sie beobachten", - "optional": "optional", - "or": "oder", - "page-maybe-private": "Diese Seite könnte privat sein. Vielleicht können Sie sie sehen, wenn Sie sich einloggen.", - "page-not-found": "Seite nicht gefunden.", - "password": "Passwort", - "paste-or-dragdrop": "Einfügen oder Datei mit Drag & Drop ablegen (nur Bilder)", - "participating": "Teilnehmen", - "preview": "Vorschau", - "previewAttachedImagePopup-title": "Vorschau", - "previewClipboardImagePopup-title": "Vorschau", - "private": "Privat", - "private-desc": "Dieses Board ist privat. Nur Nutzer, die zu dem Board gehören, können es anschauen und bearbeiten.", - "profile": "Profil", - "public": "Öffentlich", - "public-desc": "Dieses Board ist öffentlich. Es ist für jeden, der den Link kennt, sichtbar und taucht in Suchmaschinen wie Google auf. Nur Nutzer, die zum Board hinzugefügt wurden, können es bearbeiten.", - "quick-access-description": "Markieren Sie ein Board mit einem Stern, um dieser Leiste eine Verknüpfung hinzuzufügen.", - "remove-cover": "Entferne Cover Bild von Minikarte", - "remove-from-board": "Von Board entfernen", - "remove-label": "Label entfernen", - "listDeletePopup-title": "Liste löschen?", - "remove-member": "Nutzer entfernen", - "remove-member-from-card": "Von Karte entfernen", - "remove-member-pop": "__name__ (__username__) von __boardTitle__ entfernen? Das Mitglied wird von allen Karten auf diesem Board entfernt. Es erhält eine Benachrichtigung.", - "removeMemberPopup-title": "Mitglied entfernen?", - "rename": "Umbenennen", - "rename-board": "Board umbenennen", - "restore": "Wiederherstellen", - "rescue-card-description": "Zeige eine Sicherheitsmeldung, bevor die Kartenbeschreibung ungespeichert geschlossen wird.", - "rescue-card-description-dialogue": "Soll die aktuelle Kartenbeschreibung mit deinen Änderungen überschrieben werden?", - "save": "Speichern", - "search": "Suche", - "rules": "Regeln", - "search-cards": "Suche nach Karten-/Listentiteln, Beschreibungen und personalisierten Feldern auf diesem Board", - "search-example": "Suchtext eingeben und Enter drücken", - "select-color": "Farbe auswählen", - "select-board": "Board auswählen", - "set-wip-limit-value": "Setzen Sie ein Limit für die maximale Anzahl von Aufgaben in dieser Liste", - "setWipLimitPopup-title": "WIP-Limit setzen", - "shortcut-add-self": "Füge dich selbst zur Karte hinzu", - "shortcut-assign-self": "Fügen Sie sich zur aktuellen Karte hinzu", - "shortcut-autocomplete-emoji": "Emojis vervollständigen", - "shortcut-autocomplete-members": "Mitglieder vervollständigen", - "shortcut-clear-filters": "Alle Filter entfernen", - "shortcut-close-dialog": "Dialog schließen", - "shortcut-filter-my-cards": "Meine Karten filtern", - "shortcut-filter-my-assigned-cards": "Meine zugewiesenen Karten filtern", - "shortcut-show-shortcuts": "Liste der Tastaturkürzel anzeigen", - "shortcut-toggle-filterbar": "Filter-Seitenleiste ein-/ausblenden", - "shortcut-toggle-searchbar": "Such-Seitenleiste ein-/ausblenden", - "shortcut-toggle-sidebar": "Seitenleiste ein-/ausblenden", - "show-cards-minimum-count": "Zeigt die Kartenanzahl an, wenn die Liste mehr enthält als", - "sidebar-open": "Seitenleiste öffnen", - "sidebar-close": "Seitenleiste schließen", - "signupPopup-title": "Benutzerkonto erstellen", - "star-board-title": "Klicken Sie, um das Board mit einem Stern zu markieren. Es erscheint dann oben in ihrer Boardliste.", - "starred-boards": "Markierte Boards", - "starred-boards-description": "Markierte Boards erscheinen oben in ihrer Boardliste.", - "subscribe": "Abonnieren", - "team": "Team", - "this-board": "diesem Board", - "this-card": "diese Karte", - "spent-time-hours": "Aufgewendete Zeit (Stunden)", - "overtime-hours": "Mehrarbeit (Stunden)", - "overtime": "Mehrarbeit", - "has-overtime-cards": "Hat Karten mit Mehrarbeit", - "has-spenttime-cards": "Hat Karten mit aufgewendeten Zeiten", - "time": "Zeit", - "title": "Titel", - "toggle-assignees": "Schalte Zugewiesene 1-9 für die Karte um (in der Reihenfolge der Hinzufügung zum Board).", - "toggle-labels": "Label 1-9 zur Karte hinzufügen. Bei Mehrfachauswahl Label 1-9 hinzufügen", - "remove-labels-multiselect": "Labels 1-9 bei Karten-Mehrfachauswahl entfernen", - "tracking": "Folgen", - "tracking-info": "Sie werden über alle Änderungen an Karten benachrichtigt, an denen Sie als Ersteller oder Mitglied beteiligt sind.", - "type": "Typ", - "unassign-member": "Mitglied entfernen", - "unsaved-description": "Sie haben eine nicht gespeicherte Änderung.", - "unwatch": "Beobachtung entfernen", - "upload": "Upload", - "upload-avatar": "Profilbild hochladen", - "uploaded-avatar": "Profilbild hochgeladen", - "custom-top-left-corner-logo-image-url": "Benutzerdefiniertes Logo oben links Bild URL", - "custom-top-left-corner-logo-link-url": "Benutzerdefiniertes Logo oben links Link URL", - "custom-top-left-corner-logo-height": "Benutzerdefiniertes Logo oben links Höhe. Voreinstellung: 27", - "custom-login-logo-image-url": "Benutzerdefiniertes Login Logo Bild URL", - "custom-login-logo-link-url": "Benutzerdefiniertes Login Logo Link URL", - "custom-help-link-url": "Benutzerdefinierter URL-Link zur Hilfe", - "text-below-custom-login-logo": "Text unterhalb benutzerdefiniertem Login Logo", - "automatic-linked-url-schemes": "Spezielle URL-Schemas, die durch Klick automatisch öffenbar sein sollen. Ein URL-Schema pro Zeile", - "username": "Benutzername", - "import-usernames": "Nutzernamen importieren", - "view-it": "Ansehen", - "warn-list-archived": "Warnung: Diese Karte befindet sich in einer Liste im Archiv", - "watch": "Beobachten", - "watching": "Beobachten", - "watching-info": "Sie werden über alle Änderungen in diesem Board benachrichtigt", - "welcome-board": "Willkommen-Board", - "welcome-swimlane": "Meilenstein 1", - "welcome-list1": "Grundlagen", - "welcome-list2": "Fortgeschritten", - "card-templates-swimlane": "Kartenvorlagen", - "list-templates-swimlane": "Listenvorlagen", - "board-templates-swimlane": "Boardvorlagen", - "what-to-do": "Was wollen Sie tun?", - "wipLimitErrorPopup-title": "Ungültiges WIP-Limit", - "wipLimitErrorPopup-dialog-pt1": "Die Anzahl von Aufgaben in dieser Liste ist größer als das von Ihnen definierte WIP-Limit.", - "wipLimitErrorPopup-dialog-pt2": "Bitte verschieben Sie einige Aufgaben aus dieser Liste oder setzen Sie ein grösseres WIP-Limit.", - "admin-panel": "Administration", - "settings": "Einstellungen", - "people": "Nutzer", - "registration": "Registrierung", - "disable-self-registration": "Selbstregistrierung deaktivierenSelbstregistrierung deaktivieren", - "disable-forgot-password": "\"Passwort vergessen\" deaktivieren", - "invite": "Einladen", - "invite-people": "Nutzer einladen", - "to-boards": "In Board(s)", - "email-addresses": "E-Mail Adressen", - "smtp-host-description": "Die Adresse Ihres SMTP-Servers für ausgehende E-Mails.", - "smtp-port-description": "Der Port Ihres SMTP-Servers für ausgehende E-Mails.", - "smtp-tls-description": "Aktiviere TLS Unterstützung für SMTP Server", - "smtp-host": "SMTP-Server", - "smtp-port": "SMTP-Port", - "smtp-username": "Benutzername", - "smtp-password": "Passwort", - "smtp-tls": "TLS Unterstützung", - "send-from": "Absender", - "send-smtp-test": "Test-E-Mail an sich selbst schicken", - "invitation-code": "Einladungscode", - "email-invite-register-subject": "__inviter__ hat Ihnen eine Einladung geschickt", - "email-invite-register-text": "Sehr geehrte(r) __user__,\n\n__inviter__ hat Sie zur Mitarbeit an einem Kanbanboard eingeladen.\n\nBitte klicken Sie auf folgenden Link:\n__url__\n\nIhr Einladungscode lautet: __icode__\n\nDanke.", - "email-smtp-test-subject": "SMTP Test-E-Mail", - "email-smtp-test-text": "Sie haben erfolgreich eine E-Mail versandt", - "error-invitation-code-not-exist": "Ungültiger Einladungscode", - "error-notAuthorized": "Sie sind nicht berechtigt diese Seite zu sehen.", - "webhook-title": "Webhook Name", - "webhook-token": "Token (Optional für Authentifizierung)", - "outgoing-webhooks": "Ausgehende Webhooks", - "bidirectional-webhooks": "Zwei-Wege Webhooks", - "outgoingWebhooksPopup-title": "Ausgehende Webhooks", - "boardCardTitlePopup-title": "Kartentitelfilter", - "disable-webhook": "Diesen Webhook deaktivieren", - "global-webhook": "Globale Webhooks", - "new-outgoing-webhook": "Neuer ausgehender Webhook", - "no-name": "(Unbekannt)", - "Node_version": "Node-Version", - "Meteor_version": "Meteor-Version", - "MongoDB_version": "MongoDB-Version", - "MongoDB_storage_engine": "MongoDB-Speicher-Engine", - "MongoDB_Oplog_enabled": "MongoDB-Oplog aktiviert", - "OS_Arch": "Betriebssystem-Architektur", - "OS_Cpus": "Anzahl Prozessoren", - "OS_Freemem": "Freier Arbeitsspeicher", - "OS_Loadavg": "Mittlere Systembelastung", - "OS_Platform": "Plattform", - "OS_Release": "Version des Betriebssystem", - "OS_Totalmem": "Gesamter Arbeitsspeicher", - "OS_Type": "Typ des Betriebssystems", - "OS_Uptime": "Laufzeit des Systems", - "days": "Tage", - "hours": "Stunden", - "minutes": "Minuten", - "seconds": "Sekunden", - "show-field-on-card": "Zeige dieses Feld auf der Karte", - "automatically-field-on-card": "Füge Feld neuen Karten hinzu", - "always-field-on-card": "Füge Feld allen Karten hinzu", - "showLabel-field-on-card": " Label Feld auf Minikarte anzeigen", - "showSum-field-on-list": "Zeige Summe der Felder oben in der Liste", - "yes": "Ja", - "no": "Nein", - "accounts": "Konten", - "accounts-allowEmailChange": "Ändern der E-Mailadresse erlauben", - "accounts-allowUserNameChange": "Ändern des Benutzernamens erlauben", - "tableVisibilityMode-allowPrivateOnly": "Board-Sichtbarkeit: Erlaube ausschließlich private Boards", - "tableVisibilityMode" : "Sichtbarkeit der Boards", - "createdAt": "Erstellt am", - "modifiedAt": "Geändert am", - "verified": "Geprüft", - "active": "Aktiv", - "card-received": "Empfangen", - "card-received-on": "Empfangen am", - "card-end": "Ende", - "card-end-on": "Endet am", - "editCardReceivedDatePopup-title": "Empfangsdatum ändern", - "editCardEndDatePopup-title": "Enddatum ändern", - "setCardColorPopup-title": "Farbe festlegen", - "setCardActionsColorPopup-title": "Farbe wählen", - "setSwimlaneColorPopup-title": "Farbe wählen", - "setListColorPopup-title": "Farbe wählen", - "assigned-by": "Zugewiesen von", - "requested-by": "Angefordert von", - "card-sorting-by-number": "Kartensortierung nach Nummer", - "board-delete-notice": "Löschen kann nicht rückgängig gemacht werden. Sie werden alle Listen, Karten und Aktionen, die mit diesem Board verbunden sind, verlieren.", - "delete-board-confirm-popup": "Alle Listen, Karten, Labels und Akivitäten werden gelöscht und Sie können die Inhalte des Boards nicht wiederherstellen! Die Aktion kann nicht rückgängig gemacht werden.", - "boardDeletePopup-title": "Board löschen?", - "delete-board": "Board löschen", - "default-subtasks-board": "Teilaufgabe für __board__ Board", - "default": "Standard", - "defaultdefault": "Standard", - "queue": "Warteschlange", - "subtask-settings": "Einstellungen für Teilaufgaben", - "card-settings": "Karten-Einstellungen", - "minicard-settings": "Minikarte-Einstellungen", - "boardSubtaskSettingsPopup-title": "Boardeinstellungen für Teilaufgaben", - "boardCardSettingsPopup-title": "Karten-Einstellungen", - "boardMinicardSettingsPopup-title": "Minikarte-Einstellungen", - "deposit-subtasks-board": "Teilaufgaben in diesem Board ablegen:", - "deposit-subtasks-list": "Zielliste für hier abgelegte Teilaufgaben:", - "show-parent-in-minicard": "Übergeordnetes Element auf Minikarte anzeigen:", - "description-on-minicard": "Beschreibung auf Minikarte", - "cover-attachment-on-minicard": "Cover Bild auf Minikarte", - "badge-attachment-on-minicard": "Anzahl der Anhänge auf Minikarte", - "card-sorting-by-number-on-minicard": "Kartensortierung nach Nummer auf Minikarte", - "prefix-with-full-path": "Vollständiger Pfad über Titel", - "prefix-with-parent": "Über Titel", - "subtext-with-full-path": "Vollständiger Pfad unter Titel", - "subtext-with-parent": "Unter Titel", - "change-card-parent": "Übergeordnete Karte ändern", - "parent-card": "Übergeordnete Karte", - "source-board": "Quellboard", - "no-parent": "Nicht anzeigen", - "activity-added-label": "fügte Label '%s' zu %s hinzu", - "activity-removed-label": "entfernte Label '%s' von %s", - "activity-delete-attach": "löschte ein Anhang von %s", - "activity-added-label-card": "Label hinzugefügt '%s'", - "activity-removed-label-card": "Label entfernt '%s'", - "activity-delete-attach-card": "hat einen Anhang gelöscht", - "activity-set-customfield": "setze benutzerdefiniertes Feld '%s' zu '%s' in %s", - "activity-unset-customfield": "entferne benutzerdefiniertes Feld '%s' in %s", - "r-rule": "Regel", - "r-add-trigger": "Auslöser hinzufügen", - "r-add-action": "Aktion hinzufügen", - "r-board-rules": "Board-Regeln", - "r-add-rule": "Regel hinzufügen", - "r-view-rule": "Regel anzeigen", - "r-delete-rule": "Regel löschen", - "r-new-rule-name": "Neuer Regeltitel", - "r-no-rules": "Keine Regeln", - "r-trigger": "Auslöser", - "r-action": "Aktion", - "r-when-a-card": "Wenn Karte", - "r-is": "wird", - "r-is-moved": "wird verschoben", - "r-added-to": "Hinzugefügt zu", - "r-removed-from": "entfernt von", - "r-the-board": "das Board", - "r-list": "Liste", - "set-filter": "Setze Filter", - "r-moved-to": "verschoben nach", - "r-moved-from": "verschoben von", - "r-archived": "ins Archiv verschoben", - "r-unarchived": "aus dem Archiv wiederhergestellt", - "r-a-card": "einer Karte", - "r-when-a-label-is": "Wenn ein Label", - "r-when-the-label": "Wenn das Label", - "r-list-name": "Listenname", - "r-when-a-member": "Wenn ein Mitglied", - "r-when-the-member": "Wenn das Mitglied", - "r-name": "Name", - "r-when-a-attach": "Wenn ein Anhang", - "r-when-a-checklist": "Wenn eine Checkliste wird", - "r-when-the-checklist": "Wenn die Checkliste", - "r-completed": "abgeschlossen", - "r-made-incomplete": "unvollständig gemacht", - "r-when-a-item": "Wenn eine Checklistenposition", - "r-when-the-item": "Wenn der Checklisten Eintrag", - "r-checked": "markiert wird", - "r-unchecked": "abgewählt wird", - "r-move-card-to": "Verschiebe Karte an", - "r-top-of": "Anfang von", - "r-bottom-of": "Ende von", - "r-its-list": "seiner Liste", - "r-archive": "Ins Archiv verschieben", - "r-unarchive": "Aus dem Archiv wiederherstellen", - "r-card": "Karte", - "r-add": "Hinzufügen", - "r-remove": "entfernen", - "r-label": "Label", - "r-member": "Mitglied", - "r-remove-all": "Entferne alle Mitglieder von der Karte", - "r-set-color": "Farbe festlegen auf", - "r-checklist": "Checkliste", - "r-check-all": "Alle markieren", - "r-uncheck-all": "Alle abwählen", - "r-items-check": "Elemente der Checkliste", - "r-check": "Markieren", - "r-uncheck": "Abwählen", - "r-item": "Element", - "r-of-checklist": "der Checkliste", - "r-send-email": "Eine E-Mail senden", - "r-to": "an", - "r-of": "von", - "r-subject": "Betreff", - "r-rule-details": "Regeldetails", - "r-d-move-to-top-gen": "Karte nach oben in die Liste verschieben", - "r-d-move-to-top-spec": "Karte an den Anfang der Liste verschieben", - "r-d-move-to-bottom-gen": "Karte nach unten in die Liste verschieben", - "r-d-move-to-bottom-spec": "Karte an das Ende der Liste verschieben", - "r-d-send-email": "E-Mail senden", - "r-d-send-email-to": "an", - "r-d-send-email-subject": "Betreff", - "r-d-send-email-message": "Nachricht", - "r-d-archive": "Karte ins Archiv verschieben", - "r-d-unarchive": "Karte aus dem Archiv wiederherstellen", - "r-d-add-label": "Label hinzufügen", - "r-d-remove-label": "Label entfernen", - "r-create-card": "Neue Karte erstellen", - "r-in-list": "in der Liste", - "r-in-swimlane": "in Swimlane", - "r-d-add-member": "Mitglied hinzufügen", - "r-d-remove-member": "Mitglied entfernen", - "r-d-remove-all-member": "Entferne alle Mitglieder", - "r-d-check-all": "Alle Elemente der Liste markieren", - "r-d-uncheck-all": "Alle Element der Liste abwählen", - "r-d-check-one": "Element auswählen", - "r-d-uncheck-one": "Element abwählen", - "r-d-check-of-list": "der Checkliste", - "r-d-add-checklist": "Checkliste hinzufügen", - "r-d-remove-checklist": "Checkliste entfernen", - "r-by": "durch", - "r-add-checklist": "Checkliste hinzufügen", - "r-with-items": "mit Elementen", - "r-items-list": "Element1,Element2,Element3", - "r-add-swimlane": "Füge Swimlane hinzu", - "r-swimlane-name": "Swimlanename", - "r-board-note": "Hinweis: Lass ein Feld leer, um alle möglichen Werte zu finden.", - "r-checklist-note": "Hinweis: Die Elemente der Checkliste müssen als kommagetrennte Werte geschrieben werden.", - "r-when-a-card-is-moved": "Wenn eine Karte in eine andere Liste verschoben wird", - "r-set": "Setze", - "r-update": "Aktualisiere", - "r-datefield": "Datumsfeld", - "r-df-start-at": "Start", - "r-df-due-at": "Fällig", - "r-df-end-at": "Ende", - "r-df-received-at": "Empfangen", - "r-to-current-datetime": "auf das aktuelle Datum/Zeit", - "r-remove-value-from": "Entferne Wert von", - "r-link-card": "Verlinke Karte auf", - "ldap": "LDAP", - "oauth2": "OAuth2", - "cas": "CAS", - "authentication-method": "Authentifizierungsmethode", - "authentication-type": "Authentifizierungstyp", - "custom-product-name": "Benutzerdefinierter Produktname", - "layout": "Layout", - "hide-logo": "Verstecke Logo", - "hide-card-counter-list": "Verberge die Kartenzähler-Liste auf allen Boards", - "hide-board-member-list": "Verberge die Board-Mitgliederliste auf allen Boards", - "add-custom-html-after-body-start": "Füge benutzerdefiniertes HTML nach Anfang hinzu", - "add-custom-html-before-body-end": "Füge benutzerdefiniertes HTML vor Ende hinzu", - "error-undefined": "Etwas ist schief gelaufen", - "error-ldap-login": "Es ist ein Fehler beim Anmelden aufgetreten", - "display-authentication-method": "Anzeige Authentifizierungsverfahren", - "oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche", - "default-authentication-method": "Standardauthentifizierungsverfahren", - "duplicate-board": "Board duplizieren", - "org-number": "Die Anzahl der Organisationen ist:", - "team-number": "Die Anzahl der Teams ist:", - "people-number": "Die Anzahl der Personen ist:", - "swimlaneDeletePopup-title": "Swimlane löschen?", - "swimlane-delete-pop": "Alle Aktionen werden aus dem Aktivitätenfeed entfernt und die Swimlane kann nicht wiederhergestellt werden. Die Aktion kann nicht rückgängig gemacht werden.", - "restore-all": "Alles wiederherstellen", - "delete-all": "Alles löschen", - "loading": "Laden, bitte warten.", - "previous_as": "letzter Zeitpunkt war", - "act-a-dueAt": "hat Fälligkeit geändert auf\nWann: __timeValue__\nWo: __card__\nvorheriger Fälligkeitszeitpunkt war __timeOldValue__", - "act-a-endAt": "hat Ende auf __timeValue__ von (__timeOldValue__) geändert", - "act-a-startAt": "hat Start auf __timeValue__ von (__timeOldValue__) geändert", - "act-a-receivedAt": "hat Empfangszeit auf __timeValue__ von (__timeOldValue__) geändert", - "a-dueAt": "hat Fälligkeit geändert auf", - "a-endAt": "hat Ende geändert auf", - "a-startAt": "hat Startzeit geändert auf", - "a-receivedAt": "hat Empfangszeit geändert auf", - "almostdue": "aktuelles Fälligkeitsdatum %s bevorstehend", - "pastdue": "aktuelles Fälligkeitsdatum %s überschritten", - "duenow": "aktuelles Fälligkeitsdatum %s heute", - "act-newDue": "__list__/__card__ hat seine 1. fällige Erinnerung [__board__]", - "act-withDue": "Erinnerung an Fällikgeit von __card__ [__board__]", - "act-almostdue": "erinnernd an das aktuelle Fälligkeitszeitpunkt (__timeValue__) von __card__ ist bevorstehend", - "act-pastdue": "erinnernd an das aktuelle Fälligkeitszeitpunkt (__timeValue__) von __card__ ist vorbei", - "act-duenow": "erinnernd an das aktuelle Fälligkeitszeitpunkt (__timeValue__) von __card__ ist jetzt", - "act-atUserComment": "Sie wurden in [__board__] __list__/__card__ erwähnt", - "delete-user-confirm-popup": "Möchten Sie dieses Benutzerkonto wirklich löschen? Die Aktion kann nicht rückgängig gemacht werden.", - "delete-team-confirm-popup": "Sind Sie sicher, daß Sie dieses Team löschen wollen? Es gibt keine Möglichkeit, das rückgängig zu machen.", - "delete-org-confirm-popup": "Sind Sie sicher, daß Sie diese Organisation löschen wollen? Es gibt keine Möglichkeit, das rückgängig zu machen.", - "accounts-allowUserDelete": "Erlaube Benutzern ihr Benutzerkonto selbst zu löschen", - "hide-minicard-label-text": "Labeltext auf Minikarte ausblenden", - "show-desktop-drag-handles": "Desktop-Ziehpunkte anzeigen", - "assignee": "Zugewiesen", - "cardAssigneesPopup-title": "Zugewiesen", - "addmore-detail": "Eine detailliertere Beschreibung hinzufügen", - "show-on-card": "Zeige auf Karte", - "show-on-minicard": "Zeige auf Minikarte", - "new": "Neu", - "editOrgPopup-title": "Organisation bearbeiten", - "newOrgPopup-title": "Neue Organisation", - "editTeamPopup-title": "Team bearbeiten", - "newTeamPopup-title": "Neues Team", - "editUserPopup-title": "Benutzer ändern", - "newUserPopup-title": "Neuer Benutzer", - "notifications": "Benachrichtigungen", - "help": "Hilfe", - "view-all": "Alle anzeigen", - "filter-by-unread": "Nur ungelesene", - "mark-all-as-read": "Alle als gelesen markieren", - "remove-all-read": "Alle gelesenen entfernen", - "allow-rename": "Umbenennen erlauben", - "allowRenamePopup-title": "Umbenennen erlauben", - "start-day-of-week": "Wochentagbeginn festlegen", - "monday": "Montag", - "tuesday": "Dienstag", - "wednesday": "Mittwoch", - "thursday": "Donnerstag", - "friday": "Freitag", - "saturday": "Samstag", - "sunday": "Sonntag", - "status": "Status", - "swimlane": "Swimlane", - "owner": "Eigentümer", - "last-modified-at": "Zuletzt geändert um", - "last-activity": "Letzte Aktivität", - "voting": "Abstimunng", - "archived": "Archiviert", - "delete-linked-card-before-this-card": "Sie können diese Karte nicht löschen, bevor verbundene Karten nicht gelöscht wurden.", - "delete-linked-cards-before-this-list": "Sie können diese Liste erst löschen, wenn Sie alle Karten gelöscht haben, die auf Karten in dieser Liste verweisen.", - "hide-checked-items": "Erledigte ausblenden", - "hide-finished-checklist": "Abgeschlossene Checkliste ausblenden", - "task": "Aufgabe", - "create-task": "Aufgabe erstellen", - "ok": "OK", - "organizations": "Organisationen", - "teams": "Teams", - "displayName": "Anzeigename", - "shortName": "Kurzname", - "autoAddUsersWithDomainName": "Automatisch Benutzer über den Domainnamen hinzufügen", - "website": "Webseite", - "person": "Person", - "my-cards": "Meine Karten", - "card": "Karte", - "list": "Liste", - "board": "Board", - "context-separator": "/", - "myCardsViewChange-title": "Meine Karten Ansicht", - "myCardsViewChangePopup-title": "Meine Karten Ansicht", - "myCardsViewChange-choice-boards": "Boards", - "myCardsViewChange-choice-table": "Tabelle", - "myCardsSortChange-title": "Meine Karten Sortierung", - "myCardsSortChangePopup-title": "Meine Karten Sortierung", - "myCardsSortChange-choice-board": "nach Board", - "myCardsSortChange-choice-dueat": "nach Fälligkeitsdatum", - "dueCards-title": "Fällige Karten", - "dueCardsViewChange-title": "Fällige Karten Ansicht", - "dueCardsViewChangePopup-title": "Fällige Karten Ansicht", - "dueCardsViewChange-choice-me": "Ich", - "dueCardsViewChange-choice-all": "alle Benutzer", - "dueCardsViewChange-choice-all-description": "Zeigt alle unvollständigen Karten mit einem *Fälligkeits*-Datum auf Boards, für die der Benutzer Berechtigungen hat.", - "broken-cards": "Fehlerhafte Karten", - "board-title-not-found": "Board „%s“ nicht gefunden.", - "swimlane-title-not-found": "Swimlane „%s“ nicht gefunden.", - "list-title-not-found": "Liste „%s“ nicht gefunden.", - "label-not-found": "Label „%s“ nicht gefunden.", - "label-color-not-found": "Label-Farbe „%s“ nicht gefunden.", - "user-username-not-found": "Nutzername „%s“ nicht gefunden.", - "comment-not-found": "Keine Karte gefunden, die „%s“ in einem Kommentar enthält.", - "org-name-not-found": "Organisation '%s' nicht gefunden.", - "team-name-not-found": "Team '%s' nicht gefunden.", - "globalSearch-title": "Alle Boards durchsuchen", - "no-cards-found": "Keine Karten gefunden", - "one-card-found": "Eine Karte gefunden", - "n-cards-found": "%s Karten gefunden", - "n-n-of-n-cards-found": "__start__–__end__ von __total__ Karten gefunden", - "operator-board": "Board", - "operator-board-abbrev": "b", - "operator-swimlane": "Swimlane", - "operator-swimlane-abbrev": "s", - "operator-list": "Liste", - "operator-list-abbrev": "l", - "operator-label": "Label", - "operator-label-abbrev": "#", - "operator-user": "Nutzer", - "operator-user-abbrev": "@", - "operator-member": "Mitglied", - "operator-member-abbrev": "m", - "operator-assignee": "Zugewiesener", - "operator-assignee-abbrev": "a", - "operator-creator": "Ersteller", - "operator-status": "Status", - "operator-due": "Fällig", - "operator-created": "erstellt", - "operator-modified": "geändert", - "operator-sort": "sortieren", - "operator-comment": "Kommentar", - "operator-has": "hat", - "operator-limit": "Begrenzung", - "operator-debug": "Debug", - "operator-org": "Organisation", - "operator-team": "Team", - "predicate-archived": "archiviert", - "predicate-open": "offen", - "predicate-ended": "beendet", - "predicate-all": "alle", - "predicate-overdue": "überfällig", - "predicate-week": "Woche", - "predicate-month": "Monat", - "predicate-quarter": "Quartal", - "predicate-year": "Jahr", - "predicate-due": "Fällig", - "predicate-modified": "geändert", - "predicate-created": "erstellt", - "predicate-attachment": "Anhang", - "predicate-description": "Beschreibung", - "predicate-checklist": "Checkliste", - "predicate-start": "Start", - "predicate-end": "Ende", - "predicate-assignee": "Zugewiesener", - "predicate-member": "Mitglied", - "predicate-public": "öffentlich", - "predicate-private": "privat", - "predicate-selector": "Auswahl", - "predicate-projection": "Projektion", - "operator-unknown-error": "„%s“ ist kein Operator", - "operator-number-expected": "Operator „__operator__“ erwartete eine Zahl, bekam aber „__value__“", - "operator-sort-invalid": "Sortierung „%s“ ist ungültig", - "operator-status-invalid": "„%s“ ist kein gültiger Status", - "operator-has-invalid": "%s ist keine gültige Prüfung auf Existenz", - "operator-limit-invalid": "%s ist keine gültige Begrenzung. Die Begrenzung sollte eine positive Ganzzahl sein.", - "operator-debug-invalid": "%s ist kein gültiger Debugausdruck", - "next-page": "Nächste Seite", - "previous-page": "Vorherige Seite", - "heading-notes": "Bemerkungen", - "globalSearch-instructions-heading": "Hinweise zur Suche", - "globalSearch-instructions-description": "Suchanfragen können Operatoren enthalten, um die Suche zu verfeinern. Operatoren bestehen aus ihrem Namen und ihrem Wert, getrennt durch einen Doppelpunkt. Beispielsweise würde die Operatorangabe `Liste:Blockiert` die Suche beschränken auf Karten in einer Liste namens *Blockiert*. Wenn der Wert Leerschritte oder andere Spezialzeichen enthält, muss er in Anführungszeichen gesetzt sein (z.B. `__operator_list__:\"Im Review\"`).", - "globalSearch-instructions-operators": "Mögliche Operatoren:", - "globalSearch-instructions-operator-board": "`__operator_board__:` – Karten in Boards, auf die das angegebene *<title>* passt", - "globalSearch-instructions-operator-list": "`__operator_list__:<title>` – Karten in Listen, auf die das angegebene *<title>* passt", - "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` – Karten in Swimlanes, auf die das angebene *<title>* passt", - "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` – Karten mit einem Kommentar, das *<text>* enthält.", - "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` – Karten, die ein Label haben, auf das *<color>* oder *<name> passt", - "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<Name|Farbe>` – Kurzform für `__operator_label__:<color>` oder `__operator_label__:<name>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<username>` – Karten, für die *<username>* ein *Mitglied* oder ein *Zugewiesener* ist", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` – Kurzform für `user:<username>`", - "globalSearch-instructions-operator-member": "`__operator_member__:<username>` – Karten, von denen *<username>* *Mitglied* ist", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` – Karten, denen *<username>* *zugewiesen* ist", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` – Karten, die von *<username>* angelegt wurden", - "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - Karten gehören zu einem Board, dass der Organisation *<name>* zugewiesen ist", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - Karten gehören zu einem Board, dass Team *<name>* zugewiesen ist", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` – Karten, die spätestens in *<n>* Tagen fällig sind. `__operator_due__:__predicate_overdue__` zeigt alle Karten, für die die Fälligkeit überschritten ist.", - "globalSearch-instructions-operator-created": "`__operator_created__:<n>` – Karten, die vor maximal *<n>* Tagen angelegt wurden", - "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` – Karten, die vor maximal *<n>* Tagen geändert wurden", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` – wo *<status>* eines der Folgenden ist:", - "globalSearch-instructions-status-archived": "`__predicate_archived__` – archivierte Karten", - "globalSearch-instructions-status-all": "`__predicate_all__` – alle archivierten und unarchivierten Karten", - "globalSearch-instructions-status-ended": "`__predicate_ended__` – Karten mit einem Enddatum", - "globalSearch-instructions-status-public": "`__predicate_public__` – Karten aus öffentlichen Boards", - "globalSearch-instructions-status-private": "`__predicate_private__` – Karten aus privaten Boards", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` – wo *<field>* eines aus `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` oder `__predicate_member__` ist. Die Angabe eines `-` vor *<field>* sucht nach leerem Feld (z.B. findet `__operator_has__:-fällig` alle Karten ohne Fälligkeitsdatum).", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` – wo *<sort-name>* eines aus `__predicate_due__`, `__predicate_created__` oder `__predicate_modified__` ist. Zum absteigenden Sortieren ein `-` vor den Sortierschlüssel setzen.", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` – wo *<n>* eine positive Ganzzahl ist, die die Anzahl Karten pro Seite darstellt.", - "globalSearch-instructions-notes-1": "Mehrere Operatoren können angegeben werden.", - "globalSearch-instructions-notes-2": "Gleichartige Operatoren werden Oder-verknüpft. Karten, für die eine Bedingung zutrifft, werden ausgegeben.\n`__operator_list__:Verfügbar __operator_list__:Blockiert` würde alle Karten ausgeben, die in irgendwelchen Listen mit den Namen *Verfügbar* oder *Blockiert* stehen.", - "globalSearch-instructions-notes-3": "Verschiedenartige Operatoren werden *UND*-verknüpft. Nur Karten, auf die alle verschiedenartigen Operatoren zutreffen, werden zurückgegeben. `__operator_list__:Verfügbar __operator_label__:Rot` gibt nur Karten aus der Liste *Verfügbar* mit *rotem* Label zurück.", - "globalSearch-instructions-notes-3-2": "Tage können als positive oder negative Ganzzahl angegeben werden, oder man nutzt `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` oder `__predicate_year__` für den jeweiligen Zeitraum.", - "globalSearch-instructions-notes-4": "Bei Suchen in Texten ist die Groß-/Kleinschreibung egal.", - "globalSearch-instructions-notes-5": "Per Vorgabe werden archivierte Karten bei der Suche nicht berücksichtigt.", - "link-to-search": "Link auf diese Suche", - "excel-font": "Arial", - "number": "Zahl", - "label-colors": "Label-Farben", - "label-names": "Label-Namen", - "archived-at": "archiviert am", - "sort-cards": "Sortiere Karten", - "sort-is-on": "Sortierung ist aktiviert", - "cardsSortPopup-title": "Sortiere Karten", - "due-date": "Fälligkeitsdatum", - "server-error": "Server-Fehler", - "server-error-troubleshooting": "Bitte übermitteln Sie den Fehler, den der Server erzeugt hat.\nRufen Sie für eine Snap-Installation auf: `sudo snap logs wekan.wekan`\nRufen Sie für eine Docker-Installation auf: `sudo docker logs wekan-app`", - "title-alphabetically": "Überschrift (alphabetisch)", - "created-at-newest-first": "Erstelldatum (neueste zuerst)", - "created-at-oldest-first": "Erstelldatum (älteste zuerst)", - "links-heading": "Links", - "hide-activities-of-all-boards": "Zeige die Board Aktivitäten nicht auf allen Boards", - "now-activities-of-all-boards-are-hidden": "Alle Aktivitäten von allen Boards sind nun verborgen", - "move-swimlane": "Swimlane verschieben", - "moveSwimlanePopup-title": "Swimlane verschieben", - "custom-field-stringtemplate": "String-Vorlage", - "custom-field-stringtemplate-format": "Format (verwende %{value} als Platzhalter)", - "custom-field-stringtemplate-separator": "Trenner (verwende oder   für einen Leerschritt)", - "custom-field-stringtemplate-item-placeholder": "Drücke die Eingabetaste, um weitere Einträge hinzuzufügen", - "creator": "Ersteller", - "creator-on-minicard": "Ersteller auf Minikarte", - "filesReportTitle": "Dateien-Bericht", - "reports": "Berichte", - "rulesReportTitle": "Regeln-Bericht", - "boardsReportTitle": "Boardbericht", - "cardsReportTitle": "Kartenbericht", - "copy-swimlane": "Swimlane kopieren", - "copySwimlanePopup-title": "Swimlane kopieren", - "display-card-creator": "Karten-Ersteller anzeigen", - "wait-spinner": "Warte-Symbol", - "Bounce": "Puls-Warte-Symbol", - "Cube": "Würfel-Warte-Symbol", - "Cube-Grid": "Würfel-Gitter-Warte-Symbol", - "Dot": "Punkt-Warte-Symbol", - "Double-Bounce": "Doppelpuls-Warte-Symbol", - "Rotateplane": "Drehscheibe-Warte-Symbol", - "Scaleout": "Scaleout-Warte-Symbol", - "Wave": "Wellen-Warte-Symbol", - "maximize-card": "Karte maximieren", - "minimize-card": "Karte minimieren", - "delete-org-warning-message": "Diese Organisation kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört.", - "delete-team-warning-message": "Dieses Team kann nicht gelöscht werden, da wenigstens ein Nutzer dazu gehört.", - "subject": "Betreff", - "details": "Details", - "carbon-copy": "Kopie (CC:)", - "ticket": "Ticket", - "tickets": "Tickets", - "ticket-number": "Ticketnummer", - "open": "Offen", - "pending": "Unerledigt", - "closed": "Geschlossen", - "resolved": "Gelöst", - "cancelled": "Gestrichen", - "history": "Verlauf", - "request": "Anfrage", - "requests": "Anfragen", - "help-request": "Hilfsgesuch", - "editCardSortOrderPopup-title": "Sortierung ändern", - "cardDetailsPopup-title": "Kartendetails", - "add-teams": "Teams hinzufügen", - "add-teams-label": "Zugewiesene Teams werden darunter angezeigt:", - "remove-team-from-table": "Sind Sie sicher, das Sie dieses Team vom Board entfernen möchten?", - "confirm-btn": "Bestätigen", - "remove-btn": "entfernen", - "filter-card-title-label": "Nach Titel der Karte filtern", - "invite-people-success": "Registrierungseinladung erfolgreich versandt", - "invite-people-error": "Fehler beim Versand der Registrierungseinladung", - "can-invite-if-same-mailDomainName": "Name der Email-Domain", - "to-create-teams-contact-admin": "Bitte kontaktieren Sie den Administrator um Teams anlegen zu lassen.", - "Node_heap_total_heap_size": "Knoten-Heap: totale Heap-Größe", - "Node_heap_total_heap_size_executable": "Knoten-Heap: totale Heap-Größe (Executable)", - "Node_heap_total_physical_size": "Knoten-Heap: totale physische Größe", - "Node_heap_total_available_size": "Knoten-Heap: totale verfügbare Größe", - "Node_heap_used_heap_size": "Knoten-Heap: benutzte Heap-Größe", - "Node_heap_heap_size_limit": "Knoten-Heap: Heap-Größen-Limit", - "Node_heap_malloced_memory": "Knoten-Heap: malloc-belegter Speicher", - "Node_heap_peak_malloced_memory": "Knoten-Heap: Maximum des malloc-belegten Speichers", - "Node_heap_does_zap_garbage": "Knoten-Heap: macht „Zap-Garbage“", - "Node_heap_number_of_native_contexts": "Knoten-Heap: Anzahl nativer Kontexte", - "Node_heap_number_of_detached_contexts": "Knoten-Heap: Anzahl losgelöster Kontexte", - "Node_memory_usage_rss": "Knoten-Speicherverbrauch: Resident Set-Größe", - "Node_memory_usage_heap_total": "Knoten-Speicherverbrauch: totale Größe des belegten Heaps", - "Node_memory_usage_heap_used": "Knoten-Speicherverbrauch: tatsächlicher Speicherverbrauch", - "Node_memory_usage_external": "Knoten-Speicherverbrauch: extern", - "add-organizations": "Organisation hinzufügen", - "add-organizations-label": "Hinzugefügte Organisationen werden nachfolgend angezeigt:", - "remove-organization-from-board": "Sicher, dass du die Organisation von diesem Board entfernen willst?", - "to-create-organizations-contact-admin": "Um Organisationen anzulegen, wende dich bitte an den Administrator.", - "custom-legal-notice-link-url": "URL zu eigenem Impressum", - "acceptance_of_our_legalNotice": "Durch das Einloggen akzeptieren Sie unser", - "legalNotice": "Impressum/Datenschutzerklärung", - "copied": "Kopiert!", - "checklistActionsPopup-title": "Checklistenaktionen", - "moveChecklist": "Checkliste verschieben", - "moveChecklistPopup-title": "Checkliste verschieben", - "newlineBecomesNewChecklistItem": "Jede Textzeile wird in einen Checklisteneintrag umgewandelt", - "newLineNewItem": "Eine Textzeile = ein Checklisteneintrag", - "newlineBecomesNewChecklistItemOriginOrder": "Jede Textzeile wird in einen Checklisteneintrag umgewandelt, in ursprünglicher Reihenfolge", - "originOrder": "ursprüngliche Reihenfolge", - "copyChecklist": "Checkliste kopieren", - "copyChecklistPopup-title": "Checkliste kopieren", - "card-show-lists": "Listen anzeigen", - "subtaskActionsPopup-title": "Teilaufgabenaktionen", - "attachmentActionsPopup-title": "Anhang-Aktionen", - "attachment-move-storage-fs": "Verschiebe den Anhang zum Dateisystem", - "attachment-move-storage-gridfs": "Verschiebe den Anhang zu GridFS", - "attachment-move-storage-s3": "Verschiebe Anhang nach S3", - "attachment-move": "Verschiebe den Anhang", - "move-all-attachments-to-fs": "Verschiebe alle Anhänge zum Dateisystem", - "move-all-attachments-to-gridfs": "Verschiebe alle Anhänge zu GridFS", - "move-all-attachments-to-s3": "Verschiebe alle Anhänge nach S3", - "move-all-attachments-of-board-to-fs": "Verschiebe alle Anhänge des Boards zum Dateisystem", - "move-all-attachments-of-board-to-gridfs": "Verschiebe alle Anhänge des Boards zu GridFS", - "move-all-attachments-of-board-to-s3": "Verschiebe alle Anhänge des Boards nach S3", - "path": "Pfad", - "version-name": "Version-Name", - "size": "Größe", - "storage": "Speicher", - "action": "Aktion", - "board-title": "Board-Titel", - "attachmentRenamePopup-title": "Umbenennen", - "uploading": "Hochladen", - "remaining_time": "Verbleibende Zeit", - "speed": "Schnelligkeit", - "progress": "Fortschritt", - "password-again": "Passwort (wiederholen)", - "if-you-already-have-an-account": "Wenn Sie bereits ein Benutzerkonto haben", - "register": "Registrieren", - "forgot-password": "Passwort vergessen", - "minicardDetailsActionsPopup-title": "Kartendetails", - "Mongo_sessions_count": "Mongo Sitzungen zählen", - "change-visibility": "Sichtbarkeit ändern", - "max-upload-filesize": "Maximale Dateigröße zum Hochladen in Bytes:", - "allowed-upload-filetypes": "Erlaubte Dateitypen zum Hochladen:", - "max-avatar-filesize": "Maximale Profilbild Größe in Bytes:", - "allowed-avatar-filetypes": "Erlaubte Profilbild Dateitypen:", - "invalid-file": "Wenn der Dateiname ungültig ist, wird das Hochladen oder Umbenennen abgebrochen.", - "preview-pdf-not-supported": "Dein Gerät unterstützt keine PDF Vorschau. Versuche sie stattdessen herunterzuladen.", - "drag-board": "Das Board ziehen nach", - "translation-number": "Die Anzahl benutzerdefinierter String-Übersetzungen ist:", - "delete-translation-confirm-popup": "Möchten Sie diese benutzerdefinierte String-Übersetzung wirklich löschen? Die Aktion kann nicht rückgängig gemacht werden.", - "newTranslationPopup-title": "Neue benutzerdefinierte String-Übersetzung", - "editTranslationPopup-title": "Bearbeite die benutzerdefinierte String-Übersetzung", - "settingsTranslationPopup-title": "Soll die benutzerdefinierte String-Übersetzung gelöscht werden?", - "translation": "Übersetzung", - "text": "Text", - "translation-text": "Übersetzungstext", - "show-subtasks-field": "Teilaufgaben Feld anzeigen", - "show-week-of-year": "Kalenderwoche anzeigen (ISO 8601)", - "convert-to-markdown": "Als Markdown konvertieren", - "import-board-zip": "Erstelle .zip Datei mit JSON Board Dateien und die Unterverzeichnisse des Boardnamen mit Anhängen", - "collapse": "Einklappen", - "uncollapse": "Aufklappen", - "hideCheckedChecklistItems": "Verberge erledigte Checklisteneinträge", - "hideAllChecklistItems": "Verberge alle Checklisteneinträge", - "support": "Unterstützung", - "supportPopup-title": "Unterstützung", - "accessibility-page-enabled": "Barrierefreie Seite freigeschaltet", - "accessibility-title": "Barrierefreier Eintrag", - "accessibility-content": "Barrierefreier Eintrag" -} diff --git a/imports/i18n/data/el-GR.i18n.json b/imports/i18n/data/el-GR.i18n.json index 4eacf20f7..72a1c18f3 100644 --- a/imports/i18n/data/el-GR.i18n.json +++ b/imports/i18n/data/el-GR.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s μετακινήθηκε στο Αρχείο", "activity-attached": "επισυνάφθηκε %s στο %s", "activity-created": "δημιουργήθηκε %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "δημιούργησε το προσαρμοσμένο πεδίο %s", "activity-excluded": "εξαιρέθηκε %s από %s", "activity-imported": "εισήχθη %s στο %s από %s", @@ -86,12 +85,10 @@ "add-card": "Προσθήκη Κάρτας", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Λίστες Ελέγχου - Checklists", "click-to-star": "Κλικ για να προσθέσετε αστεράκι στον πίνακα", "click-to-unstar": "Κλικ για να αφαιρέσετε αστεράκι από τον πίνακα", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard ή drag & drop", "close": "Κλείσιμο", "close-board": "Κλείσιμο Πίνακα", @@ -300,7 +294,6 @@ "color-white": "λευκό", "color-yellow": "κίτρινο", "unset-color": "Unset", - "comments": "Comments", "comment": "Σχόλιο", "comment-placeholder": "Συγγραφή Σχολίου", "comment-only": "Μόνο σχόλιο", @@ -383,7 +376,6 @@ "email-sent": "Εστάλη Email", "email-verifyEmail-subject": "Verify your email address on __siteName__", "email-verifyEmail-text": "Χαίρετε __user__,\n\nΓια να επιβεβαιώσετε το email που χρησιμοποιεί ο λογαριασμός σας, απλώς κάνετε κλικ στον παρακάτω σύνδεσμο.\n\n__url__\n\nΕυχαριστούμε.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Enable WIP Limit", "error-board-doesNotExist": "Αυτός ο πίνακας δεν υφίσταται", "error-board-notAdmin": "Πρέπει να είστε διαχειριστής του πίνακα αυτού για να προβείτε σε αυτό", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Πλήρες Όνομα", "header-logo-title": "Επιστροφή στη σελίδα των πινάκων σας.", - "show-activities": "Show Activities", + "hide-system-messages": "Απόκρυψη μηνυμάτων συστήματος", "headerBarCreateBoardPopup-title": "Δημιουργία Πίνακα", "home": "Αρχική", "import": "Εισαγωγή", @@ -580,14 +572,12 @@ "select-board": "Επιλογή Πίνακα", "set-wip-limit-value": "Προσδιορισμός ορίου στο μέγιστο αριθμό εργασιών σε αυτή τη λίστα.", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Assign yourself to current card", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete members", "shortcut-clear-filters": "Καθαρισμός φίλτρων", "shortcut-close-dialog": "Κλείσιμο Διαλόγου", "shortcut-filter-my-cards": "Φιλτράρισμα των καρτών μου", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Έχει κάρτες με δαπανηθέντα χρόνο", "time": "Ώρα", "title": "Τίτλος", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Καταγραφή", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Κείμενο", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Σύμπτυξη", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/el.i18n.json b/imports/i18n/data/el.i18n.json index 3f4666a1b..0105a9143 100644 --- a/imports/i18n/data/el.i18n.json +++ b/imports/i18n/data/el.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s μετακινήθηκε στο Αρχείο", "activity-attached": "επισυνάφθηκε %s στο %s", "activity-created": "δημιουργήθηκε %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "δημιούργησε το προσαρμοσμένο πεδίο %s", "activity-excluded": "εξαιρέθηκε %s από %s", "activity-imported": "εισήχθη %s στο %s από %s", @@ -86,12 +85,10 @@ "add-card": "Προσθήκη Κάρτας", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Λίστες Ελέγχου - Checklists", "click-to-star": "Κλικ για να προσθέσετε αστεράκι στον πίνακα", "click-to-unstar": "Κλικ για να αφαιρέσετε αστεράκι από τον πίνακα", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard ή drag & drop", "close": "Κλείσιμο", "close-board": "Κλείσιμο Πίνακα", @@ -300,7 +294,6 @@ "color-white": "λευκό", "color-yellow": "κίτρινο", "unset-color": "Unset", - "comments": "Comments", "comment": "Σχόλιο", "comment-placeholder": "Συγγραφή Σχολίου", "comment-only": "Μόνο σχόλιο", @@ -383,7 +376,6 @@ "email-sent": "Εστάλη Email", "email-verifyEmail-subject": "Verify your email address on __siteName__", "email-verifyEmail-text": "Χαίρετε __user__,\n\nΓια να επιβεβαιώσετε το email που χρησιμοποιεί ο λογαριασμός σας, απλώς κάνετε κλικ στον παρακάτω σύνδεσμο.\n\n__url__\n\nΕυχαριστούμε.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Enable WIP Limit", "error-board-doesNotExist": "Αυτός ο πίνακας δεν υφίσταται", "error-board-notAdmin": "Πρέπει να είστε διαχειριστής του πίνακα αυτού για να προβείτε σε αυτό", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Πλήρες Όνομα", "header-logo-title": "Επιστροφή στη σελίδα των πινάκων σας.", - "show-activities": "Show Activities", + "hide-system-messages": "Απόκρυψη μηνυμάτων συστήματος", "headerBarCreateBoardPopup-title": "Δημιουργία Πίνακα", "home": "Αρχική", "import": "Εισαγωγή", @@ -580,14 +572,12 @@ "select-board": "Επιλογή Πίνακα", "set-wip-limit-value": "Προσδιορισμός ορίου στο μέγιστο αριθμό εργασιών σε αυτή τη λίστα.", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Assign yourself to current card", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete members", "shortcut-clear-filters": "Καθαρισμός φίλτρων", "shortcut-close-dialog": "Κλείσιμο Διαλόγου", "shortcut-filter-my-cards": "Φιλτράρισμα των καρτών μου", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Έχει κάρτες με δαπανηθέντα χρόνο", "time": "Ώρα", "title": "Τίτλος", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Καταγραφή", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Κείμενο", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Σύμπτυξη", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/en-BR.i18n.json b/imports/i18n/data/en-BR.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/en-BR.i18n.json +++ b/imports/i18n/data/en-BR.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/en-DE.i18n.json b/imports/i18n/data/en-DE.i18n.json index 9e93c3326..90bcb1ed1 100644 --- a/imports/i18n/data/en-DE.i18n.json +++ b/imports/i18n/data/en-DE.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/en-GB.i18n.json b/imports/i18n/data/en-GB.i18n.json index 3424f8de4..5b6adb530 100644 --- a/imports/i18n/data/en-GB.i18n.json +++ b/imports/i18n/data/en-GB.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/en-IT.i18n.json b/imports/i18n/data/en-IT.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/en-IT.i18n.json +++ b/imports/i18n/data/en-IT.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/en-MY.i18n.json b/imports/i18n/data/en-MY.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/en-MY.i18n.json +++ b/imports/i18n/data/en-MY.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/en-YS.i18n.json b/imports/i18n/data/en-YS.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/en-YS.i18n.json +++ b/imports/i18n/data/en-YS.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/en.i18n.json b/imports/i18n/data/en.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/en.i18n.json +++ b/imports/i18n/data/en.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/en_ID.i18n.json b/imports/i18n/data/en_ID.i18n.json deleted file mode 100644 index 78b62d375..000000000 --- a/imports/i18n/data/en_ID.i18n.json +++ /dev/null @@ -1,1272 +0,0 @@ -{ - "accept": "Accept", - "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "created board __board__", - "act-createSwimlane": "created swimlane __swimlane__ to board __board__", - "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-createCustomField": "created custom field __customField__ at board __board__", - "act-deleteCustomField": "deleted custom field __customField__ at board __board__", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createList": "added list __list__ to board __board__", - "act-addBoardMember": "added member __member__ to board __board__", - "act-archivedBoard": "Board __board__ moved to Archive", - "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", - "act-importBoard": "imported board __board__", - "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", - "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", - "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-removeBoardMember": "removed member __member__ from board __board__", - "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-withBoardTitle": "__board__", - "act-withCardTitle": "[__board__] __card__", - "actions": "Actions", - "activities": "Activities", - "activity": "Activity", - "activity-added": "added %s to %s", - "activity-archived": "%s moved to Archive", - "activity-attached": "attached %s to %s", - "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", - "activity-customfield-created": "created custom field %s", - "activity-excluded": "excluded %s from %s", - "activity-imported": "imported %s into %s from %s", - "activity-imported-board": "imported %s from %s", - "activity-joined": "joined %s", - "activity-moved": "moved %s from %s to %s", - "activity-on": "on %s", - "activity-removed": "removed %s from %s", - "activity-sent": "sent %s to %s", - "activity-unjoined": "unjoined %s", - "activity-subtask-added": "added subtask to %s", - "activity-checked-item": "checked %s in checklist %s of %s", - "activity-unchecked-item": "unchecked %s in checklist %s of %s", - "activity-checklist-added": "added checklist to %s", - "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist %s of %s", - "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", - "activity-checklist-item-added": "added checklist item to '%s' in %s", - "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", - "add": "Add", - "activity-checked-item-card": "checked %s in checklist %s", - "activity-unchecked-item-card": "unchecked %s in checklist %s", - "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "activity-checklist-uncompleted-card": "uncompleted the checklist %s", - "activity-editComment": "edited comment %s", - "activity-deleteComment": "deleted comment %s", - "activity-receivedDate": "edited received date to %s of %s", - "activity-startDate": "edited start date to %s of %s", - "activity-dueDate": "edited due date to %s of %s", - "activity-endDate": "edited end date to %s of %s", - "add-attachment": "Add Attachment", - "add-board": "Add Board", - "add-template": "Add Template", - "add-card": "Add Card", - "add-card-to-top-of-list": "Add Card to Top of List", - "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Set Swimlane Height", - "set-swimlane-height": "Set Swimlane Height", - "set-swimlane-height-value": "Swimlane Height (pixels)", - "swimlane-height-error-message": "Swimlane height must be a positive integer", - "add-swimlane": "Add Swimlane", - "add-subtask": "Add Subtask", - "add-checklist": "Add Checklist", - "add-checklist-item": "Add an item to checklist", - "close-add-checklist-item": "Close add an item to checklist form", - "close-edit-checklist-item": "Close edit an item to checklist form", - "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "Add cover image to minicard", - "add-label": "Add Label", - "add-list": "Add List", - "add-after-list": "Add After List", - "add-members": "Add Members", - "added": "Added", - "addMemberPopup-title": "Members", - "memberPopup-title": "Member Settings", - "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", - "app-try-reconnect": "Try to reconnect.", - "archive": "Move to Archive", - "archive-all": "Move All to Archive", - "archive-board": "Move Board to Archive", - "archive-card": "Move Card to Archive", - "archive-list": "Move List to Archive", - "archive-swimlane": "Move Swimlane to Archive", - "archive-selection": "Move selection to Archive", - "archiveBoardPopup-title": "Move Board to Archive?", - "archived-items": "Archive", - "archived-boards": "Boards in Archive", - "restore-board": "Restore Board", - "no-archived-boards": "No Boards in Archive.", - "archives": "Archive", - "template": "Template", - "templates": "Templates", - "template-container": "Template Container", - "add-template-container": "Add Template Container", - "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 (__size__ max)", - "back": "Back", - "board-change-color": "Change color", - "board-change-background-image": "Change Background Image", - "board-background-image-url": "Background Image URL", - "add-background-image": "Add Background Image", - "remove-background-image": "Remove Background Image", - "show-at-all-boards-page" : "Show at All Boards page", - "board-info-on-my-boards" : "All Boards Settings", - "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", - "boardInfoOnMyBoards-title": "All Boards Settings", - "show-card-counter-per-list": "Show card count per list", - "show-board_members-avatar": "Show Board members avatars", - "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>.", - "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", - "boardChangeColorPopup-title": "Change Board Background", - "boardChangeBackgroundImagePopup-title": "Change Background Image", - "allBoardsChangeColorPopup-title": "Change color", - "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", - "boardChangeTitlePopup-title": "Rename Board", - "boardChangeVisibilityPopup-title": "Change Visibility", - "boardChangeWatchPopup-title": "Change Watch", - "boardMenuPopup-title": "Board Settings", - "allBoardsMenuPopup-title": "Settings", - "boardChangeViewPopup-title": "Board View", - "boards": "Boards", - "board-view": "Board View", - "board-view-cal": "Calendar", - "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Collapse", - "board-view-gantt": "Gantt", - "board-view-lists": "Lists", - "bucket-example": "Like “Bucket List” for example", - "cancel": "Cancel", - "card-archived": "This card is moved to Archive.", - "board-archived": "This board is moved to Archive.", - "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 move a card to Archive to remove it from the board and preserve the activity.", - "card-archive-pop": "Card will not be visible at this list after archiving card.", - "card-archive-suggest-cancel": "You can later restore card from Archive.", - "card-due": "Due", - "card-due-on": "Due on", - "card-spent": "Spent Time", - "card-edit-attachments": "Edit attachments", - "card-edit-custom-fields": "Edit custom fields", - "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", - "cardCustomField-datePopup-title": "Change date", - "cardCustomFieldsPopup-title": "Edit custom fields", - "cardStartVotingPopup-title": "Start a vote", - "positiveVoteMembersPopup-title": "Proponents", - "negativeVoteMembersPopup-title": "Opponents", - "card-edit-voting": "Edit voting", - "editVoteEndDatePopup-title": "Change vote end date", - "allowNonBoardMembers": "Allow all logged in users", - "vote-question": "Voting question", - "vote-public": "Show who voted what", - "vote-for-it": "for it", - "vote-against": "against", - "deleteVotePopup-title": "Delete vote?", - "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", - "cardStartPlanningPokerPopup-title": "Start a Planning Poker", - "card-edit-planning-poker": "Edit Planning Poker", - "editPokerEndDatePopup-title": "Change Planning Poker vote end date", - "poker-question": "Planning Poker", - "poker-one": "1", - "poker-two": "2", - "poker-three": "3", - "poker-five": "5", - "poker-eight": "8", - "poker-thirteen": "13", - "poker-twenty": "20", - "poker-forty": "40", - "poker-oneHundred": "100", - "poker-unsure": "?", - "poker-finish": "Finish", - "poker-result-votes": "Votes", - "poker-result-who": "Who", - "poker-replay": "Replay", - "set-estimation": "Set Estimation", - "deletePokerPopup-title": "Delete planning poker?", - "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", - "cardDeletePopup-title": "Delete Card?", - "cardArchivePopup-title": "Archive Card?", - "cardDetailsActionsPopup-title": "Card Actions", - "cardLabelsPopup-title": "Labels", - "cardMembersPopup-title": "Members", - "cardMorePopup-title": "More", - "cardTemplatePopup-title": "Create template", - "cards": "Cards", - "cards-count": "Cards", - "cards-count-one": "Card", - "casSignIn": "Sign In with CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", - "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", - "subtasks": "Subtasks", - "checklists": "Checklists", - "click-to-star": "Click to star this board.", - "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", - "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 “Archive” button from the home header.", - "close-card": "Close Card", - "color-black": "black", - "color-blue": "blue", - "color-crimson": "crimson", - "color-darkgreen": "darkgreen", - "color-gold": "gold", - "color-gray": "gray", - "color-green": "green", - "color-indigo": "indigo", - "color-lime": "lime", - "color-magenta": "magenta", - "color-mistyrose": "mistyrose", - "color-navy": "navy", - "color-orange": "orange", - "color-paleturquoise": "paleturquoise", - "color-peachpuff": "peachpuff", - "color-pink": "pink", - "color-plum": "plum", - "color-purple": "purple", - "color-red": "red", - "color-saddlebrown": "saddlebrown", - "color-silver": "silver", - "color-sky": "sky", - "color-slateblue": "slateblue", - "color-white": "white", - "color-yellow": "yellow", - "unset-color": "Unset", - "comments": "Comments", - "comment": "Comment", - "comment-placeholder": "Write Comment", - "comment-only": "Comment only", - "comment-only-desc": "Can comment on cards only.", - "comment-delete": "Are you sure you want to delete the comment?", - "deleteCommentPopup-title": "Delete comment?", - "no-comments": "No comments", - "no-comments-desc": "Can not see comments and activities.", - "worker": "Worker", - "worker-desc": "Can only move cards, assign itself to card and comment.", - "computer": "Computer", - "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", - "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", - "subtaskDeletePopup-title": "Delete Subtask?", - "checklistDeletePopup-title": "Delete Checklist?", - "copy-card-link-to-clipboard": "Copy card link to clipboard", - "copy-text-to-clipboard": "Copy text to clipboard", - "linkCardPopup-title": "Link Card", - "searchElementPopup-title": "Search", - "copyCardPopup-title": "Copy Card", - "copyManyCardsPopup-title": "Copy Template to Many Cards", - "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", - "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", - "create": "Create", - "createBoardPopup-title": "Create Board", - "chooseBoardSourcePopup-title": "Import board", - "createLabelPopup-title": "Create Label", - "createCustomField": "Create Field", - "createCustomFieldPopup-title": "Create Field", - "current": "current", - "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", - "custom-field-checkbox": "Checkbox", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", - "custom-field-date": "Date", - "custom-field-dropdown": "Dropdown List", - "custom-field-dropdown-none": "(none)", - "custom-field-dropdown-options": "List Options", - "custom-field-dropdown-options-placeholder": "Press enter to add more options", - "custom-field-dropdown-unknown": "(unknown)", - "custom-field-number": "Number", - "custom-field-text": "Text", - "custom-fields": "Custom Fields", - "date": "Date", - "decline": "Decline", - "default-avatar": "Default avatar", - "delete": "Delete", - "deleteCustomFieldPopup-title": "Delete Custom Field?", - "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", - "editCustomFieldPopup-title": "Edit Field", - "addReactionPopup-title": "Add reaction", - "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-vertical-scrollbars": "Enable vertical scrollbars", - "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-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) 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-orgname-taken": "This organization name is already taken", - "error-teamname-taken": "This team name is already taken", - "error-email-taken": "Email has already been taken", - "export-board": "Export board", - "export-board-json": "Export board to JSON", - "export-board-csv": "Export board to CSV", - "export-board-tsv": "Export board to TSV", - "export-board-excel": "Export board to Excel", - "user-can-not-export-excel": "User can not export Excel", - "export-board-html": "Export board to HTML", - "export-card": "Export card", - "export-card-pdf": "Export card to PDF", - "user-can-not-export-card-to-pdf": "User can not export card to PDF", - "exportBoardPopup-title": "Export board", - "exportCardPopup-title": "Export card", - "sort": "Sort", - "sorted": "Sorted", - "remove-sort": "Remove sort", - "sort-desc": "Click to Sort List", - "list-sort-by": "Sort the List By:", - "list-label-modifiedAt": "Last Access Time", - "list-label-title": "Name of the List", - "list-label-sort": "Your Manual Order", - "list-label-short-modifiedAt": "(L)", - "list-label-short-title": "(N)", - "list-label-short-sort": "(M)", - "filter": "Filter", - "filter-cards": "Filter Cards or Lists", - "filter-dates-label": "Filter by date", - "filter-no-due-date": "No due date", - "filter-overdue": "Overdue", - "filter-due-today": "Due today", - "filter-due-this-week": "Due this week", - "filter-due-next-week": "Due next week", - "filter-due-tomorrow": "Due tomorrow", - "list-filter-label": "Filter List by Title", - "filter-clear": "Clear filter", - "filter-labels-label": "Filter by label", - "filter-no-label": "No label", - "filter-member-label": "Filter by member", - "filter-no-member": "No member", - "filter-assignee-label": "Filter by assignee", - "filter-no-assignee": "No assignee", - "filter-custom-fields-label": "Filter by Custom Fields", - "filter-no-custom-fields": "No Custom Fields", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", - "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", - "other-filters-label": "Other Filters", - "advanced-filter-label": "Advanced Filter", - "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", - "fullname": "Full Name", - "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", - "headerBarCreateBoardPopup-title": "Create Board", - "home": "Home", - "import": "Import", - "impersonate-user": "Impersonate user", - "link": "Link", - "import-board": "import board", - "import-board-c": "Import board", - "import-board-title-trello": "Import board from Trello", - "import-board-title-wekan": "Import board from previous export", - "import-board-title-csv": "Import board from CSV/TSV", - "from-trello": "From Trello", - "from-wekan": "From previous export", - "from-csv": "From CSV/TSV", - "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", - "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", - "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", - "import-json-placeholder": "Paste your valid JSON data here", - "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", - "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", - "import-show-user-mapping": "Review members mapping", - "import-user-select": "Pick your existing user you want to use as this member", - "importMapMembersAddPopup-title": "Select member", - "info": "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": "Move all cards in this list to Archive", - "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", - "list-move-cards": "Move all cards in this list", - "list-select-cards": "Select all cards in this list", - "set-color-list": "Set Color", - "listActionPopup-title": "List Actions", - "settingsUserPopup-title": "User Settings", - "settingsTeamPopup-title": "Team Settings", - "settingsOrgPopup-title": "Organization Settings", - "swimlaneActionPopup-title": "Swimlane Actions", - "swimlaneAddPopup-title": "Add a Swimlane below", - "listImportCardPopup-title": "Import a Trello card", - "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", - "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 move a list to Archive to remove it from the board and preserve the activity.", - "lists": "Lists", - "swimlanes": "Swimlanes", - "log-out": "Log Out", - "log-in": "Log In", - "loginPopup-title": "Log In", - "memberMenuPopup-title": "Member Settings", - "members": "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-label": "Set label for selection", - "multi-selection-member": "Set member for 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 cards in Archive.", - "no-archived-lists": "No lists in Archive.", - "no-archived-swimlanes": "No swimlanes in Archive.", - "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 creator 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 image from minicard", - "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", - "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", - "rescue-card-description-dialogue": "Overwrite current card description with your changes?", - "save": "Save", - "search": "Search", - "rules": "Rules", - "search-cards": "Search from card/list titles, descriptions and custom fields on this board", - "search-example": "Write text you search and press Enter", - "select-color": "Select Color", - "select-board": "Select Board", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", - "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-filter-my-assigned-cards": "Filter my assigned cards", - "shortcut-show-shortcuts": "Bring up this shortcuts list", - "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-searchbar": "Toggle Search 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", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", - "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", - "remove-labels-multiselect": "Multi-Selection removes labels 1-9", - "tracking": "Tracking", - "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", - "type": "Type", - "unassign-member": "Unassign member", - "unsaved-description": "You have an unsaved description.", - "unwatch": "Unwatch", - "upload": "Upload", - "upload-avatar": "Upload an avatar", - "uploaded-avatar": "Uploaded an avatar", - "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", - "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", - "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", - "custom-login-logo-image-url": "Custom Login Logo Image URL", - "custom-login-logo-link-url": "Custom Login Logo Link URL", - "custom-help-link-url": "Custom Help Link URL", - "text-below-custom-login-logo": "Text below Custom Login Logo", - "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", - "username": "Username", - "import-usernames": "Import Usernames", - "view-it": "View it", - "warn-list-archived": "warning: this card is in an list at Archive", - "watch": "Watch", - "watching": "Watching", - "watching-info": "You will be notified of any change in this board", - "welcome-board": "Welcome Board", - "welcome-swimlane": "Milestone 1", - "welcome-list1": "Basics", - "welcome-list2": "Advanced", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", - "what-to-do": "What do you want to do?", - "wipLimitErrorPopup-title": "Invalid WIP Limit", - "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", - "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", - "admin-panel": "Admin Panel", - "settings": "Settings", - "people": "People", - "registration": "Registration", - "disable-self-registration": "Disable Self-Registration", - "disable-forgot-password": "Disable Forgot Password", - "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", - "email-smtp-test-subject": "SMTP Test Email", - "email-smtp-test-text": "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.", - "webhook-title": "Webhook Name", - "webhook-token": "Token (Optional for Authentication)", - "outgoing-webhooks": "Outgoing Webhooks", - "bidirectional-webhooks": "Two-Way Webhooks", - "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "Card Title Filter", - "disable-webhook": "Disable This Webhook", - "global-webhook": "Global Webhooks", - "new-outgoing-webhook": "New Outgoing Webhook", - "no-name": "(Unknown)", - "Node_version": "Node version", - "Meteor_version": "Meteor version", - "MongoDB_version": "MongoDB version", - "MongoDB_storage_engine": "MongoDB storage engine", - "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", - "OS_Arch": "OS Arch", - "OS_Cpus": "OS CPU Count", - "OS_Freemem": "OS Free Memory", - "OS_Loadavg": "OS Load Average", - "OS_Platform": "OS Platform", - "OS_Release": "OS Release", - "OS_Totalmem": "OS Total Memory", - "OS_Type": "OS Type", - "OS_Uptime": "OS Uptime", - "days": "days", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "show-field-on-card": "Show this field on card", - "automatically-field-on-card": "Add field to new cards", - "always-field-on-card": "Add field to all cards", - "showLabel-field-on-card": "Show field label on minicard", - "showSum-field-on-list": "Show sum of fields at top of list", - "yes": "Yes", - "no": "No", - "accounts": "Accounts", - "accounts-allowEmailChange": "Allow Email Change", - "accounts-allowUserNameChange": "Allow Username Change", - "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", - "tableVisibilityMode" : "Boards visibility", - "createdAt": "Created at", - "modifiedAt": "Modified at", - "verified": "Verified", - "active": "Active", - "card-received": "Received", - "card-received-on": "Received on", - "card-end": "End", - "card-end-on": "Ends on", - "editCardReceivedDatePopup-title": "Change received date", - "editCardEndDatePopup-title": "Change end date", - "setCardColorPopup-title": "Set color", - "setCardActionsColorPopup-title": "Choose a color", - "setSwimlaneColorPopup-title": "Choose a color", - "setListColorPopup-title": "Choose a color", - "assigned-by": "Assigned By", - "requested-by": "Requested By", - "card-sorting-by-number": "Card sorting by number", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "defaultdefault": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "card-settings": "Card Settings", - "minicard-settings": "Minicard Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "boardCardSettingsPopup-title": "Card Settings", - "boardMinicardSettingsPopup-title": "Minicard Settings", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", - "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "Cover image on minicard", - "badge-attachment-on-minicard": "Count of attachments on minicard", - "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent", - "activity-added-label": "added label '%s' to %s", - "activity-removed-label": "removed label '%s' from %s", - "activity-delete-attach": "deleted an attachment from %s", - "activity-added-label-card": "added label '%s'", - "activity-removed-label-card": "removed label '%s'", - "activity-delete-attach-card": "deleted an attachment", - "activity-set-customfield": "set custom field '%s' to '%s' in %s", - "activity-unset-customfield": "unset custom field '%s' in %s", - "r-rule": "Rule", - "r-add-trigger": "Add trigger", - "r-add-action": "Add action", - "r-board-rules": "Board rules", - "r-add-rule": "Add rule", - "r-view-rule": "View rule", - "r-delete-rule": "Delete rule", - "r-new-rule-name": "New rule title", - "r-no-rules": "No rules", - "r-trigger": "Trigger", - "r-action": "Action", - "r-when-a-card": "When a card", - "r-is": "is", - "r-is-moved": "is moved", - "r-added-to": "Added to", - "r-removed-from": "Removed from", - "r-the-board": "the board", - "r-list": "list", - "set-filter": "Set Filter", - "r-moved-to": "Moved to", - "r-moved-from": "Moved from", - "r-archived": "Moved to Archive", - "r-unarchived": "Restored from Archive", - "r-a-card": "a card", - "r-when-a-label-is": "When a label is", - "r-when-the-label": "When the label", - "r-list-name": "list name", - "r-when-a-member": "When a member is", - "r-when-the-member": "When the member", - "r-name": "name", - "r-when-a-attach": "When an attachment", - "r-when-a-checklist": "When a checklist is", - "r-when-the-checklist": "When the checklist", - "r-completed": "Completed", - "r-made-incomplete": "Made incomplete", - "r-when-a-item": "When a checklist item is", - "r-when-the-item": "When the checklist item", - "r-checked": "Checked", - "r-unchecked": "Unchecked", - "r-move-card-to": "Move card to", - "r-top-of": "Top of", - "r-bottom-of": "Bottom of", - "r-its-list": "its list", - "r-archive": "Move to Archive", - "r-unarchive": "Restore from Archive", - "r-card": "card", - "r-add": "Add", - "r-remove": "Remove", - "r-label": "label", - "r-member": "member", - "r-remove-all": "Remove all members from the card", - "r-set-color": "Set color to", - "r-checklist": "checklist", - "r-check-all": "Check all", - "r-uncheck-all": "Uncheck all", - "r-items-check": "items of checklist", - "r-check": "Check", - "r-uncheck": "Uncheck", - "r-item": "item", - "r-of-checklist": "of checklist", - "r-send-email": "Send an email", - "r-to": "to", - "r-of": "of", - "r-subject": "subject", - "r-rule-details": "Rule details", - "r-d-move-to-top-gen": "Move card to top of its list", - "r-d-move-to-top-spec": "Move card to top of list", - "r-d-move-to-bottom-gen": "Move card to bottom of its list", - "r-d-move-to-bottom-spec": "Move card to bottom of list", - "r-d-send-email": "Send email", - "r-d-send-email-to": "to", - "r-d-send-email-subject": "subject", - "r-d-send-email-message": "message", - "r-d-archive": "Move card to Archive", - "r-d-unarchive": "Restore card from Archive", - "r-d-add-label": "Add label", - "r-d-remove-label": "Remove label", - "r-create-card": "Create new card", - "r-in-list": "in list", - "r-in-swimlane": "in swimlane", - "r-d-add-member": "Add member", - "r-d-remove-member": "Remove member", - "r-d-remove-all-member": "Remove all member", - "r-d-check-all": "Check all items of a list", - "r-d-uncheck-all": "Uncheck all items of a list", - "r-d-check-one": "Check item", - "r-d-uncheck-one": "Uncheck item", - "r-d-check-of-list": "of checklist", - "r-d-add-checklist": "Add checklist", - "r-d-remove-checklist": "Remove checklist", - "r-by": "by", - "r-add-checklist": "Add checklist", - "r-with-items": "with items", - "r-items-list": "item1,item2,item3", - "r-add-swimlane": "Add swimlane", - "r-swimlane-name": "swimlane name", - "r-board-note": "Note: leave a field empty to match every possible value. ", - "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", - "r-when-a-card-is-moved": "When a card is moved to another list", - "r-set": "Set", - "r-update": "Update", - "r-datefield": "date field", - "r-df-start-at": "start", - "r-df-due-at": "due", - "r-df-end-at": "end", - "r-df-received-at": "received", - "r-to-current-datetime": "to current date/time", - "r-remove-value-from": "Remove value from", - "r-link-card": "Link card to", - "ldap": "LDAP", - "oauth2": "OAuth2", - "cas": "CAS", - "authentication-method": "Authentication method", - "authentication-type": "Authentication type", - "custom-product-name": "Custom Product Name", - "layout": "Layout", - "hide-logo": "Hide Logo", - "hide-card-counter-list": "Hide card counter list on All Boards", - "hide-board-member-list": "Hide board member list on All Boards", - "add-custom-html-after-body-start": "Add Custom HTML after <body> start", - "add-custom-html-before-body-end": "Add Custom HTML before </body> end", - "error-undefined": "Something went wrong", - "error-ldap-login": "An error occurred while trying to login", - "display-authentication-method": "Display Authentication Method", - "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Board", - "org-number": "The number of organizations is: ", - "team-number": "The number of teams is: ", - "people-number": "The number of people is: ", - "swimlaneDeletePopup-title": "Delete Swimlane ?", - "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", - "restore-all": "Restore all", - "delete-all": "Delete all", - "loading": "Loading, please wait.", - "previous_as": "last time was", - "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", - "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", - "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", - "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", - "a-dueAt": "modified due time to be", - "a-endAt": "modified ending time to be", - "a-startAt": "modified starting time to be", - "a-receivedAt": "modified received time to be", - "almostdue": "current due time %s is approaching", - "pastdue": "current due time %s is past", - "duenow": "current due time %s is today", - "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", - "act-withDue": "__list__/__card__ due reminders [__board__]", - "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", - "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", - "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", - "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", - "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.", - "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", - "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", - "accounts-allowUserDelete": "Allow users to self delete their account", - "hide-minicard-label-text": "Hide minicard label text", - "show-desktop-drag-handles": "Show desktop drag handles", - "assignee": "Assignee", - "cardAssigneesPopup-title": "Assignee", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card", - "show-on-minicard": "Show on Minicard", - "new": "New", - "editOrgPopup-title": "Edit Organization", - "newOrgPopup-title": "New Organization", - "editTeamPopup-title": "Edit Team", - "newTeamPopup-title": "New Team", - "editUserPopup-title": "Edit User", - "newUserPopup-title": "New User", - "notifications": "Notifications", - "help": "Help", - "view-all": "View All", - "filter-by-unread": "Filter by Unread", - "mark-all-as-read": "Mark all as read", - "remove-all-read": "Remove all read", - "allow-rename": "Allow Rename", - "allowRenamePopup-title": "Allow Rename", - "start-day-of-week": "Set day of the week start", - "monday": "Monday", - "tuesday": "Tuesday", - "wednesday": "Wednesday", - "thursday": "Thursday", - "friday": "Friday", - "saturday": "Saturday", - "sunday": "Sunday", - "status": "Status", - "swimlane": "Swimlane", - "owner": "Owner", - "last-modified-at": "Last modified at", - "last-activity": "Last activity", - "voting": "Voting", - "archived": "Archived", - "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", - "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", - "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", - "task": "Task", - "create-task": "Create Task", - "ok": "OK", - "organizations": "Organizations", - "teams": "Teams", - "displayName": "Display Name", - "shortName": "Short Name", - "autoAddUsersWithDomainName": "Automatically add users with the domain name", - "website": "Website", - "person": "Person", - "my-cards": "My Cards", - "card": "Card", - "list": "List", - "board": "Board", - "context-separator": "/", - "myCardsViewChange-title": "My Cards View", - "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "Boards", - "myCardsViewChange-choice-table": "Table", - "myCardsSortChange-title": "My Cards Sort", - "myCardsSortChangePopup-title": "My Cards Sort", - "myCardsSortChange-choice-board": "By Board", - "myCardsSortChange-choice-dueat": "By Due Date", - "dueCards-title": "Due Cards", - "dueCardsViewChange-title": "Due Cards View", - "dueCardsViewChangePopup-title": "Due Cards View", - "dueCardsViewChange-choice-me": "Me", - "dueCardsViewChange-choice-all": "All Users", - "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", - "broken-cards": "Broken Cards", - "board-title-not-found": "Board '%s' not found.", - "swimlane-title-not-found": "Swimlane '%s' not found.", - "list-title-not-found": "List '%s' not found.", - "label-not-found": "Label '%s' not found.", - "label-color-not-found": "Label color %s not found.", - "user-username-not-found": "Username '%s' not found.", - "comment-not-found": "Card with comment containing text '%s' not found.", - "org-name-not-found": "Organization '%s' not found.", - "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "Search All Boards", - "no-cards-found": "No Cards Found", - "one-card-found": "One Card Found", - "n-cards-found": "%s Cards Found", - "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "board", - "operator-board-abbrev": "b", - "operator-swimlane": "swimlane", - "operator-swimlane-abbrev": "s", - "operator-list": "list", - "operator-list-abbrev": "l", - "operator-label": "label", - "operator-label-abbrev": "#", - "operator-user": "user", - "operator-user-abbrev": "@", - "operator-member": "member", - "operator-member-abbrev": "m", - "operator-assignee": "assignee", - "operator-assignee-abbrev": "a", - "operator-creator": "creator", - "operator-status": "status", - "operator-due": "due", - "operator-created": "created", - "operator-modified": "modified", - "operator-sort": "sort", - "operator-comment": "comment", - "operator-has": "has", - "operator-limit": "limit", - "operator-debug": "debug", - "operator-org": "org", - "operator-team": "team", - "predicate-archived": "archived", - "predicate-open": "open", - "predicate-ended": "ended", - "predicate-all": "all", - "predicate-overdue": "overdue", - "predicate-week": "week", - "predicate-month": "month", - "predicate-quarter": "quarter", - "predicate-year": "year", - "predicate-due": "due", - "predicate-modified": "modified", - "predicate-created": "created", - "predicate-attachment": "attachment", - "predicate-description": "description", - "predicate-checklist": "checklist", - "predicate-start": "start", - "predicate-end": "end", - "predicate-assignee": "assignee", - "predicate-member": "member", - "predicate-public": "public", - "predicate-private": "private", - "predicate-selector": "selector", - "predicate-projection": "projection", - "operator-unknown-error": "%s is not an operator", - "operator-number-expected": "operator __operator__ expected a number, got '__value__'", - "operator-sort-invalid": "sort of '%s' is invalid", - "operator-status-invalid": "'%s' is not a valid status", - "operator-has-invalid": "%s is not a valid existence check", - "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", - "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "Next Page", - "previous-page": "Previous Page", - "heading-notes": "Notes", - "globalSearch-instructions-heading": "Search Instructions", - "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", - "globalSearch-instructions-operators": "Available operators:", - "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", - "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", - "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", - "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", - "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", - "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", - "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", - "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", - "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", - "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", - "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", - "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", - "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", - "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", - "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", - "globalSearch-instructions-notes-1": "Multiple operators may be specified.", - "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", - "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", - "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", - "globalSearch-instructions-notes-4": "Text searches are case insensitive.", - "globalSearch-instructions-notes-5": "By default archived cards are not searched.", - "link-to-search": "Link to this search", - "excel-font": "Arial", - "number": "Number", - "label-colors": "Label Colors", - "label-names": "Label Names", - "archived-at": "archived at", - "sort-cards": "Sort Cards", - "sort-is-on": "Sort is on", - "cardsSortPopup-title": "Sort Cards", - "due-date": "Due Date", - "server-error": "Server Error", - "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", - "title-alphabetically": "Title (Alphabetically)", - "created-at-newest-first": "Created At (Newest First)", - "created-at-oldest-first": "Created At (Oldest First)", - "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", - "move-swimlane": "Move Swimlane", - "moveSwimlanePopup-title": "Move Swimlane", - "custom-field-stringtemplate": "String Template", - "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", - "custom-field-stringtemplate-separator": "Separator (use or   for a space)", - "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", - "creator": "Creator", - "creator-on-minicard": "Creator on minicard", - "filesReportTitle": "Files Report", - "reports": "Reports", - "rulesReportTitle": "Rules Report", - "boardsReportTitle": "Boards Report", - "cardsReportTitle": "Cards Report", - "copy-swimlane": "Copy Swimlane", - "copySwimlanePopup-title": "Copy Swimlane", - "display-card-creator": "Display Card Creator", - "wait-spinner": "Wait Spinner", - "Bounce": "Bounce Wait Spinner", - "Cube": "Cube Wait Spinner", - "Cube-Grid": "Cube-Grid Wait Spinner", - "Dot": "Dot Wait Spinner", - "Double-Bounce": "Double Bounce Wait Spinner", - "Rotateplane": "Rotateplane Wait Spinner", - "Scaleout": "Scaleout Wait Spinner", - "Wave": "Wave Wait Spinner", - "maximize-card": "Maximize Card", - "minimize-card": "Minimize Card", - "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", - "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", - "subject": "Subject", - "details": "Details", - "carbon-copy": "Carbon Copy (Cc:)", - "ticket": "Ticket", - "tickets": "Tickets", - "ticket-number": "Ticket Number", - "open": "Open", - "pending": "Pending", - "closed": "Closed", - "resolved": "Resolved", - "cancelled": "Cancelled", - "history": "History", - "request": "Request", - "requests": "Requests", - "help-request": "Help Request", - "editCardSortOrderPopup-title": "Change Sorting", - "cardDetailsPopup-title": "Card Details", - "add-teams": "Add teams", - "add-teams-label": "Added teams are displayed below:", - "remove-team-from-table": "Are you sure you want to remove this team from the board ?", - "confirm-btn": "Confirm", - "remove-btn": "Remove", - "filter-card-title-label": "Filter by card title", - "invite-people-success": "Invitation to register sent with success", - "invite-people-error": "Error while sending invitation to register", - "can-invite-if-same-mailDomainName": "Email domain name", - "to-create-teams-contact-admin": "To create teams, please contact the administrator.", - "Node_heap_total_heap_size": "Node heap: total heap size", - "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", - "Node_heap_total_physical_size": "Node heap: total physical size", - "Node_heap_total_available_size": "Node heap: total available size", - "Node_heap_used_heap_size": "Node heap: used heap size", - "Node_heap_heap_size_limit": "Node heap: heap size limit", - "Node_heap_malloced_memory": "Node heap: malloced memory", - "Node_heap_peak_malloced_memory": "Node heap: peak malloced memory", - "Node_heap_does_zap_garbage": "Node heap: does zap garbage", - "Node_heap_number_of_native_contexts": "Node heap: number of native contexts", - "Node_heap_number_of_detached_contexts": "Node heap: number of detached contexts", - "Node_memory_usage_rss": "Node memory usage: resident set size", - "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", - "Node_memory_usage_heap_used": "Node memory usage: actual memory used", - "Node_memory_usage_external": "Node memory usage: external", - "add-organizations": "Add organizations", - "add-organizations-label": "Added organizations are displayed below:", - "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", - "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", - "custom-legal-notice-link-url": "Custom legal notice page URL", - "acceptance_of_our_legalNotice": "By continuing, you accept our", - "legalNotice": "legal notice", - "copied": "Copied!", - "checklistActionsPopup-title": "Checklist Actions", - "moveChecklist": "Move Checklist", - "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", - "copyChecklist": "Copy Checklist", - "copyChecklistPopup-title": "Copy Checklist", - "card-show-lists": "Card Show Lists", - "subtaskActionsPopup-title": "Subtask Actions", - "attachmentActionsPopup-title": "Attachment Actions", - "attachment-move-storage-fs": "Move attachment to filesystem", - "attachment-move-storage-gridfs": "Move attachment to GridFS", - "attachment-move-storage-s3": "Move attachment to S3", - "attachment-move": "Move Attachment", - "move-all-attachments-to-fs": "Move all attachments to filesystem", - "move-all-attachments-to-gridfs": "Move all attachments to GridFS", - "move-all-attachments-to-s3": "Move all attachments to S3", - "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", - "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", - "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", - "path": "Path", - "version-name": "Version-Name", - "size": "Size", - "storage": "Storage", - "action": "Action", - "board-title": "Board Title", - "attachmentRenamePopup-title": "Rename", - "uploading": "Uploading", - "remaining_time": "Remaining time", - "speed": "Speed", - "progress": "Progress", - "password-again": "Password (again)", - "if-you-already-have-an-account": "If you already have an account", - "register": "Register", - "forgot-password": "Forgot password", - "minicardDetailsActionsPopup-title": "Card Details", - "Mongo_sessions_count": "Mongo sessions count", - "change-visibility": "Change Visibility", - "max-upload-filesize": "Max upload filesize in bytes:", - "allowed-upload-filetypes": "Allowed upload filetypes:", - "max-avatar-filesize": "Max avatar filesize in bytes:", - "allowed-avatar-filetypes": "Allowed avatar filetypes:", - "invalid-file": "If filename is invalid, upload or rename is cancelled.", - "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", - "drag-board": "Drag board", - "translation-number": "The number of custom translation strings is:", - "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", - "newTranslationPopup-title": "New custom translation string", - "editTranslationPopup-title": "Edit custom translation string", - "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Translation", - "text": "Text", - "translation-text": "Translation text", - "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" -} diff --git a/imports/i18n/data/en_TR.i18n.json b/imports/i18n/data/en_TR.i18n.json deleted file mode 100644 index 78b62d375..000000000 --- a/imports/i18n/data/en_TR.i18n.json +++ /dev/null @@ -1,1272 +0,0 @@ -{ - "accept": "Accept", - "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "created board __board__", - "act-createSwimlane": "created swimlane __swimlane__ to board __board__", - "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-createCustomField": "created custom field __customField__ at board __board__", - "act-deleteCustomField": "deleted custom field __customField__ at board __board__", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createList": "added list __list__ to board __board__", - "act-addBoardMember": "added member __member__ to board __board__", - "act-archivedBoard": "Board __board__ moved to Archive", - "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", - "act-importBoard": "imported board __board__", - "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", - "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", - "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-removeBoardMember": "removed member __member__ from board __board__", - "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-withBoardTitle": "__board__", - "act-withCardTitle": "[__board__] __card__", - "actions": "Actions", - "activities": "Activities", - "activity": "Activity", - "activity-added": "added %s to %s", - "activity-archived": "%s moved to Archive", - "activity-attached": "attached %s to %s", - "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", - "activity-customfield-created": "created custom field %s", - "activity-excluded": "excluded %s from %s", - "activity-imported": "imported %s into %s from %s", - "activity-imported-board": "imported %s from %s", - "activity-joined": "joined %s", - "activity-moved": "moved %s from %s to %s", - "activity-on": "on %s", - "activity-removed": "removed %s from %s", - "activity-sent": "sent %s to %s", - "activity-unjoined": "unjoined %s", - "activity-subtask-added": "added subtask to %s", - "activity-checked-item": "checked %s in checklist %s of %s", - "activity-unchecked-item": "unchecked %s in checklist %s of %s", - "activity-checklist-added": "added checklist to %s", - "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist %s of %s", - "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", - "activity-checklist-item-added": "added checklist item to '%s' in %s", - "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", - "add": "Add", - "activity-checked-item-card": "checked %s in checklist %s", - "activity-unchecked-item-card": "unchecked %s in checklist %s", - "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "activity-checklist-uncompleted-card": "uncompleted the checklist %s", - "activity-editComment": "edited comment %s", - "activity-deleteComment": "deleted comment %s", - "activity-receivedDate": "edited received date to %s of %s", - "activity-startDate": "edited start date to %s of %s", - "activity-dueDate": "edited due date to %s of %s", - "activity-endDate": "edited end date to %s of %s", - "add-attachment": "Add Attachment", - "add-board": "Add Board", - "add-template": "Add Template", - "add-card": "Add Card", - "add-card-to-top-of-list": "Add Card to Top of List", - "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Set Swimlane Height", - "set-swimlane-height": "Set Swimlane Height", - "set-swimlane-height-value": "Swimlane Height (pixels)", - "swimlane-height-error-message": "Swimlane height must be a positive integer", - "add-swimlane": "Add Swimlane", - "add-subtask": "Add Subtask", - "add-checklist": "Add Checklist", - "add-checklist-item": "Add an item to checklist", - "close-add-checklist-item": "Close add an item to checklist form", - "close-edit-checklist-item": "Close edit an item to checklist form", - "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "Add cover image to minicard", - "add-label": "Add Label", - "add-list": "Add List", - "add-after-list": "Add After List", - "add-members": "Add Members", - "added": "Added", - "addMemberPopup-title": "Members", - "memberPopup-title": "Member Settings", - "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", - "app-try-reconnect": "Try to reconnect.", - "archive": "Move to Archive", - "archive-all": "Move All to Archive", - "archive-board": "Move Board to Archive", - "archive-card": "Move Card to Archive", - "archive-list": "Move List to Archive", - "archive-swimlane": "Move Swimlane to Archive", - "archive-selection": "Move selection to Archive", - "archiveBoardPopup-title": "Move Board to Archive?", - "archived-items": "Archive", - "archived-boards": "Boards in Archive", - "restore-board": "Restore Board", - "no-archived-boards": "No Boards in Archive.", - "archives": "Archive", - "template": "Template", - "templates": "Templates", - "template-container": "Template Container", - "add-template-container": "Add Template Container", - "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 (__size__ max)", - "back": "Back", - "board-change-color": "Change color", - "board-change-background-image": "Change Background Image", - "board-background-image-url": "Background Image URL", - "add-background-image": "Add Background Image", - "remove-background-image": "Remove Background Image", - "show-at-all-boards-page" : "Show at All Boards page", - "board-info-on-my-boards" : "All Boards Settings", - "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", - "boardInfoOnMyBoards-title": "All Boards Settings", - "show-card-counter-per-list": "Show card count per list", - "show-board_members-avatar": "Show Board members avatars", - "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>.", - "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", - "boardChangeColorPopup-title": "Change Board Background", - "boardChangeBackgroundImagePopup-title": "Change Background Image", - "allBoardsChangeColorPopup-title": "Change color", - "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", - "boardChangeTitlePopup-title": "Rename Board", - "boardChangeVisibilityPopup-title": "Change Visibility", - "boardChangeWatchPopup-title": "Change Watch", - "boardMenuPopup-title": "Board Settings", - "allBoardsMenuPopup-title": "Settings", - "boardChangeViewPopup-title": "Board View", - "boards": "Boards", - "board-view": "Board View", - "board-view-cal": "Calendar", - "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Collapse", - "board-view-gantt": "Gantt", - "board-view-lists": "Lists", - "bucket-example": "Like “Bucket List” for example", - "cancel": "Cancel", - "card-archived": "This card is moved to Archive.", - "board-archived": "This board is moved to Archive.", - "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 move a card to Archive to remove it from the board and preserve the activity.", - "card-archive-pop": "Card will not be visible at this list after archiving card.", - "card-archive-suggest-cancel": "You can later restore card from Archive.", - "card-due": "Due", - "card-due-on": "Due on", - "card-spent": "Spent Time", - "card-edit-attachments": "Edit attachments", - "card-edit-custom-fields": "Edit custom fields", - "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", - "cardCustomField-datePopup-title": "Change date", - "cardCustomFieldsPopup-title": "Edit custom fields", - "cardStartVotingPopup-title": "Start a vote", - "positiveVoteMembersPopup-title": "Proponents", - "negativeVoteMembersPopup-title": "Opponents", - "card-edit-voting": "Edit voting", - "editVoteEndDatePopup-title": "Change vote end date", - "allowNonBoardMembers": "Allow all logged in users", - "vote-question": "Voting question", - "vote-public": "Show who voted what", - "vote-for-it": "for it", - "vote-against": "against", - "deleteVotePopup-title": "Delete vote?", - "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", - "cardStartPlanningPokerPopup-title": "Start a Planning Poker", - "card-edit-planning-poker": "Edit Planning Poker", - "editPokerEndDatePopup-title": "Change Planning Poker vote end date", - "poker-question": "Planning Poker", - "poker-one": "1", - "poker-two": "2", - "poker-three": "3", - "poker-five": "5", - "poker-eight": "8", - "poker-thirteen": "13", - "poker-twenty": "20", - "poker-forty": "40", - "poker-oneHundred": "100", - "poker-unsure": "?", - "poker-finish": "Finish", - "poker-result-votes": "Votes", - "poker-result-who": "Who", - "poker-replay": "Replay", - "set-estimation": "Set Estimation", - "deletePokerPopup-title": "Delete planning poker?", - "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", - "cardDeletePopup-title": "Delete Card?", - "cardArchivePopup-title": "Archive Card?", - "cardDetailsActionsPopup-title": "Card Actions", - "cardLabelsPopup-title": "Labels", - "cardMembersPopup-title": "Members", - "cardMorePopup-title": "More", - "cardTemplatePopup-title": "Create template", - "cards": "Cards", - "cards-count": "Cards", - "cards-count-one": "Card", - "casSignIn": "Sign In with CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", - "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", - "subtasks": "Subtasks", - "checklists": "Checklists", - "click-to-star": "Click to star this board.", - "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", - "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 “Archive” button from the home header.", - "close-card": "Close Card", - "color-black": "black", - "color-blue": "blue", - "color-crimson": "crimson", - "color-darkgreen": "darkgreen", - "color-gold": "gold", - "color-gray": "gray", - "color-green": "green", - "color-indigo": "indigo", - "color-lime": "lime", - "color-magenta": "magenta", - "color-mistyrose": "mistyrose", - "color-navy": "navy", - "color-orange": "orange", - "color-paleturquoise": "paleturquoise", - "color-peachpuff": "peachpuff", - "color-pink": "pink", - "color-plum": "plum", - "color-purple": "purple", - "color-red": "red", - "color-saddlebrown": "saddlebrown", - "color-silver": "silver", - "color-sky": "sky", - "color-slateblue": "slateblue", - "color-white": "white", - "color-yellow": "yellow", - "unset-color": "Unset", - "comments": "Comments", - "comment": "Comment", - "comment-placeholder": "Write Comment", - "comment-only": "Comment only", - "comment-only-desc": "Can comment on cards only.", - "comment-delete": "Are you sure you want to delete the comment?", - "deleteCommentPopup-title": "Delete comment?", - "no-comments": "No comments", - "no-comments-desc": "Can not see comments and activities.", - "worker": "Worker", - "worker-desc": "Can only move cards, assign itself to card and comment.", - "computer": "Computer", - "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", - "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", - "subtaskDeletePopup-title": "Delete Subtask?", - "checklistDeletePopup-title": "Delete Checklist?", - "copy-card-link-to-clipboard": "Copy card link to clipboard", - "copy-text-to-clipboard": "Copy text to clipboard", - "linkCardPopup-title": "Link Card", - "searchElementPopup-title": "Search", - "copyCardPopup-title": "Copy Card", - "copyManyCardsPopup-title": "Copy Template to Many Cards", - "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", - "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", - "create": "Create", - "createBoardPopup-title": "Create Board", - "chooseBoardSourcePopup-title": "Import board", - "createLabelPopup-title": "Create Label", - "createCustomField": "Create Field", - "createCustomFieldPopup-title": "Create Field", - "current": "current", - "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", - "custom-field-checkbox": "Checkbox", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", - "custom-field-date": "Date", - "custom-field-dropdown": "Dropdown List", - "custom-field-dropdown-none": "(none)", - "custom-field-dropdown-options": "List Options", - "custom-field-dropdown-options-placeholder": "Press enter to add more options", - "custom-field-dropdown-unknown": "(unknown)", - "custom-field-number": "Number", - "custom-field-text": "Text", - "custom-fields": "Custom Fields", - "date": "Date", - "decline": "Decline", - "default-avatar": "Default avatar", - "delete": "Delete", - "deleteCustomFieldPopup-title": "Delete Custom Field?", - "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", - "editCustomFieldPopup-title": "Edit Field", - "addReactionPopup-title": "Add reaction", - "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-vertical-scrollbars": "Enable vertical scrollbars", - "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-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) 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-orgname-taken": "This organization name is already taken", - "error-teamname-taken": "This team name is already taken", - "error-email-taken": "Email has already been taken", - "export-board": "Export board", - "export-board-json": "Export board to JSON", - "export-board-csv": "Export board to CSV", - "export-board-tsv": "Export board to TSV", - "export-board-excel": "Export board to Excel", - "user-can-not-export-excel": "User can not export Excel", - "export-board-html": "Export board to HTML", - "export-card": "Export card", - "export-card-pdf": "Export card to PDF", - "user-can-not-export-card-to-pdf": "User can not export card to PDF", - "exportBoardPopup-title": "Export board", - "exportCardPopup-title": "Export card", - "sort": "Sort", - "sorted": "Sorted", - "remove-sort": "Remove sort", - "sort-desc": "Click to Sort List", - "list-sort-by": "Sort the List By:", - "list-label-modifiedAt": "Last Access Time", - "list-label-title": "Name of the List", - "list-label-sort": "Your Manual Order", - "list-label-short-modifiedAt": "(L)", - "list-label-short-title": "(N)", - "list-label-short-sort": "(M)", - "filter": "Filter", - "filter-cards": "Filter Cards or Lists", - "filter-dates-label": "Filter by date", - "filter-no-due-date": "No due date", - "filter-overdue": "Overdue", - "filter-due-today": "Due today", - "filter-due-this-week": "Due this week", - "filter-due-next-week": "Due next week", - "filter-due-tomorrow": "Due tomorrow", - "list-filter-label": "Filter List by Title", - "filter-clear": "Clear filter", - "filter-labels-label": "Filter by label", - "filter-no-label": "No label", - "filter-member-label": "Filter by member", - "filter-no-member": "No member", - "filter-assignee-label": "Filter by assignee", - "filter-no-assignee": "No assignee", - "filter-custom-fields-label": "Filter by Custom Fields", - "filter-no-custom-fields": "No Custom Fields", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", - "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", - "other-filters-label": "Other Filters", - "advanced-filter-label": "Advanced Filter", - "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", - "fullname": "Full Name", - "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", - "headerBarCreateBoardPopup-title": "Create Board", - "home": "Home", - "import": "Import", - "impersonate-user": "Impersonate user", - "link": "Link", - "import-board": "import board", - "import-board-c": "Import board", - "import-board-title-trello": "Import board from Trello", - "import-board-title-wekan": "Import board from previous export", - "import-board-title-csv": "Import board from CSV/TSV", - "from-trello": "From Trello", - "from-wekan": "From previous export", - "from-csv": "From CSV/TSV", - "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", - "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", - "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", - "import-json-placeholder": "Paste your valid JSON data here", - "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", - "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", - "import-show-user-mapping": "Review members mapping", - "import-user-select": "Pick your existing user you want to use as this member", - "importMapMembersAddPopup-title": "Select member", - "info": "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": "Move all cards in this list to Archive", - "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", - "list-move-cards": "Move all cards in this list", - "list-select-cards": "Select all cards in this list", - "set-color-list": "Set Color", - "listActionPopup-title": "List Actions", - "settingsUserPopup-title": "User Settings", - "settingsTeamPopup-title": "Team Settings", - "settingsOrgPopup-title": "Organization Settings", - "swimlaneActionPopup-title": "Swimlane Actions", - "swimlaneAddPopup-title": "Add a Swimlane below", - "listImportCardPopup-title": "Import a Trello card", - "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", - "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 move a list to Archive to remove it from the board and preserve the activity.", - "lists": "Lists", - "swimlanes": "Swimlanes", - "log-out": "Log Out", - "log-in": "Log In", - "loginPopup-title": "Log In", - "memberMenuPopup-title": "Member Settings", - "members": "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-label": "Set label for selection", - "multi-selection-member": "Set member for 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 cards in Archive.", - "no-archived-lists": "No lists in Archive.", - "no-archived-swimlanes": "No swimlanes in Archive.", - "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 creator 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 image from minicard", - "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", - "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", - "rescue-card-description-dialogue": "Overwrite current card description with your changes?", - "save": "Save", - "search": "Search", - "rules": "Rules", - "search-cards": "Search from card/list titles, descriptions and custom fields on this board", - "search-example": "Write text you search and press Enter", - "select-color": "Select Color", - "select-board": "Select Board", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", - "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-filter-my-assigned-cards": "Filter my assigned cards", - "shortcut-show-shortcuts": "Bring up this shortcuts list", - "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-searchbar": "Toggle Search 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", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", - "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", - "remove-labels-multiselect": "Multi-Selection removes labels 1-9", - "tracking": "Tracking", - "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", - "type": "Type", - "unassign-member": "Unassign member", - "unsaved-description": "You have an unsaved description.", - "unwatch": "Unwatch", - "upload": "Upload", - "upload-avatar": "Upload an avatar", - "uploaded-avatar": "Uploaded an avatar", - "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", - "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", - "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", - "custom-login-logo-image-url": "Custom Login Logo Image URL", - "custom-login-logo-link-url": "Custom Login Logo Link URL", - "custom-help-link-url": "Custom Help Link URL", - "text-below-custom-login-logo": "Text below Custom Login Logo", - "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", - "username": "Username", - "import-usernames": "Import Usernames", - "view-it": "View it", - "warn-list-archived": "warning: this card is in an list at Archive", - "watch": "Watch", - "watching": "Watching", - "watching-info": "You will be notified of any change in this board", - "welcome-board": "Welcome Board", - "welcome-swimlane": "Milestone 1", - "welcome-list1": "Basics", - "welcome-list2": "Advanced", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", - "what-to-do": "What do you want to do?", - "wipLimitErrorPopup-title": "Invalid WIP Limit", - "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", - "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", - "admin-panel": "Admin Panel", - "settings": "Settings", - "people": "People", - "registration": "Registration", - "disable-self-registration": "Disable Self-Registration", - "disable-forgot-password": "Disable Forgot Password", - "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", - "email-smtp-test-subject": "SMTP Test Email", - "email-smtp-test-text": "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.", - "webhook-title": "Webhook Name", - "webhook-token": "Token (Optional for Authentication)", - "outgoing-webhooks": "Outgoing Webhooks", - "bidirectional-webhooks": "Two-Way Webhooks", - "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "Card Title Filter", - "disable-webhook": "Disable This Webhook", - "global-webhook": "Global Webhooks", - "new-outgoing-webhook": "New Outgoing Webhook", - "no-name": "(Unknown)", - "Node_version": "Node version", - "Meteor_version": "Meteor version", - "MongoDB_version": "MongoDB version", - "MongoDB_storage_engine": "MongoDB storage engine", - "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", - "OS_Arch": "OS Arch", - "OS_Cpus": "OS CPU Count", - "OS_Freemem": "OS Free Memory", - "OS_Loadavg": "OS Load Average", - "OS_Platform": "OS Platform", - "OS_Release": "OS Release", - "OS_Totalmem": "OS Total Memory", - "OS_Type": "OS Type", - "OS_Uptime": "OS Uptime", - "days": "days", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "show-field-on-card": "Show this field on card", - "automatically-field-on-card": "Add field to new cards", - "always-field-on-card": "Add field to all cards", - "showLabel-field-on-card": "Show field label on minicard", - "showSum-field-on-list": "Show sum of fields at top of list", - "yes": "Yes", - "no": "No", - "accounts": "Accounts", - "accounts-allowEmailChange": "Allow Email Change", - "accounts-allowUserNameChange": "Allow Username Change", - "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", - "tableVisibilityMode" : "Boards visibility", - "createdAt": "Created at", - "modifiedAt": "Modified at", - "verified": "Verified", - "active": "Active", - "card-received": "Received", - "card-received-on": "Received on", - "card-end": "End", - "card-end-on": "Ends on", - "editCardReceivedDatePopup-title": "Change received date", - "editCardEndDatePopup-title": "Change end date", - "setCardColorPopup-title": "Set color", - "setCardActionsColorPopup-title": "Choose a color", - "setSwimlaneColorPopup-title": "Choose a color", - "setListColorPopup-title": "Choose a color", - "assigned-by": "Assigned By", - "requested-by": "Requested By", - "card-sorting-by-number": "Card sorting by number", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "defaultdefault": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "card-settings": "Card Settings", - "minicard-settings": "Minicard Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "boardCardSettingsPopup-title": "Card Settings", - "boardMinicardSettingsPopup-title": "Minicard Settings", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", - "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "Cover image on minicard", - "badge-attachment-on-minicard": "Count of attachments on minicard", - "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent", - "activity-added-label": "added label '%s' to %s", - "activity-removed-label": "removed label '%s' from %s", - "activity-delete-attach": "deleted an attachment from %s", - "activity-added-label-card": "added label '%s'", - "activity-removed-label-card": "removed label '%s'", - "activity-delete-attach-card": "deleted an attachment", - "activity-set-customfield": "set custom field '%s' to '%s' in %s", - "activity-unset-customfield": "unset custom field '%s' in %s", - "r-rule": "Rule", - "r-add-trigger": "Add trigger", - "r-add-action": "Add action", - "r-board-rules": "Board rules", - "r-add-rule": "Add rule", - "r-view-rule": "View rule", - "r-delete-rule": "Delete rule", - "r-new-rule-name": "New rule title", - "r-no-rules": "No rules", - "r-trigger": "Trigger", - "r-action": "Action", - "r-when-a-card": "When a card", - "r-is": "is", - "r-is-moved": "is moved", - "r-added-to": "Added to", - "r-removed-from": "Removed from", - "r-the-board": "the board", - "r-list": "list", - "set-filter": "Set Filter", - "r-moved-to": "Moved to", - "r-moved-from": "Moved from", - "r-archived": "Moved to Archive", - "r-unarchived": "Restored from Archive", - "r-a-card": "a card", - "r-when-a-label-is": "When a label is", - "r-when-the-label": "When the label", - "r-list-name": "list name", - "r-when-a-member": "When a member is", - "r-when-the-member": "When the member", - "r-name": "name", - "r-when-a-attach": "When an attachment", - "r-when-a-checklist": "When a checklist is", - "r-when-the-checklist": "When the checklist", - "r-completed": "Completed", - "r-made-incomplete": "Made incomplete", - "r-when-a-item": "When a checklist item is", - "r-when-the-item": "When the checklist item", - "r-checked": "Checked", - "r-unchecked": "Unchecked", - "r-move-card-to": "Move card to", - "r-top-of": "Top of", - "r-bottom-of": "Bottom of", - "r-its-list": "its list", - "r-archive": "Move to Archive", - "r-unarchive": "Restore from Archive", - "r-card": "card", - "r-add": "Add", - "r-remove": "Remove", - "r-label": "label", - "r-member": "member", - "r-remove-all": "Remove all members from the card", - "r-set-color": "Set color to", - "r-checklist": "checklist", - "r-check-all": "Check all", - "r-uncheck-all": "Uncheck all", - "r-items-check": "items of checklist", - "r-check": "Check", - "r-uncheck": "Uncheck", - "r-item": "item", - "r-of-checklist": "of checklist", - "r-send-email": "Send an email", - "r-to": "to", - "r-of": "of", - "r-subject": "subject", - "r-rule-details": "Rule details", - "r-d-move-to-top-gen": "Move card to top of its list", - "r-d-move-to-top-spec": "Move card to top of list", - "r-d-move-to-bottom-gen": "Move card to bottom of its list", - "r-d-move-to-bottom-spec": "Move card to bottom of list", - "r-d-send-email": "Send email", - "r-d-send-email-to": "to", - "r-d-send-email-subject": "subject", - "r-d-send-email-message": "message", - "r-d-archive": "Move card to Archive", - "r-d-unarchive": "Restore card from Archive", - "r-d-add-label": "Add label", - "r-d-remove-label": "Remove label", - "r-create-card": "Create new card", - "r-in-list": "in list", - "r-in-swimlane": "in swimlane", - "r-d-add-member": "Add member", - "r-d-remove-member": "Remove member", - "r-d-remove-all-member": "Remove all member", - "r-d-check-all": "Check all items of a list", - "r-d-uncheck-all": "Uncheck all items of a list", - "r-d-check-one": "Check item", - "r-d-uncheck-one": "Uncheck item", - "r-d-check-of-list": "of checklist", - "r-d-add-checklist": "Add checklist", - "r-d-remove-checklist": "Remove checklist", - "r-by": "by", - "r-add-checklist": "Add checklist", - "r-with-items": "with items", - "r-items-list": "item1,item2,item3", - "r-add-swimlane": "Add swimlane", - "r-swimlane-name": "swimlane name", - "r-board-note": "Note: leave a field empty to match every possible value. ", - "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", - "r-when-a-card-is-moved": "When a card is moved to another list", - "r-set": "Set", - "r-update": "Update", - "r-datefield": "date field", - "r-df-start-at": "start", - "r-df-due-at": "due", - "r-df-end-at": "end", - "r-df-received-at": "received", - "r-to-current-datetime": "to current date/time", - "r-remove-value-from": "Remove value from", - "r-link-card": "Link card to", - "ldap": "LDAP", - "oauth2": "OAuth2", - "cas": "CAS", - "authentication-method": "Authentication method", - "authentication-type": "Authentication type", - "custom-product-name": "Custom Product Name", - "layout": "Layout", - "hide-logo": "Hide Logo", - "hide-card-counter-list": "Hide card counter list on All Boards", - "hide-board-member-list": "Hide board member list on All Boards", - "add-custom-html-after-body-start": "Add Custom HTML after <body> start", - "add-custom-html-before-body-end": "Add Custom HTML before </body> end", - "error-undefined": "Something went wrong", - "error-ldap-login": "An error occurred while trying to login", - "display-authentication-method": "Display Authentication Method", - "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Board", - "org-number": "The number of organizations is: ", - "team-number": "The number of teams is: ", - "people-number": "The number of people is: ", - "swimlaneDeletePopup-title": "Delete Swimlane ?", - "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", - "restore-all": "Restore all", - "delete-all": "Delete all", - "loading": "Loading, please wait.", - "previous_as": "last time was", - "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", - "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", - "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", - "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", - "a-dueAt": "modified due time to be", - "a-endAt": "modified ending time to be", - "a-startAt": "modified starting time to be", - "a-receivedAt": "modified received time to be", - "almostdue": "current due time %s is approaching", - "pastdue": "current due time %s is past", - "duenow": "current due time %s is today", - "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", - "act-withDue": "__list__/__card__ due reminders [__board__]", - "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", - "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", - "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", - "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", - "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.", - "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", - "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", - "accounts-allowUserDelete": "Allow users to self delete their account", - "hide-minicard-label-text": "Hide minicard label text", - "show-desktop-drag-handles": "Show desktop drag handles", - "assignee": "Assignee", - "cardAssigneesPopup-title": "Assignee", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card", - "show-on-minicard": "Show on Minicard", - "new": "New", - "editOrgPopup-title": "Edit Organization", - "newOrgPopup-title": "New Organization", - "editTeamPopup-title": "Edit Team", - "newTeamPopup-title": "New Team", - "editUserPopup-title": "Edit User", - "newUserPopup-title": "New User", - "notifications": "Notifications", - "help": "Help", - "view-all": "View All", - "filter-by-unread": "Filter by Unread", - "mark-all-as-read": "Mark all as read", - "remove-all-read": "Remove all read", - "allow-rename": "Allow Rename", - "allowRenamePopup-title": "Allow Rename", - "start-day-of-week": "Set day of the week start", - "monday": "Monday", - "tuesday": "Tuesday", - "wednesday": "Wednesday", - "thursday": "Thursday", - "friday": "Friday", - "saturday": "Saturday", - "sunday": "Sunday", - "status": "Status", - "swimlane": "Swimlane", - "owner": "Owner", - "last-modified-at": "Last modified at", - "last-activity": "Last activity", - "voting": "Voting", - "archived": "Archived", - "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", - "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", - "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", - "task": "Task", - "create-task": "Create Task", - "ok": "OK", - "organizations": "Organizations", - "teams": "Teams", - "displayName": "Display Name", - "shortName": "Short Name", - "autoAddUsersWithDomainName": "Automatically add users with the domain name", - "website": "Website", - "person": "Person", - "my-cards": "My Cards", - "card": "Card", - "list": "List", - "board": "Board", - "context-separator": "/", - "myCardsViewChange-title": "My Cards View", - "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "Boards", - "myCardsViewChange-choice-table": "Table", - "myCardsSortChange-title": "My Cards Sort", - "myCardsSortChangePopup-title": "My Cards Sort", - "myCardsSortChange-choice-board": "By Board", - "myCardsSortChange-choice-dueat": "By Due Date", - "dueCards-title": "Due Cards", - "dueCardsViewChange-title": "Due Cards View", - "dueCardsViewChangePopup-title": "Due Cards View", - "dueCardsViewChange-choice-me": "Me", - "dueCardsViewChange-choice-all": "All Users", - "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", - "broken-cards": "Broken Cards", - "board-title-not-found": "Board '%s' not found.", - "swimlane-title-not-found": "Swimlane '%s' not found.", - "list-title-not-found": "List '%s' not found.", - "label-not-found": "Label '%s' not found.", - "label-color-not-found": "Label color %s not found.", - "user-username-not-found": "Username '%s' not found.", - "comment-not-found": "Card with comment containing text '%s' not found.", - "org-name-not-found": "Organization '%s' not found.", - "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "Search All Boards", - "no-cards-found": "No Cards Found", - "one-card-found": "One Card Found", - "n-cards-found": "%s Cards Found", - "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "board", - "operator-board-abbrev": "b", - "operator-swimlane": "swimlane", - "operator-swimlane-abbrev": "s", - "operator-list": "list", - "operator-list-abbrev": "l", - "operator-label": "label", - "operator-label-abbrev": "#", - "operator-user": "user", - "operator-user-abbrev": "@", - "operator-member": "member", - "operator-member-abbrev": "m", - "operator-assignee": "assignee", - "operator-assignee-abbrev": "a", - "operator-creator": "creator", - "operator-status": "status", - "operator-due": "due", - "operator-created": "created", - "operator-modified": "modified", - "operator-sort": "sort", - "operator-comment": "comment", - "operator-has": "has", - "operator-limit": "limit", - "operator-debug": "debug", - "operator-org": "org", - "operator-team": "team", - "predicate-archived": "archived", - "predicate-open": "open", - "predicate-ended": "ended", - "predicate-all": "all", - "predicate-overdue": "overdue", - "predicate-week": "week", - "predicate-month": "month", - "predicate-quarter": "quarter", - "predicate-year": "year", - "predicate-due": "due", - "predicate-modified": "modified", - "predicate-created": "created", - "predicate-attachment": "attachment", - "predicate-description": "description", - "predicate-checklist": "checklist", - "predicate-start": "start", - "predicate-end": "end", - "predicate-assignee": "assignee", - "predicate-member": "member", - "predicate-public": "public", - "predicate-private": "private", - "predicate-selector": "selector", - "predicate-projection": "projection", - "operator-unknown-error": "%s is not an operator", - "operator-number-expected": "operator __operator__ expected a number, got '__value__'", - "operator-sort-invalid": "sort of '%s' is invalid", - "operator-status-invalid": "'%s' is not a valid status", - "operator-has-invalid": "%s is not a valid existence check", - "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", - "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "Next Page", - "previous-page": "Previous Page", - "heading-notes": "Notes", - "globalSearch-instructions-heading": "Search Instructions", - "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", - "globalSearch-instructions-operators": "Available operators:", - "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", - "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", - "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", - "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", - "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", - "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", - "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", - "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", - "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", - "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", - "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", - "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", - "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", - "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", - "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", - "globalSearch-instructions-notes-1": "Multiple operators may be specified.", - "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", - "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", - "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", - "globalSearch-instructions-notes-4": "Text searches are case insensitive.", - "globalSearch-instructions-notes-5": "By default archived cards are not searched.", - "link-to-search": "Link to this search", - "excel-font": "Arial", - "number": "Number", - "label-colors": "Label Colors", - "label-names": "Label Names", - "archived-at": "archived at", - "sort-cards": "Sort Cards", - "sort-is-on": "Sort is on", - "cardsSortPopup-title": "Sort Cards", - "due-date": "Due Date", - "server-error": "Server Error", - "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", - "title-alphabetically": "Title (Alphabetically)", - "created-at-newest-first": "Created At (Newest First)", - "created-at-oldest-first": "Created At (Oldest First)", - "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", - "move-swimlane": "Move Swimlane", - "moveSwimlanePopup-title": "Move Swimlane", - "custom-field-stringtemplate": "String Template", - "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", - "custom-field-stringtemplate-separator": "Separator (use or   for a space)", - "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", - "creator": "Creator", - "creator-on-minicard": "Creator on minicard", - "filesReportTitle": "Files Report", - "reports": "Reports", - "rulesReportTitle": "Rules Report", - "boardsReportTitle": "Boards Report", - "cardsReportTitle": "Cards Report", - "copy-swimlane": "Copy Swimlane", - "copySwimlanePopup-title": "Copy Swimlane", - "display-card-creator": "Display Card Creator", - "wait-spinner": "Wait Spinner", - "Bounce": "Bounce Wait Spinner", - "Cube": "Cube Wait Spinner", - "Cube-Grid": "Cube-Grid Wait Spinner", - "Dot": "Dot Wait Spinner", - "Double-Bounce": "Double Bounce Wait Spinner", - "Rotateplane": "Rotateplane Wait Spinner", - "Scaleout": "Scaleout Wait Spinner", - "Wave": "Wave Wait Spinner", - "maximize-card": "Maximize Card", - "minimize-card": "Minimize Card", - "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", - "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", - "subject": "Subject", - "details": "Details", - "carbon-copy": "Carbon Copy (Cc:)", - "ticket": "Ticket", - "tickets": "Tickets", - "ticket-number": "Ticket Number", - "open": "Open", - "pending": "Pending", - "closed": "Closed", - "resolved": "Resolved", - "cancelled": "Cancelled", - "history": "History", - "request": "Request", - "requests": "Requests", - "help-request": "Help Request", - "editCardSortOrderPopup-title": "Change Sorting", - "cardDetailsPopup-title": "Card Details", - "add-teams": "Add teams", - "add-teams-label": "Added teams are displayed below:", - "remove-team-from-table": "Are you sure you want to remove this team from the board ?", - "confirm-btn": "Confirm", - "remove-btn": "Remove", - "filter-card-title-label": "Filter by card title", - "invite-people-success": "Invitation to register sent with success", - "invite-people-error": "Error while sending invitation to register", - "can-invite-if-same-mailDomainName": "Email domain name", - "to-create-teams-contact-admin": "To create teams, please contact the administrator.", - "Node_heap_total_heap_size": "Node heap: total heap size", - "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", - "Node_heap_total_physical_size": "Node heap: total physical size", - "Node_heap_total_available_size": "Node heap: total available size", - "Node_heap_used_heap_size": "Node heap: used heap size", - "Node_heap_heap_size_limit": "Node heap: heap size limit", - "Node_heap_malloced_memory": "Node heap: malloced memory", - "Node_heap_peak_malloced_memory": "Node heap: peak malloced memory", - "Node_heap_does_zap_garbage": "Node heap: does zap garbage", - "Node_heap_number_of_native_contexts": "Node heap: number of native contexts", - "Node_heap_number_of_detached_contexts": "Node heap: number of detached contexts", - "Node_memory_usage_rss": "Node memory usage: resident set size", - "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", - "Node_memory_usage_heap_used": "Node memory usage: actual memory used", - "Node_memory_usage_external": "Node memory usage: external", - "add-organizations": "Add organizations", - "add-organizations-label": "Added organizations are displayed below:", - "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", - "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", - "custom-legal-notice-link-url": "Custom legal notice page URL", - "acceptance_of_our_legalNotice": "By continuing, you accept our", - "legalNotice": "legal notice", - "copied": "Copied!", - "checklistActionsPopup-title": "Checklist Actions", - "moveChecklist": "Move Checklist", - "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", - "copyChecklist": "Copy Checklist", - "copyChecklistPopup-title": "Copy Checklist", - "card-show-lists": "Card Show Lists", - "subtaskActionsPopup-title": "Subtask Actions", - "attachmentActionsPopup-title": "Attachment Actions", - "attachment-move-storage-fs": "Move attachment to filesystem", - "attachment-move-storage-gridfs": "Move attachment to GridFS", - "attachment-move-storage-s3": "Move attachment to S3", - "attachment-move": "Move Attachment", - "move-all-attachments-to-fs": "Move all attachments to filesystem", - "move-all-attachments-to-gridfs": "Move all attachments to GridFS", - "move-all-attachments-to-s3": "Move all attachments to S3", - "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", - "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", - "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", - "path": "Path", - "version-name": "Version-Name", - "size": "Size", - "storage": "Storage", - "action": "Action", - "board-title": "Board Title", - "attachmentRenamePopup-title": "Rename", - "uploading": "Uploading", - "remaining_time": "Remaining time", - "speed": "Speed", - "progress": "Progress", - "password-again": "Password (again)", - "if-you-already-have-an-account": "If you already have an account", - "register": "Register", - "forgot-password": "Forgot password", - "minicardDetailsActionsPopup-title": "Card Details", - "Mongo_sessions_count": "Mongo sessions count", - "change-visibility": "Change Visibility", - "max-upload-filesize": "Max upload filesize in bytes:", - "allowed-upload-filetypes": "Allowed upload filetypes:", - "max-avatar-filesize": "Max avatar filesize in bytes:", - "allowed-avatar-filetypes": "Allowed avatar filetypes:", - "invalid-file": "If filename is invalid, upload or rename is cancelled.", - "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", - "drag-board": "Drag board", - "translation-number": "The number of custom translation strings is:", - "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", - "newTranslationPopup-title": "New custom translation string", - "editTranslationPopup-title": "Edit custom translation string", - "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Translation", - "text": "Text", - "translation-text": "Translation text", - "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" -} diff --git a/imports/i18n/data/en_ZA.i18n.json b/imports/i18n/data/en_ZA.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/en_ZA.i18n.json +++ b/imports/i18n/data/en_ZA.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/eo.i18n.json b/imports/i18n/data/eo.i18n.json index d55f385c1..4856b7928 100644 --- a/imports/i18n/data/eo.i18n.json +++ b/imports/i18n/data/eo.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "Kreiis %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Fermi", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "flava", "unset-color": "Unset", - "comments": "Komentoj", "comment": "Komento", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "email-sent": "Sendis retpoŝton", "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Plena nomo", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Krei tavolon", "home": "Hejmo", "import": "Importi", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Tempo", "title": "Titolo", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1253,20 +1237,11 @@ "newTranslationPopup-title": "New custom translation string", "editTranslationPopup-title": "Edit custom translation string", "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Traduko", + "translation": "Translation", "text": "Teksto", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/es-AR.i18n.json b/imports/i18n/data/es-AR.i18n.json index e4011c011..a3ac8696a 100644 --- a/imports/i18n/data/es-AR.i18n.json +++ b/imports/i18n/data/es-AR.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "adjuntadas %s a %s", "activity-created": "creadas %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluidas %s de %s", "activity-imported": "importadas %s en %s de %s", @@ -86,12 +85,10 @@ "add-card": "Agregar Tarjeta", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Listas de ítems", "click-to-star": "Clickeá para darle una estrella a este tablero.", "click-to-unstar": "Clickeá para sacarle la estrella al tablero.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Portapapeles o arrastrar y soltar", "close": "Cerrar", "close-board": "Cerrar Tablero", @@ -300,7 +294,6 @@ "color-white": "blanco", "color-yellow": "amarillo", "unset-color": "Deseleccionado", - "comments": "Comments", "comment": "Comentario", "comment-placeholder": "Comentar", "comment-only": "Comentar solamente", @@ -383,7 +376,6 @@ "email-sent": "Email enviado", "email-verifyEmail-subject": "Verificá tu dirección de email en __siteName__", "email-verifyEmail-text": "Hola __user__,\n\nPara verificar tu cuenta de email, simplemente clickeá el enlace de abajo.\n\n__url__\n\nGracias.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Activar Límite TEP", "error-board-doesNotExist": "Este tablero no existe", "error-board-notAdmin": "Necesitás ser administrador de este tablero para hacer eso", @@ -451,7 +443,7 @@ "advanced-filter-description": "El filtrado avanzado permite escribir una cadena que contiene los siguientes operadores: == != <= >= && || ( ) Se utiliza un espacio como separador entre los operadores. Se pueden filtrar todos los campos personalizados escribiendo sus nombres y valores. Por ejemplo: Campo1 == Valor1. Nota: Si los campos o valores contienen espacios, deben encapsularse entre comillas simples. Por ejemplo: 'Campo 1' == 'Valor 1'. Para omitir los caracteres de control único (' \\\\/), se usa \\\\. Por ejemplo: Campo1 = I\\\\'m. También se pueden combinar múltiples condiciones. Por ejemplo: C1 == V1 || C1 == V2. Normalmente todos los operadores se interpretan de izquierda a derecha. Se puede cambiar el orden colocando paréntesis. Por ejemplo: C1 == V1 && ( C2 == V2 || C2 == V3 ). También se puede buscar en campos de texto usando expresiones regulares: C1 == /Tes.*/i", "fullname": "Nombre Completo", "header-logo-title": "Retroceder a tu página de tableros.", - "show-activities": "Show Activities", + "hide-system-messages": "Esconder mensajes del sistema", "headerBarCreateBoardPopup-title": "Crear Tablero", "home": "Inicio", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Fijar un límite para el número máximo de tareas en esta lista", "setWipLimitPopup-title": "Establecer Límite TEP", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Asignarte a vos mismo en la tarjeta actual", "shortcut-autocomplete-emoji": "Autocompletar emonji", "shortcut-autocomplete-members": "Autocompletar miembros", "shortcut-clear-filters": "Limpiar todos los filtros", "shortcut-close-dialog": "Cerrar Diálogo", "shortcut-filter-my-cards": "Filtrar mis tarjetas", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Traer esta lista de atajos", "shortcut-toggle-filterbar": "Activar/Desactivar Barra Lateral de Filtros", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Ha gastado tarjetas de tiempo", "time": "Hora", "title": "Título", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Seguimiento", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Texto", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/es-CL.i18n.json b/imports/i18n/data/es-CL.i18n.json index a4bee6545..f57743ae3 100644 --- a/imports/i18n/data/es-CL.i18n.json +++ b/imports/i18n/data/es-CL.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s se ha archivado", "activity-attached": "ha adjuntado %s a %s", "activity-created": "ha creado %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "creó el campo personalizado %s", "activity-excluded": "ha excluido %s de %s", "activity-imported": "ha importado %s a %s desde %s", @@ -86,12 +85,10 @@ "add-card": "Añadir una tarjeta", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Lista de verificación", "click-to-star": "Haz clic para destacar este tablero.", "click-to-unstar": "Haz clic para dejar de destacar este tablero.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "el portapapeles o con arrastrar y soltar", "close": "Cerrar", "close-board": "Cerrar el tablero", @@ -300,7 +294,6 @@ "color-white": "blanco", "color-yellow": "amarilla", "unset-color": "Desmarcar", - "comments": "Comments", "comment": "Comentar", "comment-placeholder": "Escribir comentario", "comment-only": "Sólo comentarios", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Habilitar el límite del trabajo en proceso", "error-board-doesNotExist": "El tablero no existe", "error-board-notAdmin": "Es necesario ser administrador de este tablero para hacer eso", @@ -451,7 +443,7 @@ "advanced-filter-description": "El filtrado avanzado permite escribir una cadena que contiene los siguientes operadores: == != <= >= && || ( ) Se utiliza un espacio como separador entre los operadores. Se pueden filtrar todos los campos personalizados escribiendo sus nombres y valores. Por ejemplo: Campo1 == Valor1. Nota: Si los campos o valores contienen espacios, deben encapsularse entre comillas simples. Por ejemplo: 'Campo 1' == 'Valor 1'. Para omitir los caracteres de control único (' \\\\/), se usa \\\\. Por ejemplo: Campo1 = I\\\\'m. También se pueden combinar múltiples condiciones. Por ejemplo: C1 == V1 || C1 == V2. Normalmente todos los operadores se interpretan de izquierda a derecha. Se puede cambiar el orden colocando paréntesis. Por ejemplo: C1 == V1 && ( C2 == V2 || C2 == V3 ). También se puede buscar en campos de texto usando expresiones regulares: C1 == /Tes.*/i", "fullname": "Nombre completo", "header-logo-title": "Volver a tu página de tableros", - "show-activities": "Show Activities", + "hide-system-messages": "Ocultar las notificaciones de actividad", "headerBarCreateBoardPopup-title": "Crear tablero", "home": "Inicio", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Cambiar el límite para el número máximo de tareas en esta lista.", "setWipLimitPopup-title": "Cambiar el límite del trabajo en proceso", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual", "shortcut-autocomplete-emoji": "Autocompletar emoji", "shortcut-autocomplete-members": "Autocompletar miembros", "shortcut-clear-filters": "Limpiar todos los filtros", "shortcut-close-dialog": "Cerrar el cuadro de diálogo", "shortcut-filter-my-cards": "Filtrar mis tarjetas", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Mostrar esta lista de atajos", "shortcut-toggle-filterbar": "Conmutar la barra lateral del filtro", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Se ha excedido el tiempo de las tarjetas", "time": "Hora", "title": "Título", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Siguiendo", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Texto", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Contraer", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/es-LA.i18n.json b/imports/i18n/data/es-LA.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/es-LA.i18n.json +++ b/imports/i18n/data/es-LA.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/es-MX.i18n.json b/imports/i18n/data/es-MX.i18n.json index 123ddb258..7c97d5731 100644 --- a/imports/i18n/data/es-MX.i18n.json +++ b/imports/i18n/data/es-MX.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s archivado", "activity-attached": "ha adjuntado %s de %s", "activity-created": "ha creado %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "campo personalizado creado %s", "activity-excluded": "ha excluido %s de %s", "activity-imported": "ha importado %s a %s desde %s", @@ -86,12 +85,10 @@ "add-card": "Agregar Tarjeta", "add-card-to-top-of-list": "Agregar tarjeta al inicio de la lista", "add-card-to-bottom-of-list": "Agregar tarjeta al final de la lista", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/es-PE.i18n.json b/imports/i18n/data/es-PE.i18n.json index 59843c62f..1fb5715c0 100644 --- a/imports/i18n/data/es-PE.i18n.json +++ b/imports/i18n/data/es-PE.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s se ha archivado", "activity-attached": "ha adjuntado %s a %s", "activity-created": "ha creado %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "creó el campo personalizado %s", "activity-excluded": "ha excluido %s de %s", "activity-imported": "ha importado %s a %s desde %s", @@ -86,12 +85,10 @@ "add-card": "Agregar una tarjeta", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Listas de comprobación", "click-to-star": "Haga clic para destacar este tablero.", "click-to-unstar": "Haga clic para dejar de destacar este tablero.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "el portapapeles o con arrastrar y soltar", "close": "Cerrar", "close-board": "Cerrar el tablero", @@ -300,7 +294,6 @@ "color-white": "blanco", "color-yellow": "amarillo", "unset-color": "Desmarcar", - "comments": "Comments", "comment": "Comentar", "comment-placeholder": "Escribir comentario", "comment-only": "Sólo comentarios", @@ -383,7 +376,6 @@ "email-sent": "Correo enviado", "email-verifyEmail-subject": "Verifique su dirección de correo electrónico en __siteName__", "email-verifyEmail-text": "Hola __user__,\n\nPara verificar el correo electrónico de su cuenta, simplemente haga clic en el siguiente enlace.\n\n__url__\n\nGracias.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Habilitar el límite del trabajo en proceso", "error-board-doesNotExist": "El tablero no existe", "error-board-notAdmin": "Es necesario ser administrador de este tablero para hacer eso", @@ -451,7 +443,7 @@ "advanced-filter-description": "El filtrado avanzado permite escribir una cadena que contiene los siguientes operadores: == != <= >= && || ( ) Se utiliza un espacio como separador entre los operadores. Se pueden filtrar todos los campos personalizados escribiendo sus nombres y valores. Por ejemplo: Campo1 == Valor1. Nota: Si los campos o valores contienen espacios, deben encapsularse entre comillas simples. Por ejemplo: 'Campo 1' == 'Valor 1'. Para omitir los caracteres de control único (' \\\\/), se usa \\\\. Por ejemplo: Campo1 = I\\\\'m. También se pueden combinar múltiples condiciones. Por ejemplo: C1 == V1 || C1 == V2. Normalmente todos los operadores se interpretan de izquierda a derecha. Se puede cambiar el orden colocando paréntesis. Por ejemplo: C1 == V1 && ( C2 == V2 || C2 == V3 ). También se puede buscar en campos de texto usando expresiones regulares: C1 == /Tes.*/i", "fullname": "Nombre completo", "header-logo-title": "Volver a su página de tableros", - "show-activities": "Show Activities", + "hide-system-messages": "Ocultar las notificaciones de actividad", "headerBarCreateBoardPopup-title": "Crear tablero", "home": "Inicio", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Seleccionar tablero", "set-wip-limit-value": "Cambiar el límite para el número máximo de tareas en esta lista.", "setWipLimitPopup-title": "Cambiar el límite del trabajo en proceso", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Asignarse a la tarjeta actual", "shortcut-autocomplete-emoji": "Autocompletar emoji", "shortcut-autocomplete-members": "Autocompletar miembros", "shortcut-clear-filters": "Limpiar todos los filtros", "shortcut-close-dialog": "Cerrar el cuadro de diálogo", "shortcut-filter-my-cards": "Filtrar mis tarjetas", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Mostrar esta lista de atajos", "shortcut-toggle-filterbar": "Alternar la barra lateral del filtro", "shortcut-toggle-searchbar": "Alternar la barra lateral de búsqueda", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Se ha excedido el tiempo de las tarjetas", "time": "Hora", "title": "Título", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Siguiendo", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "No puede borrar esta tarjeta antes de borrar la tarjeta enlazada que tiene", "delete-linked-cards-before-this-list": "No puede borrar esta lista antes de borrar las tarjetas enlazadas que apuntan a tarjetas en esta lista", "hide-checked-items": "Ocultar elementos marcados", - "hide-finished-checklist": "Hide finished checklist", "task": "Tarea", "create-task": "Crear tarea", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Enlaces", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Texto", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Contraer", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/es-PY.i18n.json b/imports/i18n/data/es-PY.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/es-PY.i18n.json +++ b/imports/i18n/data/es-PY.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/es.i18n.json b/imports/i18n/data/es.i18n.json index ab1b60637..333cc339b 100644 --- a/imports/i18n/data/es.i18n.json +++ b/imports/i18n/data/es.i18n.json @@ -16,9 +16,9 @@ "act-uncheckedItem": "desmarcado el elemento __checklistItem__ de la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__", "act-completeChecklist": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__", "act-uncompleteChecklist": "no completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__", - "act-addComment": "ha comentado en la tarjeta__card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__", - "act-editComment": "ha editado la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__", - "act-deleteComment": "ha borrado el comentario en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__", + "act-addComment": "comentario en la tarjeta__card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__", + "act-editComment": "comentario editado en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__", + "act-deleteComment": "comentario eliminado en la tarjeta __card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__", "act-createBoard": "creó el tablero __board__", "act-createSwimlane": "creó el carril de flujo __swimlane__ en el tablero __board__", "act-createCard": "creada la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__", @@ -49,7 +49,6 @@ "activity-archived": "%s se ha archivado", "activity-attached": "adjuntado(s) %s a %s", "activity-created": "ha creado %s", - "activity-changedListTitle": "lista renombrada como %s", "activity-customfield-created": "creó el campo personalizado %s", "activity-excluded": "ha excluido %s de %s", "activity-imported": "ha importado %s en %s desde %s", @@ -86,27 +85,25 @@ "add-card": "Añadir una tarjeta", "add-card-to-top-of-list": "Subir la tarjeta al principio de la lista", "add-card-to-bottom-of-list": "Bajar la tarjeta al final de la lista", - "setListWidthPopup-title": "Ajustar anchuras", - "set-list-width": "Ajustar anchuras", - "set-list-width-value": "Establecer anchos mín. y máx. (píxeles)", - "list-width-error-message": "Las anchuras de las listas deben ser enteros mayores de 100", - "keyboard-shortcuts-enabled": "Atajos de teclado habilitados. Haz clic para deshabilitarlos.", - "keyboard-shortcuts-disabled": "Atajos de teclado deshabilitados. Haz clic para habilitarlos.", - "setSwimlaneHeightPopup-title": "Ajustar la altura del carril", - "set-swimlane-height": "Ajustar la altura del carril", - "set-swimlane-height-value": "Altura de carril (píxeles)", - "swimlane-height-error-message": "La altura de carril debe ser un entero positivo", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", "add-swimlane": "Añadir un carril de flujo", "add-subtask": "Añadir subtarea", "add-checklist": "Añadir una lista de verificación", "add-checklist-item": "Añadir un elemento a la lista de verificación", - "close-add-checklist-item": "Cerrar el formulario para añadir un elemento a la lista de verificación", - "close-edit-checklist-item": "Cerrar el formulario de edición de un elemento de la lista de verificación", + "close-add-checklist-item": "Close add an item to checklist form", + "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Convertir en tarjeta", - "add-cover": "Añadir imagen de portada a la minitarjeta", + "add-cover": "Add cover image to minicard", "add-label": "Añadir una etiqueta", "add-list": "Añadir una lista", - "add-after-list": "Añadir después de la lista", + "add-after-list": "Add After List", "add-members": "Añadir miembros", "added": "Añadida el", "addMemberPopup-title": "Miembros", @@ -120,7 +117,7 @@ "and-n-other-card": "y __count__ tarjeta más", "and-n-other-card_plural": "y otras __count__ tarjetas", "apply": "Aplicar", - "app-is-offline": "Cargando, espera por favor. Refrescar esta página causará la pérdida de datos. Si la carga no funciona, por favor comprueba que el servidor no se ha parado.", + "app-is-offline": "Cargando, espera por favor. Refrescar esta página causará pérdida de datos. Si la carga no funciona, por favor comprueba que el servidor no se ha parado.", "app-try-reconnect": "Intente reconectar.", "archive": "Archivar", "archive-all": "Archivar todo", @@ -149,10 +146,10 @@ "avatar-too-big": "El avatar es demasiado grande (__size__ máx)", "back": "Atrás", "board-change-color": "Cambiar el color", - "board-change-background-image": "Cambiar imagen de fondo", - "board-background-image-url": "URL de la imagen de fondo", - "add-background-image": "Añadir imagen de fondo", - "remove-background-image": "Quitar imagen de fondo", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", "show-at-all-boards-page" : "Mostrar todos los tableros", "board-info-on-my-boards" : "Configuración de todos los tableros", "boardInfoOnMyBoardsPopup-title" : "Configuración de todos los tableros", @@ -163,11 +160,11 @@ "board-not-found": "Tablero no encontrado", "board-private-info": "Este tablero será <strong>privado</strong>.", "board-public-info": "Este tablero será <strong>público</strong>.", - "board-drag-drop-reorder-or-click-open": "Arrastra y suelta para reordenar los iconos del tablero. Click en el icono del tablero para abrirlo", + "board-drag-drop-reorder-or-click-open": "Mueve y posiciona para reordenar los iconos de los tableros. Click en el icono del tablero para abrirlo", "boardChangeColorPopup-title": "Cambiar el fondo del tablero", - "boardChangeBackgroundImagePopup-title": "Cambiar imagen de fondo", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "Cambiar el color", - "allBoardsChangeBackgroundImagePopup-title": "Cambiar imagen de fondo", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "Renombrar el tablero", "boardChangeVisibilityPopup-title": "Cambiar visibilidad", "boardChangeWatchPopup-title": "Cambiar vigilancia", @@ -217,10 +214,10 @@ "vote-against": "contrarios", "deleteVotePopup-title": "¿Borrar voto?", "vote-delete-pop": "El Borrado es permanente. Perderá todas las acciones asociadas con este voto.", - "cardStartPlanningPokerPopup-title": "Comenzar un Planning Poker", - "card-edit-planning-poker": "Editar el Planning Poker", - "editPokerEndDatePopup-title": "Cambiar la fecha final de voto del Planning Poker", - "poker-question": "Planning Poker", + "cardStartPlanningPokerPopup-title": "Comenzar una Planning Poker", + "card-edit-planning-poker": "Editar la planificación del Poker", + "editPokerEndDatePopup-title": "Cambiar la fecha final para la planificación del Poker", + "poker-question": "Planificación del Poker", "poker-one": "1", "poker-two": "2", "poker-three": "3", @@ -236,8 +233,8 @@ "poker-result-who": "¿Quien?", "poker-replay": "Reproducir", "set-estimation": "Fijar estimación", - "deletePokerPopup-title": "¿Borrar el Planning Poker?", - "poker-delete-pop": "El borrado es permanente. Perderás todas las acciones asociadas a este Planning Poker.", + "deletePokerPopup-title": "¿Borrar el póquer de planificación?", + "poker-delete-pop": "El borrado es permanente. Perderás todas las acciones asociadas a este póker de planificación.", "cardDeletePopup-title": "¿Eliminar la tarjeta?", "cardArchivePopup-title": "¿Archivar tarjeta?", "cardDetailsActionsPopup-title": "Acciones de la tarjeta", @@ -266,9 +263,6 @@ "checklists": "Lista de verificación", "click-to-star": "Haz clic para destacar este tablero.", "click-to-unstar": "Haz clic para dejar de destacar este tablero.", - "click-to-enable-auto-width": "Ancho de lista automático deshabilitado. Haz clic para habilitarlo.", - "click-to-disable-auto-width": "Ancho de lista automático habilitado. Haz clic para deshabilitarlo.", - "auto-list-width": "Ancho de lista automático", "clipboard": "el portapapeles o con arrastrar y soltar", "close": "Cerrar", "close-board": "Cerrar el tablero", @@ -300,7 +294,6 @@ "color-white": "blanco", "color-yellow": "amarilla", "unset-color": "Desmarcar", - "comments": "Comentarios", "comment": "Comentar", "comment-placeholder": "Escribir comentario", "comment-only": "Sólo comentarios", @@ -313,7 +306,7 @@ "worker-desc": "Solo puede mover tarjetas, asignarse a la tarjeta y comentar.", "computer": "el ordenador", "confirm-subtask-delete-popup": "¿Seguro que quieres eliminar la subtarea?", - "confirm-checklist-delete-popup": "¿Está seguro de querer eliminar la lista de tareas?", + "confirm-checklist-delete-popup": "¿Está seguro de que quiere eliminar la lista de tareas?", "subtaskDeletePopup-title": "¿Borrar subtarea?", "checklistDeletePopup-title": "¿Borrar la lista de tareas?", "copy-card-link-to-clipboard": "Copiar el enlace de la tarjeta al portapapeles", @@ -338,7 +331,7 @@ "custom-field-date": "Fecha", "custom-field-dropdown": "Lista desplegable", "custom-field-dropdown-none": "(nada)", - "custom-field-dropdown-options": "Opciones de listas", + "custom-field-dropdown-options": "Opciones de la lista", "custom-field-dropdown-options-placeholder": "Pulsa Intro para añadir más opciones", "custom-field-dropdown-unknown": "(desconocido)", "custom-field-number": "Número", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Habilitar barras de desplazamiento verticales", "enable-wip-limit": "Habilitar el límite del trabajo en proceso", "error-board-doesNotExist": "El tablero no existe", "error-board-notAdmin": "Es necesario ser administrador de este tablero para hacer eso", @@ -414,7 +406,7 @@ "sort": "Ordenar", "sorted": "Ordenado", "remove-sort": "Eliminar el ordenamiento", - "sort-desc": "Clic para ordenar la lista", + "sort-desc": "Click para ordenar la lista", "list-sort-by": "Ordenar la lista por:", "list-label-modifiedAt": "Hora de último acceso", "list-label-title": "Nombre de la lista", @@ -451,7 +443,7 @@ "advanced-filter-description": "El filtrado avanzado permite escribir una cadena que contiene los siguientes operadores: == != <= >= && || ( ) Se utiliza un espacio como separador entre los operadores. Se pueden filtrar todos los campos personalizados escribiendo sus nombres y valores. Por ejemplo: Campo1 == Valor1. Nota: Si los campos o valores contienen espacios, deben encapsularse entre comillas simples. Por ejemplo: 'Campo 1' == 'Valor 1'. Para omitir los caracteres de control único (' \\\\/), se usa \\\\. Por ejemplo: Campo1 = I\\\\'m. También se pueden combinar múltiples condiciones. Por ejemplo: C1 == V1 || C1 == V2. Normalmente todos los operadores se interpretan de izquierda a derecha. Se puede cambiar el orden colocando paréntesis. Por ejemplo: C1 == V1 && ( C2 == V2 || C2 == V3 ). También se puede buscar en campos de texto usando expresiones regulares: C1 == /Tes.*/i", "fullname": "Nombre completo", "header-logo-title": "Volver a tu página de tableros", - "show-activities": "Mostrar actividades", + "hide-system-messages": "Ocultar las notificaciones de actividad", "headerBarCreateBoardPopup-title": "Crear tablero", "home": "Inicio", "import": "Importar", @@ -500,7 +492,7 @@ "list-move-cards": "Mover todas las tarjetas de esta lista", "list-select-cards": "Seleccionar todas las tarjetas de esta lista", "set-color-list": "Cambiar el color", - "listActionPopup-title": "Acciones de listas", + "listActionPopup-title": "Acciones de la lista", "settingsUserPopup-title": "Preferencias de usuario", "settingsTeamPopup-title": "Configuración del Equipo", "settingsOrgPopup-title": "Configuración de la Organización", @@ -510,7 +502,7 @@ "listImportCardsTsvPopup-title": "Importar CSV/TSV", "listMorePopup-title": "Más", "link-list": "Enlazar a esta lista", - "list-delete-pop": "Se eliminarán todas las acciones del historial de actividades y no se podrá volver a abrir la lista. Esta acción no puede deshacerse.", + "list-delete-pop": "Todas las acciones serán eliminadas del historial de actividades y no se podrá recuperar la lista. Esta acción no puede deshacerse.", "list-delete-suggest-archive": "Puedes mover una lista al Archivo para quitarla del tablero y preservar la actividad.", "lists": "Listas", "swimlanes": "Carriles", @@ -540,7 +532,7 @@ "normal": "Normal", "normal-desc": "Puedes ver y editar tarjetas. No puedes cambiar la configuración.", "not-accepted-yet": "La invitación no ha sido aceptada aún", - "notify-participate": "Recibir actualizaciones de cualquier tarjeta en la que participes como creador o miembro", + "notify-participate": "Receive updates to any cards you participate as creator or member", "notify-watch": "Recibir actuaizaciones de cualquier tablero, lista o tarjeta que estés vigilando", "optional": "opcional", "or": "o", @@ -558,7 +550,7 @@ "public": "Público", "public-desc": "Este tablero es público. Es visible para cualquiera a través del enlace, y se mostrará en los buscadores como Google. Sólo las personas añadidas al tablero pueden editarlo.", "quick-access-description": "Destaca un tablero para añadir un acceso directo en esta barra.", - "remove-cover": "Quitar imagen de portada de la minitarjeta", + "remove-cover": "Remove cover image from minicard", "remove-from-board": "Desvincular del tablero", "remove-label": "Eliminar la etiqueta", "listDeletePopup-title": "¿Eliminar la lista?", @@ -580,14 +572,12 @@ "select-board": "Seleccionar tablero", "set-wip-limit-value": "Cambiar el límite para el número máximo de tareas en esta lista.", "setWipLimitPopup-title": "Establecer el límite del trabajo en proceso", - "shortcut-add-self": "Añadirte a ti mismo a la tarjeta actual", "shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual", "shortcut-autocomplete-emoji": "Autocompletar emoji", "shortcut-autocomplete-members": "Autocompletar miembros", "shortcut-clear-filters": "Limpiar todos los filtros", "shortcut-close-dialog": "Cerrar el cuadro de diálogo", "shortcut-filter-my-cards": "Filtrar mis tarjetas", - "shortcut-filter-my-assigned-cards": "Filtrar mis tarjetas asignadas", "shortcut-show-shortcuts": "Mostrar esta lista de atajos", "shortcut-toggle-filterbar": "Conmutar la barra lateral del filtro", "shortcut-toggle-searchbar": "Conmutar la barra lateral de búsqueda", @@ -604,13 +594,12 @@ "this-board": "este tablero", "this-card": "esta tarjeta", "spent-time-hours": "Tiempo consumido (horas)", - "overtime-hours": "Horas extras", + "overtime-hours": "Tiempo excesivo (horas)", "overtime": "Tiempo excesivo", "has-overtime-cards": "Hay tarjetas con el tiempo excedido", "has-spenttime-cards": "Se ha excedido el tiempo de las tarjetas", "time": "Hora", "title": "Título", - "toggle-assignees": "Alternar asignados 1-9 para la tarjeta (por orden de adición al tablero).", "toggle-labels": "Alterna las etiquetas 1-9 para la tarjeta. La selección múltiple añade las etiquetas 1-9", "remove-labels-multiselect": "La selección múltiple elimina las etiquetas 1-9", "tracking": "Siguiendo", @@ -624,12 +613,12 @@ "uploaded-avatar": "Avatar cargado", "custom-top-left-corner-logo-image-url": "Personalizar la URL del logotipo en la esquina superior izquierda", "custom-top-left-corner-logo-link-url": "Personalizar el enlace del logotipo de la esquina superior izquierda", - "custom-top-left-corner-logo-height": "Altura personalizada del logo de la esquina superior izquierda. Por defecto: 27", + "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", "custom-login-logo-image-url": "Custom Login Logo Image URL", "custom-login-logo-link-url": "Custom Login Logo Link URL", - "custom-help-link-url": "Enlace URL de ayuda personalizada", + "custom-help-link-url": "Custom Help Link URL", "text-below-custom-login-logo": "Text below Custom Login Logo", - "automatic-linked-url-schemes": "Esquemas de URL personalizados que deberían ser clicables automáticamente. Un esquema de URL por línea.", + "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", "username": "Nombre de usuario", "import-usernames": "Importar Usuarios", "view-it": "Verla", @@ -656,7 +645,7 @@ "disable-forgot-password": "Disable Forgot Password", "invite": "Invitar", "invite-people": "Invitar a personas", - "to-boards": "Al (A los) tablero(s)", + "to-boards": "A el(los) tablero(s)", "email-addresses": "Direcciones de correo electrónico", "smtp-host-description": "Dirección del servidor SMTP para gestionar tus correos", "smtp-port-description": "Puerto usado por el servidor SMTP para mandar correos", @@ -731,7 +720,7 @@ "setListColorPopup-title": "Elegir un color", "assigned-by": "Asignado por", "requested-by": "Solicitado por", - "card-sorting-by-number": "Orden de tarjetas por número", + "card-sorting-by-number": "Card sorting by number", "board-delete-notice": "Se eliminarán todas las listas, tarjetas y acciones asociadas a este tablero. Esta acción no puede deshacerse.", "delete-board-confirm-popup": "Se eliminarán todas las listas, tarjetas, etiquetas y actividades, y no podrás recuperar los contenidos del tablero. Esta acción no puede deshacerse.", "boardDeletePopup-title": "¿Eliminar el tablero?", @@ -742,7 +731,7 @@ "queue": "Cola", "subtask-settings": "Preferencias de las subtareas", "card-settings": "Preferencias de la tarjeta", - "minicard-settings": "Configuración de minitarjeta", + "minicard-settings": "Minicard Settings", "boardSubtaskSettingsPopup-title": "Preferencias de las subtareas del tablero", "boardCardSettingsPopup-title": "Preferencias de la tarjeta", "boardMinicardSettingsPopup-title": "Minicard Settings", @@ -750,9 +739,9 @@ "deposit-subtasks-list": "Lista de destino para subtareas depositadas aquí:", "show-parent-in-minicard": "Mostrar el padre en una minitarjeta:", "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "Imagen de portada de la minitarjeta", - "badge-attachment-on-minicard": "Contador de adjuntos en la minitarjeta", - "card-sorting-by-number-on-minicard": "Orden de tarjetas por número de minitarjeta", + "cover-attachment-on-minicard": "Cover image on minicard", + "badge-attachment-on-minicard": "Count of attachments on minicard", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", "prefix-with-full-path": "Prefijo con ruta completa", "prefix-with-parent": "Prefijo con el padre", "subtext-with-full-path": "Subtexto con ruta completa", @@ -786,7 +775,7 @@ "r-added-to": "Añadido a", "r-removed-from": "eliminado de", "r-the-board": "el tablero", - "r-list": "lista", + "r-list": "la lista", "set-filter": "Filtrar", "r-moved-to": "Movido a", "r-moved-from": "Movido desde", @@ -861,12 +850,12 @@ "r-d-remove-checklist": "Eliminar lista de verificación", "r-by": "por", "r-add-checklist": "Añadir una lista de verificación", - "r-with-items": "con elementos", + "r-with-items": "con items", "r-items-list": "item1,item2,item3", "r-add-swimlane": "Agregar el carril", "r-swimlane-name": "nombre del carril", "r-board-note": "Nota: deje un campo vacío para que coincida con todos los valores posibles", - "r-checklist-note": "Nota: los elementos de la lista tienen que escribirse como valores separados por coma.", + "r-checklist-note": "Nota: los ítems de la lista tienen que escribirse como valores separados por coma.", "r-when-a-card-is-moved": "Cuando una tarjeta es movida a otra lista", "r-set": "Cambiar", "r-update": "Actualizar", @@ -877,7 +866,7 @@ "r-df-received-at": "recibido", "r-to-current-datetime": "a la fecha/hora actual", "r-remove-value-from": "Eliminar el valor de", - "r-link-card": "Enlazar tarjeta a", + "r-link-card": "Link card to", "ldap": "LDAP", "oauth2": "OAuth2", "cas": "CAS", @@ -890,7 +879,7 @@ "hide-board-member-list": "Hide board member list on All Boards", "add-custom-html-after-body-start": "Añade HTML personalizado después de <body>", "add-custom-html-before-body-end": "Añade HTML personalizado después de </body>", - "error-undefined": "Algo ha salido mal", + "error-undefined": "Algo no está bien", "error-ldap-login": "Ocurrió un error al intentar acceder", "display-authentication-method": "Mostrar el método de autenticación", "oidc-button-text": "Customize the OIDC button text", @@ -916,15 +905,15 @@ "almostdue": "está próxima la hora de vencimiento actual %s", "pastdue": "se sobrepasó la hora de vencimiento actual%s", "duenow": "la hora de vencimiento actual %s es hoy", - "act-newDue": "__list__/__card__ tiene una primera notificación de vencimiento [__board__]", + "act-newDue": "__list__/__card__ tiene una 1ra notificación de vencimiento [__board__]", "act-withDue": "__list__/__card__ notificaciones de vencimiento [__board__]", "act-almostdue": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ está próximo", "act-pastdue": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ se sobrepasó", "act-duenow": "se ha notificado que el vencimiento actual (__timeValue__) de __card__ es ahora", "act-atUserComment": "Se te mencionó en [__board__] __list__/__card__", - "delete-user-confirm-popup": "¿Estás seguro de querer eliminar esta cuenta? Esta acción no puede deshacerse.", - "delete-team-confirm-popup": "¿Estás seguro de querer eliminar este equipo? Esta acción no puede deshacerse", - "delete-org-confirm-popup": "¿Estás seguro de querer eliminar esta organización? Esta acción no puede deshacerse.", + "delete-user-confirm-popup": "¿Seguro que quieres eliminar esta cuenta? Esta acción no puede deshacerse.", + "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", + "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", "accounts-allowUserDelete": "Permitir a los usuarios eliminar su cuenta", "hide-minicard-label-text": "Ocultar el texto de la etiqueta de la minitarjeta", "show-desktop-drag-handles": "Mostrar los controles de arrastre del escritorio", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "No puede borrar esta tarjeta antes de borrar la tarjeta enlazada que tiene", "delete-linked-cards-before-this-list": "No puede borrar esta lista antes de borrar las tarjetas enlazadas que apuntan a tarjetas en esta lista", "hide-checked-items": "Ocultar elementos marcados", - "hide-finished-checklist": "Esconder la lista de tareas finalizada", "task": "Tarea", "create-task": "Crear Tarea", "ok": "Vale", @@ -974,7 +962,7 @@ "teams": "Equipos", "displayName": "Mostrar Nombre", "shortName": "Nombre Corto", - "autoAddUsersWithDomainName": "Añadir automáticamente usuarios con el nombre del dominio", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Sitio web", "person": "Persona", "my-cards": "Mis Tarjetas", @@ -998,13 +986,13 @@ "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", "broken-cards": "Tarjetas Rotas", "board-title-not-found": "Tablero '%s' no encontrado.", - "swimlane-title-not-found": "Carril '%s' no encontrado.", + "swimlane-title-not-found": "Swimlane '%s' not found.", "list-title-not-found": "Lista '%s' no encontrada.", "label-not-found": "Etiqueta '%s' no encontrada.", "label-color-not-found": "Label color %s not found.", "user-username-not-found": "Usuario '%s' no encontrado.", "comment-not-found": "Card with comment containing text '%s' not found.", - "org-name-not-found": "Organización '%s' no encontrada.", + "org-name-not-found": "Organization '%s' not found.", "team-name-not-found": "Team '%s' not found.", "globalSearch-title": "Buscar todas las tarjetas", "no-cards-found": "Ninguna tarjeta encontrada", @@ -1013,9 +1001,9 @@ "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", "operator-board": "tablero", "operator-board-abbrev": "b", - "operator-swimlane": "carril", + "operator-swimlane": "swimlane", "operator-swimlane-abbrev": "s", - "operator-list": "lista", + "operator-list": "la lista", "operator-list-abbrev": "l", "operator-label": "etiqueta", "operator-label-abbrev": "#", @@ -1041,7 +1029,7 @@ "predicate-open": "abierto", "predicate-ended": "finalizó", "predicate-all": "todo", - "predicate-overdue": "atrasado", + "predicate-overdue": "overdue", "predicate-week": "semana", "predicate-month": "mes", "predicate-quarter": "cuarto", @@ -1064,45 +1052,45 @@ "operator-number-expected": "operator __operator__ expected a number, got '__value__'", "operator-sort-invalid": "sort of '%s' is invalid", "operator-status-invalid": "'%s' no es un estado válido", - "operator-has-invalid": "%s no es una comprobación de existencia válida", + "operator-has-invalid": "%s is not a valid existence check", "operator-limit-invalid": "%s no es un límite válido. El límite ha de ser un entero positivo.", "operator-debug-invalid": "%s is not a valid debug predicate", "next-page": "Página Siguiente", "previous-page": "Página Anterior", "heading-notes": "Notas", - "globalSearch-instructions-heading": "Instrucciones de búsqueda", - "globalSearch-instructions-description": "Se pueden usar operadores para refinar la búsqueda. Los operadores se especifican escribiendo el nombre del operador y su valor separado por dos puntos. Por ejemplo, especificar `lista:Bloqueada` limitaría la búsqueda a tarjetas que conengan una lista llamada *Bloqueada*. Si el valor contiene espacios o caracteres especiales, debe escribirse entre comillas (por ejemplo: `__operator_list__:\"To Review\"`).", + "globalSearch-instructions-heading": "Buscar instrucciones.", + "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", "globalSearch-instructions-operators": "Operadores disponibles:", - "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - tarjetas en tableros que coincidan con *<title>*", + "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", - "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - tarjetas con comentarios que contengan *<text>*.", + "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", - "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - abreviatura para `__operator_label__:<color>` o `__operator_label__:<name>`", + "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - abreviatura para `user:<username>`", + "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - tarjetas donde *<username>* es el creador de la tarjeta", + "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - las tarjetas pertenecientes al tablero asignadas al equipo *<name>*", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - tarjetas que vencen dentro de *<n>* days. `__operator_due__:__predicate_overdue__ lista todas las tarjetas que han vencido.", + "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", + "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - donde *<status>* puede ser uno de los siguientes:", + "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", - "globalSearch-instructions-status-all": "`__predicate_all__` - todas las tarjetas archivadas o no archivadas", + "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", - "globalSearch-instructions-status-private": "`__predicate_private__` - solo tarjetas de tableros privados", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - donde *<field>* puede ser `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` o `__predicate_member__`. Colocando un `-` delante de *<field>* busca la ausencia del valor en ese campo (por ejemplo, `has:-due` busca tarjetas sin fecha de vencimiento).", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - donde *<sort-name>* puede ser `__predicate_due__`, `__predicate_created__` o `__predicate_modified__`. Para ordenar descendentemente, coloca un `-` delante del tipo de orden.", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - donde *<n>* es un entero positivo que expresa el número de tarjetas que se mostrarán por página.", - "globalSearch-instructions-notes-1": "Se pueden especificar múltiples operadores.", - "globalSearch-instructions-notes-2": "Múltiples condiciones de operadores parecidos se tratan internamente con el operador lógico OR. Es decir, la búsqueda devolverá las tarjetas que coincidan con alguna de las condiciones:\n`__operator_list__:Disponible __operator_list__:Bloqueada` devolverá tarjetas contenidas en cualquier lista nombrada *Bloqueada* o *Disponible*.", - "globalSearch-instructions-notes-3": "Múltiples condiciones de operadores distintos se tratan internamente con el operador lógico AND. Es decir, la búsqueda devolverá las tarjetas que coincidan con TODAS las condiciones:\n`__operator_list__:Disponible __operator_label__:rojo` devuelve sólo las tarjetas en la lista *Disponible* con una etiqueta *roja*.", + "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", + "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", + "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", + "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", + "globalSearch-instructions-notes-1": "Múltiple operadores pueden ser seleccionados.", + "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", + "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", - "globalSearch-instructions-notes-4": "Las búsquedas de texto no distinguen entre mayúsculas y minúsculas.", + "globalSearch-instructions-notes-4": "La búsqueda de texto distingue entre mayúsculas y minúsculas.", "globalSearch-instructions-notes-5": "Por defecto no se buscan las tarjetas archivadas.", "link-to-search": "Enlazar a esta búsqueda", "excel-font": "Arial", @@ -1111,32 +1099,31 @@ "label-names": "Nombres de las etiquetas", "archived-at": "archivado el", "sort-cards": "Ordenar tarjetas", - "sort-is-on": "Ordenamiento activado", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "Ordenar tarjetas", "due-date": "Fecha de Vencimiento", "server-error": "Error del Servidor", - "server-error-troubleshooting": "Por favor, envíe el error generado por el servidor.\nPara la instalación con snap, ejecute: `sudo snap logs wekan.wekan`\nPara la instalación con docker, ejecute: `sudo docker logs wekan-app`", + "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", "title-alphabetically": "Título (Alfabéticamente)", "created-at-newest-first": "Creación (Nuevos Primero)", "created-at-oldest-first": "Creación (Antiguos Primero)", "links-heading": "Enlaces", - "hide-activities-of-all-boards": "No mostrar las actividades del tablero en todos los tableros", - "now-activities-of-all-boards-are-hidden": "Todas las actividades de todos los tableros están ahora ocultas", + "hide-system-messages-of-all-users": "Ocultar los mensajes de sistema de todos los usuarios", + "now-system-messages-of-all-users-are-hidden": "Los mensajes de sistema de todos los usuarios están ahora ocultos", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", - "custom-field-stringtemplate": "Plantilla de cadenas", + "custom-field-stringtemplate": "String Template", "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Pulsa intro para añadir más elementos", "creator": "Creador", - "creator-on-minicard": "Creador en minitarjeta", "filesReportTitle": "Informe sobre los archivos", "reports": "Informes", "rulesReportTitle": "Informe sobre las Reglas", "boardsReportTitle": "Informe sobre los Tableros", "cardsReportTitle": "Informe sobre las Tarjetas", "copy-swimlane": "Copy Swimlane", - "copySwimlanePopup-title": "Copiar carril", + "copySwimlanePopup-title": "Copy Swimlane", "display-card-creator": "Mostrar Creador de la Tarjeta", "wait-spinner": "Wait Spinner", "Bounce": "Bounce Wait Spinner", @@ -1150,7 +1137,7 @@ "maximize-card": "Maximizar Tarjeta", "minimize-card": "Minimizar Tarjeta", "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", - "delete-team-warning-message": "No se puede eliminar este equipo, hay al menos un usuario que pertenece a este equipo.", + "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", "subject": "Asunto", "details": "Detalles", "carbon-copy": "Carbon Copy (Cc:)", @@ -1175,9 +1162,9 @@ "remove-btn": "Eliminar", "filter-card-title-label": "Filtrar por el título de la tarjeta", "invite-people-success": "Invitation to register sent with success", - "invite-people-error": "Error al enviar la invitación para registrarse", + "invite-people-error": "Error while sending invitation to register", "can-invite-if-same-mailDomainName": "Email domain name", - "to-create-teams-contact-admin": "Para crear equipos, por favor contacte con el administrador.", + "to-create-teams-contact-admin": "To create teams, please contact the administrator.", "Node_heap_total_heap_size": "Node heap: total heap size", "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", "Node_heap_total_physical_size": "Node heap: total physical size", @@ -1195,7 +1182,7 @@ "Node_memory_usage_external": "Node memory usage: external", "add-organizations": "Añadir organizaciones", "add-organizations-label": "Added organizations are displayed below:", - "remove-organization-from-board": "¿Estás seguro de querer quitar esta organización del tablero?", + "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", "to-create-organizations-contact-admin": "Para crear organizaciones, póngase en contacto con el administrador.", "custom-legal-notice-link-url": "URL personalizada de la página de aviso legal", "acceptance_of_our_legalNotice": "Al continuar, usted acepta nuestra", @@ -1204,25 +1191,22 @@ "checklistActionsPopup-title": "Acciones de la Lista de Tareas", "moveChecklist": "Mover Lista de Tareas", "moveChecklistPopup-title": "Mover Lista de Tareas", - "newlineBecomesNewChecklistItem": "Cada línea de texto se convierte en un nuevo elemento de la lista de verificación", - "newLineNewItem": "Una línea de texto = un elemento de la lista de verificación", - "newlineBecomesNewChecklistItemOriginOrder": "Cada línea de texto se convierte en un nuevo elemento de la lista de verificación, orden original", - "originOrder": "orden original", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copiar Lista de Tareas", "copyChecklistPopup-title": "Copiar Lista de Tareas", "card-show-lists": "Mostrar Listas de Tarjetas", "subtaskActionsPopup-title": "Acciones de la Subtarea", "attachmentActionsPopup-title": "Acciones de Adhesión", "attachment-move-storage-fs": "Mover el archivo adjunto al sistema de archivos", - "attachment-move-storage-gridfs": "Mover adjunto a GridFS", + "attachment-move-storage-gridfs": "Move attachment to GridFS", "attachment-move-storage-s3": "Move attachment to S3", "attachment-move": "Mover el Adjunto", "move-all-attachments-to-fs": "Mover todos los archivos adjuntos al sistema de archivos", - "move-all-attachments-to-gridfs": "Mover todos los adjuntos a GridFS", + "move-all-attachments-to-gridfs": "Move all attachments to GridFS", "move-all-attachments-to-s3": "Move all attachments to S3", - "move-all-attachments-of-board-to-fs": "Mover todos los adjuntos del tablero al sistema de archivos", + "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", - "move-all-attachments-of-board-to-s3": "Mover todos los adjuntos del tablero a S3", + "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", "path": "Ruta", "version-name": "Nombre de la versión", "size": "Tamaño", @@ -1234,7 +1218,7 @@ "remaining_time": "Tiempo restante", "speed": "Velocidad", "progress": "Progreso", - "password-again": "Contraseña (repetir)", + "password-again": "Password (again)", "if-you-already-have-an-account": "If you already have an account", "register": "Register", "forgot-password": "Forgot password", @@ -1246,27 +1230,18 @@ "max-avatar-filesize": "Máximo tamaño de archivo de avatar en bytes:", "allowed-avatar-filetypes": "Tipos de archivo permitidos para el avatar:", "invalid-file": "Si el nombre de archivo no es válido, la carga o el cambio de nombre es cancelado.", - "preview-pdf-not-supported": "Tu dispositivo no permite previsualizar PDF. Intenta descargarlo.", - "drag-board": "Arrastrar tablero", - "translation-number": "El número de cadenas de traducción personalizadas es:", - "delete-translation-confirm-popup": "¿Estás seguro de querer eliminar esta cadena de traducción personalizada? Esta acción no puede deshacerse.", - "newTranslationPopup-title": "Nueva cadena de traducción personalizada", - "editTranslationPopup-title": "Editar cadena de traducción personalizada", - "settingsTranslationPopup-title": "¿Borrar esta cadena de traducción personalizada?", - "translation": "Traducción", + "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", + "drag-board": "Drag board", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "Texto", - "translation-text": "Texto de traducción", - "show-subtasks-field": "Mostrar campo de subtareas", - "show-week-of-year": "Mostrar semana del año (ISO 8601)", - "convert-to-markdown": "Convertir en Markdown", - "import-board-zip": "Añadir archivo .zip que contenga los archivos JSON del tablero y los nombres de las subcarpetas con adjuntos del tablero", - "collapse": "Contraer", - "uncollapse": "Expandir", - "hideCheckedChecklistItems": "Ocultar elementos marcados de la lista de verificación", - "hideAllChecklistItems": "Ocultar todos los elementos de la lista de verificación", - "support": "Soporte", - "supportPopup-title": "Soporte", - "accessibility-page-enabled": "Página de accesibilidad habilitada", - "accessibility-title": "Temas de accesibilidad", - "accessibility-content": "Contenido de accesibilidad" + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/es_CO.i18n.json b/imports/i18n/data/es_CO.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/es_CO.i18n.json +++ b/imports/i18n/data/es_CO.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/et-EE.i18n.json b/imports/i18n/data/et-EE.i18n.json index 9c5651b0f..58d9f761f 100644 --- a/imports/i18n/data/et-EE.i18n.json +++ b/imports/i18n/data/et-EE.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s kolis arhiivi", "activity-attached": "%s on lisatud %s-le", "activity-created": "loodud %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "loodud kohandatud väli %s", "activity-excluded": "välja arvatud %s alates %s", "activity-imported": "importis %s %s-i %s-st %s-i", @@ -86,12 +85,10 @@ "add-card": "Lisa kaart", "add-card-to-top-of-list": "Kaardi lisamine nimekirja tippu", "add-card-to-bottom-of-list": "Lisa kaart nimekirja lõppu", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Kontrollnimekirjad", "click-to-star": "Kliki, et seda tahvlit tähistada.", "click-to-unstar": "Klõpsake selle tahvli tärni eemaldamiseks.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Lõikeplaat või drag & drop", "close": "Sulge", "close-board": "Sulge juhatus", @@ -300,7 +294,6 @@ "color-white": "valge", "color-yellow": "kollane", "unset-color": "Unset", - "comments": "Comments", "comment": "Kuidas", "comment-placeholder": "Kirjutage kommentaar", "comment-only": "Ainult kommentaar", @@ -383,7 +376,6 @@ "email-sent": "Saadetud e-kiri", "email-verifyEmail-subject": "Kontrollida oma e-posti aadressi __siteName__", "email-verifyEmail-text": "Tere __user__,\n\nOma konto e-posti aadressi kinnitamiseks klõpsake lihtsalt alloleval lingil.\n\n__url__\n\nTänan teid.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "WIP piirangu lubamine", "error-board-doesNotExist": "Seda tahvlit ei ole olemas", "error-board-notAdmin": "Selleks peate olema selle foorumi administraator.", @@ -451,7 +443,7 @@ "advanced-filter-description": "Täpsem filter võimaldab kirjutada stringi, mis sisaldab järgmisi operaatoreid: == ( ) Operaatorite vahel kasutatakse eraldajana tühikut. Saate filtreerida kõiki kohandatud välju, sisestades nende nimed ja väärtused. Näiteks: Välja1 == Väärtus1. Märkus: Kui väljad või väärtused sisaldavad tühikuid, tuleb need kapseldada ühekordsetesse jutumärkidesse. Näiteks: \"Väli 1\" == \"Väärtus 1\". Üksikute kontrollmärkide (' \\\\/) vahelejätmiseks võite kasutada \\\\. Näiteks: Välja1 == I\\\\'m. Samuti saab kombineerida mitu tingimust. Näiteks: F1 == V1 || F1 == V2. Tavaliselt tõlgendatakse kõiki operaatoreid vasakult paremale. Sulgudes saab järjekorda muuta. Näiteks: F1 == V1 && ( F2 == V2 || F2 == V3 ). Samuti saab tekstivälju otsida regexi abil: F1 == /Tes.*/i", "fullname": "Täielik nimi", "header-logo-title": "Mine tagasi oma foorumite lehele.", - "show-activities": "Show Activities", + "hide-system-messages": "Süsteemi sõnumite peitmine", "headerBarCreateBoardPopup-title": "Loo juhatus", "home": "Kodu", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Valige juhatus", "set-wip-limit-value": "Määrake selles nimekirjas olevate ülesannete maksimaalne arv.", "setWipLimitPopup-title": "Määrake WIP limiit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Määrake ennast praegusele kaardile", "shortcut-autocomplete-emoji": "Automaatselt täidetav emotikon", "shortcut-autocomplete-members": "Automaatselt täituvad liikmed", "shortcut-clear-filters": "Tühjenda kõik filtrid", "shortcut-close-dialog": "Lähedane dialoog", "shortcut-filter-my-cards": "Filtreeri oma kaardid", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Tooge üles see otseteede nimekiri", "shortcut-toggle-filterbar": "Filtri külgriba lülitamine", "shortcut-toggle-searchbar": "Otsingu külgriba lülitamine", @@ -610,7 +600,6 @@ "has-spenttime-cards": "On veetnud aega kaardid", "time": "Aeg", "title": "Pealkiri", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Jälgimine", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Te ei saa seda kaarti kustutada enne, kui olete esmalt kustutanud seotud kaardi, millel on", "delete-linked-cards-before-this-list": "Te ei saa seda nimekirja kustutada enne, kui te kustutate kõigepealt lingitud kaardid, mis viitavad selles nimekirjas olevatele kaartidele.", "hide-checked-items": "Peida kontrollitud elemendid", - "hide-finished-checklist": "Hide finished checklist", "task": "Ülesanne", "create-task": "Loo ülesanne", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Loodud aadressil (uusim esimesena)", "created-at-oldest-first": "Loodud aadressil (vanim esimene)", "links-heading": "Lingid", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Peida kõikide kasutajate süsteemisõnumid", + "now-system-messages-of-all-users-are-hidden": "Nüüd on kõikide kasutajate süsteemisõnumid peidetud", "move-swimlane": "Liiguta ujula", "moveSwimlanePopup-title": "Liiguta ujula", "custom-field-stringtemplate": "String malli", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Eraldaja (kasutage või   tühiku jaoks)", "custom-field-stringtemplate-item-placeholder": "Vajutage enter, et lisada rohkem objekte", "creator": "Looja", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Failide aruanne", "reports": "Aruanded", "rulesReportTitle": "Reeglite aruanne", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Tekst", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Kokkupõrge", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/eu.i18n.json b/imports/i18n/data/eu.i18n.json index 791c52b6e..2f945ee2e 100644 --- a/imports/i18n/data/eu.i18n.json +++ b/imports/i18n/data/eu.i18n.json @@ -1,5 +1,5 @@ { - "accept": "Ados", + "accept": "Onartu", "act-activity-notify": "Jardueraren jakinarazpena", "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", @@ -49,7 +49,6 @@ "activity-archived": "%s biltegira eraman da", "activity-attached": "%s %s(e)ra erantsita", "activity-created": "%s sortuta", - "activity-changedListTitle": "izena aldatu zaio zerrendari: %s", "activity-customfield-created": "%s eremu pertsonalizatua sortu da", "activity-excluded": "%s %s(e)tik kanpo utzita", "activity-imported": "%s inportatuta %s(e)ra %s(e)tik", @@ -86,12 +85,10 @@ "add-card": "Gehitu txartela", "add-card-to-top-of-list": "Gehitu txartela zerrendaren goiko aldean", "add-card-to-bottom-of-list": "Gehitu txartela zerrendaren beheko aldean", - "setListWidthPopup-title": "Ezarri zabalerak", - "set-list-width": "Ezarri zabalerak", - "set-list-width-value": "Ezarri gutxieneko eta gehieneko zabalerak (pixel)", - "list-width-error-message": "Zerrenden zabalerak 100 baino handiagoak izan behar dira", - "keyboard-shortcuts-enabled": "Laster-teklak gaituta. Egin klik desgaitzeko.", - "keyboard-shortcuts-disabled": "Laster-teklak desgaituta. Egin klik gaitzeko.", + "setListWidthPopup-title": "Ezarri zerrendaren zabalera", + "set-list-width": "Ezarri zerrendaren zabalera", + "set-list-width-value": "Zerrendaren zabalera (pixelak)", + "list-width-error-message": "Zerrendaren zabalerak zenbaki oso positiboa izan behar du", "setSwimlaneHeightPopup-title": "Errailaren altuera ezarri", "set-swimlane-height": "Errailaren altuera ezarri", "set-swimlane-height-value": "Errailaren altuera (pixelak)", @@ -153,11 +150,11 @@ "board-background-image-url": "Atzeko planoko irudiaren URLa", "add-background-image": "Gehitu atzeko planoko irudia", "remove-background-image": "Kendu atzeko planoko irudia", - "show-at-all-boards-page" : "Erakutsi Arbel Guztien orrian", + "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "All Boards Settings", "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", "boardInfoOnMyBoards-title": "All Boards Settings", - "show-card-counter-per-list": "Erakutsi txartel kopurua zerrenda bakoitzeko", + "show-card-counter-per-list": "Show card count per list", "show-board_members-avatar": "Erakutsi arbeleko kideen avatarrak", "board-nb-stars": "%s izar", "board-not-found": "Ez da arbela aurkitu", @@ -213,14 +210,14 @@ "allowNonBoardMembers": "Baimendu saioa hasitako erabiltzaile guztiei", "vote-question": "Bozketaren galdera", "vote-public": "Erakutsi zeinek zer bozkatu duen", - "vote-for-it": "horretarako", - "vote-against": "aurka", + "vote-for-it": "for it", + "vote-against": "against", "deleteVotePopup-title": "Botoa ezabatu?", "vote-delete-pop": "Ezabatzea behin betirako da. Boto honekin lotutako ekintza guztiak galduko dira.", - "cardStartPlanningPokerPopup-title": "Hasi Planifikazio Poker bat", - "card-edit-planning-poker": "Editatu Planifikazio Pokerra", - "editPokerEndDatePopup-title": "Aldatu Planifikazio Pokerraren botoaren amaiera data", - "poker-question": "Planifikazio Pokerra", + "cardStartPlanningPokerPopup-title": "Start a Planning Poker", + "card-edit-planning-poker": "Edit Planning Poker", + "editPokerEndDatePopup-title": "Change Planning Poker vote end date", + "poker-question": "Planning Poker", "poker-one": "1", "poker-two": "2", "poker-three": "3", @@ -236,8 +233,8 @@ "poker-result-who": "Nor", "poker-replay": "Erreprodukzioa", "set-estimation": "Ezarri estimazioa", - "deletePokerPopup-title": "Ezabatu Planifikazio Pokerra?", - "poker-delete-pop": "Ezabatzea betirako da. Planifikazio Poker honekin lotutako ekintza guztiak galduko dituzu.", + "deletePokerPopup-title": "Delete planning poker?", + "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", "cardDeletePopup-title": "Ezabatu txartela?", "cardArchivePopup-title": "Gorde txartela?", "cardDetailsActionsPopup-title": "Txartel-ekintzak", @@ -266,9 +263,6 @@ "checklists": "Kontrol-zerrendak", "click-to-star": "Egin klik arbel honi izarra jartzeko", "click-to-unstar": "Egin klik arbel honi izarra kentzeko", - "click-to-enable-auto-width": "Zerrenda zabalera automatikoa desgaituta dago. Egin klik gaitzeko.", - "click-to-disable-auto-width": "Zerrenda zabalera automatikoa gaituta dago. Egin klik desgaitzeko.", - "auto-list-width": "Zerrenda zabalera automatikoa", "clipboard": "Kopiatu eta itsatsi edo arrastatu eta jaregin", "close": "Itxi", "close-board": "Itxi arbela", @@ -300,7 +294,6 @@ "color-white": "zuria", "color-yellow": "horia", "unset-color": "Zehaztu gabea", - "comments": "Iruzkinak", "comment": "Iruzkina", "comment-placeholder": "Idatzi iruzkin bat", "comment-only": "Iruzkinak besterik ez", @@ -383,7 +376,6 @@ "email-sent": "E-posta bidali da", "email-verifyEmail-subject": "Egiaztatu __siteName__ guneko zure e-posta helbidea.", "email-verifyEmail-text": "Kaixo __user__,\n\nZure e-posta kontua egiaztatzeko, egin klik beheko loturan.\n\n__url__\n\nEskerrik asko.", - "enable-vertical-scrollbars": "Gaitu korritze barra bertikalak", "enable-wip-limit": "WIP muga gaitu", "error-board-doesNotExist": "Arbel hau ez da existitzen", "error-board-notAdmin": "Arbel honetako kudeatzailea izan behar zara hori egin ahal izateko", @@ -451,7 +443,7 @@ "advanced-filter-description": "Iragazki aurreratuak operadoreak dituen kate bat idazteko aukera ematen du: == != <= >= && || ( ) Eragileen arteko bereizle gisa espazio bat erabiltzen da. Eremu pertsonalizatu guztiak iragazi ditzakezu haien izenak eta balioak idatziz. Adibidez: Eremua1 == Balioa1. Oharra: eremuek edo balioek zuriuneak badituzte, komatxo bakarrean bildu behar dituzu. Adibidez: 'Eremua 1' == 'Balioa 1'. Kontrol-karaktere bakarrak (' \\\\/) saltatzeko, \\\\ erabil dezakezu. Adibidez: Field1 == I\\\\'m. Gainera, hainbat baldintza konbina ditzakezu. Adibidez: F1 == V1 || F1 == V2. Normalean operadore guztiak ezkerretik eskuinera interpretatzen dira. Ordena alda dezakezu parentesi jarriz. Adibidez: F1 == V1 && ( F2 == V2 || F2 == V3 ). Testu-eremuak ere bilatu ditzakezu regex erabiliz: F1 == /Tes.*/i", "fullname": "Izen abizenak", "header-logo-title": "Itzuli zure arbelen orrira.", - "show-activities": "Erakutsi jarduerak", + "hide-system-messages": "Ezkutatu sistemako mezuak", "headerBarCreateBoardPopup-title": "Sortu arbela", "home": "Hasiera", "import": "Inportatu", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Zerrenda honetako atazen muga maximoa ezarri", "setWipLimitPopup-title": "WIP muga ezarri", - "shortcut-add-self": "Gehitu zeure burua uneko txartelera", "shortcut-assign-self": "Esleitu zure burua txartel honetara", "shortcut-autocomplete-emoji": "Automatikoki osatu emojia", "shortcut-autocomplete-members": "Automatikoki osatu kideak", "shortcut-clear-filters": "Garbitu iragazki guztiak", "shortcut-close-dialog": "Itxi elkarrizketa-koadroa", "shortcut-filter-my-cards": "Iragazi nire txartelak", - "shortcut-filter-my-assigned-cards": "Iragazi esleitutako txartelak", "shortcut-show-shortcuts": "Erakutsi lasterbideen zerrenda hau", "shortcut-toggle-filterbar": "Txandakatu iragazkiaren albo-barra", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Erabilitako denbora txartelak ditu", "time": "Ordua", "title": "Izenburua", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Jarraitzen", @@ -749,7 +738,7 @@ "deposit-subtasks-board": "Ipini azpiatazak arbel honetan:", "deposit-subtasks-list": "Landing list for subtasks deposited here:", "show-parent-in-minicard": "Erakutsi gurasoa minitxartelean:", - "description-on-minicard": "Deskribapena minitxartelean", + "description-on-minicard": "Description on minicard", "cover-attachment-on-minicard": "minitxartelaren azalaren irudia", "badge-attachment-on-minicard": "Eranskinen kopurua minitxartelean", "card-sorting-by-number-on-minicard": "Txartelak zenbakien arabera ordenatzea minitxartelean", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Ezin duzu txartel hau ezabatu estekatuta dituen txartelak ezabatu arte", "delete-linked-cards-before-this-list": "Ezin duzu zerrenda hau ezabatu honen txarteleei estekatutako txartelak ezabatu arte", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Ezkutatu amaitutako kontrol-zerrenda", "task": "Ataza", "create-task": "Sortu ataza", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Teams", "displayName": "Display Name", "shortName": "Short Name", - "autoAddUsersWithDomainName": "Gehitu automatikoki domeinu-izena duten erabiltzaileak", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Website", "person": "Person", "my-cards": "Nire txartelak", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Ez erakutsi arbeleko jarduerak arbel guztietan", - "now-activities-of-all-boards-are-hidden": "Orain arbel guztietako jarduera guztiak ezkutatuta daude", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "Kate txantiloia", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Sortzailea minitxartelean", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,42 +1191,39 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Testu-lerro bakoitza kontrol-zerrendako elementuetako bat bihurtzen da", - "newLineNewItem": "Testu-lerro bat = kontrol-zerrendako elementu bat", - "newlineBecomesNewChecklistItemOriginOrder": "Testu-lerro bakoitza kontrol-zerrendako elementuetako bat bihurtzen da, jatorrizko ordena", - "originOrder": "jatorrizko ordena", - "copyChecklist": "Kopiatu kontrol zerrrenda", - "copyChecklistPopup-title": "Kopiatu kontrol zerrenda", - "card-show-lists": "Aurkezpen zerrenden txartelak", - "subtaskActionsPopup-title": "Azpi-zereginen ekintzak", - "attachmentActionsPopup-title": "Eranskinen ekintzak", - "attachment-move-storage-fs": "Eraman eranskina fitxategi-sistemara", - "attachment-move-storage-gridfs": "Eraman eranskinak GridFSra", - "attachment-move-storage-s3": "Eraman eranskinak S3ra", - "attachment-move": "Mugitu eranskinak", - "move-all-attachments-to-fs": "Eraman eranskin guztiak fitxategi-sistemara", - "move-all-attachments-to-gridfs": "Eraman eranskin guztiak GridFSra", - "move-all-attachments-to-s3": "Eraman eranskin guztiak S3ra", - "move-all-attachments-of-board-to-fs": "Eraman taularen eranskin guztiak fitxategi-sistemara", - "move-all-attachments-of-board-to-gridfs": "Eraman arbelaren eranskin guztiak GridFSra", - "move-all-attachments-of-board-to-s3": "Eraman arbelaren eranskin guztiak S3ra", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", + "copyChecklist": "Copy Checklist", + "copyChecklistPopup-title": "Copy Checklist", + "card-show-lists": "Card Show Lists", + "subtaskActionsPopup-title": "Subtask Actions", + "attachmentActionsPopup-title": "Attachment Actions", + "attachment-move-storage-fs": "Move attachment to filesystem", + "attachment-move-storage-gridfs": "Move attachment to GridFS", + "attachment-move-storage-s3": "Move attachment to S3", + "attachment-move": "Move Attachment", + "move-all-attachments-to-fs": "Move all attachments to filesystem", + "move-all-attachments-to-gridfs": "Move all attachments to GridFS", + "move-all-attachments-to-s3": "Move all attachments to S3", + "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", + "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", + "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", "path": "Path", - "version-name": "Bertsioaren izena", - "size": "Tamaina", - "storage": "Biltegiratzea", - "action": "Ekintza", - "board-title": "Arbelaren titulua", + "version-name": "Version-Name", + "size": "Size", + "storage": "Storage", + "action": "Action", + "board-title": "Board Title", "attachmentRenamePopup-title": "Aldatu izena", - "uploading": "Igotzen", - "remaining_time": "Geratzen den denbora", - "speed": "Abiadura", - "progress": "Aurrerapena", + "uploading": "Uploading", + "remaining_time": "Remaining time", + "speed": "Speed", + "progress": "Progress", "password-again": "Password (again)", - "if-you-already-have-an-account": "Dagoeneko kontua baduzu", - "register": "Izena eman", - "forgot-password": "Ahaztu pasahitza", + "if-you-already-have-an-account": "If you already have an account", + "register": "Register", + "forgot-password": "Forgot password", "minicardDetailsActionsPopup-title": "Txartelaren zehetasunak", - "Mongo_sessions_count": "Mongo saioen kopurua", + "Mongo_sessions_count": "Mongo sessions count", "change-visibility": "Aldatu ikusgaitasuna", "max-upload-filesize": "Kargatzeko fitxategien gehienezko tamaina bytetan:", "allowed-upload-filetypes": "Kargatzeko baimendutako fitxategi motak:", @@ -1256,17 +1240,8 @@ "translation": "Itzulpena", "text": "Testua", "translation-text": "itzulpenaren testua", + "show-at-minicard": "Erakutsi minitxartelean", + "show-checklist-at-minicard": "Erakutsi kontrol-zerrenda minitxartelean", "show-subtasks-field": "azpi-zereginen eremua bezala", - "show-week-of-year": "Erakutsi rrteko aste zenbakia (ISO 8601)", - "convert-to-markdown": "Bihurtu markdown-era", - "import-board-zip": "Gehitu taula JSON fitxategiak dituen .zip fitxategia eta eranskinak dituzten taularen izenen azpidirektorioak", - "collapse": "Tolestu", - "uncollapse": "Zabaldu", - "hideCheckedChecklistItems": "Ezkutatu egiaztatutako zerrendako elementuak", - "hideAllChecklistItems": "Ezkutatu kontrol-zerrendako elementu guztiak", - "support": "Laguntza", - "supportPopup-title": "Laguntza", - "accessibility-page-enabled": "Irisgarritasun orria gaituta", - "accessibility-title": "Irisgarritasun gaia", - "accessibility-content": "Irisgarritasun edukia" + "convert-to-markdown": "Bihurtu markdown-era" } diff --git a/imports/i18n/data/fa-IR.i18n.json b/imports/i18n/data/fa-IR.i18n.json index 792856efd..91aae76ac 100644 --- a/imports/i18n/data/fa-IR.i18n.json +++ b/imports/i18n/data/fa-IR.i18n.json @@ -1,222 +1,219 @@ { "accept": "پذیرفتن", "act-activity-notify": "اعلان فعالیت", - "act-addAttachment": "ضمیمه __attachment__ به کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ اضافه شده", - "act-deleteAttachment": "ضمیمه __attachment__ از کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ حذف شده", - "act-addSubtask": "زیروظیفه __subtask__ به کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ اضافه شده", - "act-addLabel": "لیبل __label__ به کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ اضافه شده", - "act-addedLabel": "لیبل __label__ به کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ اضافه شده", - "act-removeLabel": "لیبل __label__ از کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ حذف شده", - "act-removedLabel": "لیبل __label__ از کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ حذف شده", - "act-addChecklist": "چک‌لیست __checklist__ به کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ اضافه شده", - "act-addChecklistItem": "آیتم چک‌لیست __checklistItem__ به چک‌لیست __checklist__ در کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ اضافه شده", - "act-removeChecklist": "چک‌لیست __checklist__ از کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ حذف شده", - "act-removeChecklistItem": "آیتم چک‌لیست __checklistItem__ از چک‌لیست __checkList__ در کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ حذف شده", - "act-checkedItem": "آیتم چک‌لیست __checklistItem__ از چک‌لیست __checklist__ در کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ انتخاب‌شده", - "act-uncheckedItem": "آیتم چک‌لیست __checklistItem__ از چک‌لیست __checklist__ در کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ از حالت انتخاب خارج شده", - "act-completeChecklist": "چک‌لیست __checklist__ در کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ کامل شده", - "act-uncompleteChecklist": "چک‌لیست __checklist__ در کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ ناتمام‌شده", - "act-addComment": "روی کارت __card__ نظر داد: __comment__ در لیست __list__ در مسیر __swimlane__ در برد __board__", - "act-editComment": "نظر روی کارت __card__ ویرایش شده: __comment__ در لیست __list__ در مسیر __swimlane__ در برد __board__", - "act-deleteComment": "نظر روی کارت __card__ حذف‌شده: __comment__ در لیست __list__ در مسیر __swimlane__ در برد __board__", - "act-createBoard": "برد __board__ ایجاد شده", - "act-createSwimlane": "مسیر __swimlane__ در برد __board__ ایجاد شده", - "act-createCard": "کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ ایجاد شده", - "act-createCustomField": "فیلد سفارشی __customField__ در برد __board__ ایجاد شده", - "act-deleteCustomField": "فیلد سفارشی __customField__ در برد __board__ حذف شده", - "act-setCustomField": "فیلد سفارشی __customField__ ویرایش شده: __customFieldValue__ در کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__", - "act-createList": "لیست __list__ به برد __board__ اضافه شده", - "act-addBoardMember": "عضو __member__ به برد __board__ اضافه شده", + "act-addAttachment": "افزودن پیوست __attachment__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-deleteAttachment": "پاک کردن پیوست __attachment__ از کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-addSubtask": "افزودن کار فرعی __subtask__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-addLabel": "افزودن برچسب __label__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-addedLabel": "افزودن برچسب __label__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-removeLabel": "برچسب برداشته شده __label__ از کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-removedLabel": "برچسب برداشته شده __label__ از کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-addChecklist": "افزودن چک لیست __checklist__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-addChecklistItem": "آیتم اضافه شده به چک لیست __checklistItem__ در چک لیست __checklist__ در کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-removeChecklist": "حذف چک لیست __checklist__ از کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-removeChecklistItem": "آیتم حذف شده از چک لیست __checklistItem__ در چک لیست __checkList__ در کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-checkedItem": "بررسی شده __checklistItem__ از چک لیست __checklist__ در کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-uncheckedItem": "بررسی نشده __checklistItem__ از چک لیست __checklist__ در کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-completeChecklist": "چک لیست کامل شده __checklist__ در کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-uncompleteChecklist": "چک لیست ناتمام __checklist__ در کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-addComment": "افزودن نظر روی کارت __card__: __comment__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-editComment": "اصلاح نظر روی کارت __card__: __comment__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-deleteComment": "حذف نظر از کارت __card__: __comment__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-createBoard": "برد ساخته شده __board__", + "act-createSwimlane": "created swimlane __swimlane__ در برد __board__", + "act-createCard": "ایجاد کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-createCustomField": "ساخت فیلد اختصاصی __customField__ در برد __board__", + "act-deleteCustomField": "حذف فیلد اختصاصی __customField__ در برد __board__", + "act-setCustomField": "اصلاح فیلد اختصاصی __customField__: __customFieldValue__ در کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-createList": "ایجاد لیست __list__ در برد __board__", + "act-addBoardMember": "افزودن عضو __member__ به برد __board__", "act-archivedBoard": "برد __board__ به آرشیو منتقل شد", - "act-archivedCard": "کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ آرشیو شده", - "act-archivedList": "لیست __list__ در مسیر __swimlane__ در برد __board__ آرشیو شده", - "act-archivedSwimlane": "مسیر __swimlane__ \\در برد __board__ آرشیو شده", - "act-importBoard": "برد __board__ وارد شده", - "act-importCard": "کارت __card__ را به لیست __list__ در مسیر __swimlane__ در برد __board__ وارد کرد", - "act-importList": "لیست __list__ را به مسیر __swimlane__ در برد __board__ وارد کرد", - "act-joinMember": "عضو __member__ را به کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ اضافه کرد", - "act-moveCard": "کارت __card__ را در برد __board__ از لیست __oldList__ در مسیر __oldSwimlane__ به لیست __list__ در مسیر __swimlane__ منتقل کرد", - "act-moveCardToOtherBoard": "کارت __card__ را از لیست __oldList__ در مسیر __oldSwimlane__ در برد __oldBoard__ به لیست __list__ در مسیر __swimlane__ در برد __board__ منتقل کرد", - "act-removeBoardMember": "عضو __member__ را از برد __board__ حذف کرد", - "act-restoredCard": "کارت __card__ را به لیست __list__ در مسیر __swimlane__ در برد __board__ بازگرداند", - "act-unjoinMember": "عضو __member__ را از کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ حذف کرد", + "act-archivedCard": "کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__ به آرشیو منتقل شد", + "act-archivedList": "لیست __list__ at swimlane __swimlane__ در برد __board__ به آرشیو منتقل شد", + "act-archivedSwimlane": "Swimlane __swimlane__ در برد __board__ به آرشیو منتقل شد", + "act-importBoard": "وارد کردن برد __board__", + "act-importCard": "وارد کردن کارت __card__ به لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-importList": "وارد کردن لیست __list__ to swimlane __swimlane__ در برد __board__", + "act-joinMember": "عضو کردن __member__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-moveCard": "انتقال کارت __card__ در برد __board__ از لیست __oldList__ at swimlane __oldSwimlane__ به لیست __list__ at swimlane __swimlane__", + "act-moveCardToOtherBoard": "انتقال کارت به برد دیگر __card__ از لیست __oldList__ at swimlane __oldSwimlane__ در برد __oldBoard__ به لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-removeBoardMember": "حذف عضویت __member__ از برد __board__", + "act-restoredCard": "کارت بازگردانی شده __card__ به لیست __list__ at swimlane __swimlane__ در برد __board__", + "act-unjoinMember": "حذف عضو __member__ از کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", "act-withBoardTitle": "__board__", "act-withCardTitle": "[__board__] __card__", - "actions": "اعمال", - "activities": "فعالیت‌ها", + "actions": "اقدامات", + "activities": "فعالیت ها", "activity": "فعالیت", - "activity-added": "%s به %s اضافه شد", - "activity-archived": "%s به آرشیو انتقال یافت", - "activity-attached": "%s به %s پیوست شد", - "activity-created": "%s ایجاد شد", - "activity-changedListTitle": "نام لیست به %s تغییر یافت", - "activity-customfield-created": "فیلد سفارشی %s ایجاد شد", - "activity-excluded": "%s از %s مستثنی گردید", - "activity-imported": "%s از %s وارد %s شد", - "activity-imported-board": "%s از %s وارد شد", - "activity-joined": "اتصال به %s", - "activity-moved": "%s از %s به %s منتقل شد", - "activity-on": "%s", - "activity-removed": "%s از %s حذف شد", - "activity-sent": "ارسال %s به %s", - "activity-unjoined": "قطع اتصال %s", - "activity-subtask-added": "زیروظیفه به %s اضافه شد", - "activity-checked-item": "%s مورد در چک‌لیست %s از %s انتخاب‌شده", - "activity-unchecked-item": "%s مورد در چک‌لیست %s از %s انتخاب‌نشده", - "activity-checklist-added": "چک‌لیست به %s اضافه شد", - "activity-checklist-removed": "یک چک‌لیست از %s حذف گردید", - "activity-checklist-completed": "چک‌لیست %s از %s کامل شده‌است", - "activity-checklist-uncompleted": "چک‌لیست %s از %s کامل نشده‌است", - "activity-checklist-item-added": "آیتم چک‌لیست به '%s' در %s اضافه شده", - "activity-checklist-item-removed": "یک آیتم چک‌لیست از '%s' در %s حذف شده.", - "add": "افزودن", - "activity-checked-item-card": "%s در چک‌لیست %s انتخاب‌شده", - "activity-unchecked-item-card": "%s در چک‌لیست %s از حالت انتخاب خارج شده", - "activity-checklist-completed-card": "چک‌لیست __checklist__ در کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ کامل شده", - "activity-checklist-uncompleted-card": "چک‌لیست %s تمام نشده", - "activity-editComment": "%s نظر ویرایش شد", - "activity-deleteComment": "%s نظر حذف شد", + "activity-added": "افزودن %s به %s", + "activity-archived": "%s moved to Archive", + "activity-attached": "attached %s to %s", + "activity-created": "created %s", + "activity-customfield-created": "created custom field %s", + "activity-excluded": "excluded %s from %s", + "activity-imported": "imported %s into %s from %s", + "activity-imported-board": "imported %s from %s", + "activity-joined": "joined %s", + "activity-moved": "moved %s from %s to %s", + "activity-on": "on %s", + "activity-removed": "removed %s from %s", + "activity-sent": "sent %s to %s", + "activity-unjoined": "unjoined %s", + "activity-subtask-added": "added subtask to %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", + "activity-checklist-added": "added checklist to %s", + "activity-checklist-removed": "removed a checklist from %s", + "activity-checklist-completed": "completed checklist %s of %s", + "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", + "activity-checklist-item-added": "added checklist item to '%s' in %s", + "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", + "add": "Add", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "چک لیست کامل شده __checklist__ در کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__", + "activity-checklist-uncompleted-card": "uncompleted the checklist %s", + "activity-editComment": "edited comment %s", + "activity-deleteComment": "deleted comment %s", "activity-receivedDate": "edited received date to %s of %s", "activity-startDate": "edited start date to %s of %s", "activity-dueDate": "edited due date to %s of %s", "activity-endDate": "edited end date to %s of %s", - "add-attachment": "افزودن ضمیمه", - "add-board": "افزودن برد", - "add-template": "Add Template", - "add-card": "افزودن کارت", - "add-card-to-top-of-list": "Add Card to Top of List", - "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "تنظیم ارتفاع مسیر", - "set-swimlane-height": "تنظیم ارتفاع مسیر", - "set-swimlane-height-value": "تنظیم ارتفاع مسیر ( پیکسل )", - "swimlane-height-error-message": "مقدار ارتقاع مسیر باید یک عدد مثبت باشد", - "add-swimlane": "افزودن مسیر شنا", - "add-subtask": "افزودن زیر وظیفه", - "add-checklist": "افزودن چک‌لیست", - "add-checklist-item": "افزودن مورد به چک‌لیست", + "add-attachment": "Add Attachment", + "add-board": "Add Board", + "add-template": "اضافه کردن قالب", + "add-card": "Add Card", + "add-card-to-top-of-list": "اضافه کردن کارت به بالای لیست", + "add-card-to-bottom-of-list": "اضافه کردن کارت به پایین لیست", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", + "add-swimlane": "Add Swimlane", + "add-subtask": "Add Subtask", + "add-checklist": "Add Checklist", + "add-checklist-item": "Add an item to checklist", "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", - "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "اضافه کردن عکس کاور به مینی کارت", - "add-label": "افزودن لیبل", - "add-list": "افزودن لیست", - "add-after-list": "اضافه کردن به بعد از لیست", - "add-members": "افزودن اعضا", - "added": "اضافه گردید", - "addMemberPopup-title": "اعضا", - "memberPopup-title": "تنظیمات اعضا", - "admin": "مدیر", - "admin-desc": "امکان دیدن و ویرایش کارت‌ها، حذف اعضا و تغییرِ تنظیماتِ برد.", - "admin-announcement": "اعلان", - "admin-announcement-active": "فعال کردن اعلان‌های سمت سیستم", - "admin-announcement-title": "اعلان از سوی مدیر", - "all-boards": "همه بردها", - "and-n-other-card": "و __count__ کارت دیگر", - "and-n-other-card_plural": "و __count__ کارت دیگر", - "apply": "اعمال", - "app-is-offline": "در حال بارگزاری لطفا منتظر بمانید. بازخوانی صفحه باعث از بین رفتن اطلاعات می شود. اگر بارگذاری کار نمی کند، لطفا بررسی کنید که این سرور متوقف نشده است.", - "app-try-reconnect": "Try to reconnect.", - "archive": "انتقال به آرشیو", - "archive-all": "انتقال همه به آرشیو", - "archive-board": "انتقال برد به آرشیو", - "archive-card": "انتقال کارت به آرشیو", - "archive-list": "انتقال لیست به آرشیو", - "archive-swimlane": "انتقال مسیر به آرشیو", - "archive-selection": "انتقال انتخاب شده ها به آرشیو", - "archiveBoardPopup-title": "آیا برد به آرشیو منتقل شود؟", - "archived-items": "آرشیو", - "archived-boards": "بردهای داخل آرشیو", - "restore-board": "بازیابی برد", - "no-archived-boards": "هیچ بردی داخل آرشیو نیست.", - "archives": "آرشیو", - "template": "قالب", - "templates": "قالب‌ها", + "convertChecklistItemToCardPopup-title": "تبدیل به کارت", + "add-cover": "Add cover image to minicard", + "add-label": "Add Label", + "add-list": "Add List", + "add-after-list": "Add After List", + "add-members": "Add Members", + "added": "Added", + "addMemberPopup-title": "Members", + "memberPopup-title": "Member Settings", + "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", + "app-try-reconnect": "تلاش برای ارتباط مجدد.", + "archive": "Move to Archive", + "archive-all": "Move All to Archive", + "archive-board": "Move Board to Archive", + "archive-card": "Move Card to Archive", + "archive-list": "Move List to Archive", + "archive-swimlane": "Move Swimlane to Archive", + "archive-selection": "Move selection to Archive", + "archiveBoardPopup-title": "Move Board to Archive?", + "archived-items": "Archive", + "archived-boards": "Boards in Archive", + "restore-board": "Restore Board", + "no-archived-boards": "No Boards in Archive.", + "archives": "Archive", + "template": "Template", + "templates": "Templates", "template-container": "Template Container", "add-template-container": "Add Template Container", - "assign-member": "انتصاب عضو", - "attached": "ضمیمه شده", - "attachment": "ضمیمه", - "attachment-delete-pop": "حذف پیوست دایمی و بی بازگشت خواهد بود.", - "attachmentDeletePopup-title": "آیا می خواهید ضمیمه را حذف کنید؟", - "attachments": "ضمائم", - "auto-watch": "اضافه شدن خودکار دیده‌بانی بردها زمانی که ایجاد می‌شوند", - "avatar-too-big": "عکس آواتار خیلی بزرگ است (__اندازه__ حداکثر)", - "back": "بازگشت", - "board-change-color": "تغییر رنگ", - "board-change-background-image": "تغییر تصویر پس زمینه", - "board-background-image-url": "لینک تصویر پس زمینه", - "add-background-image": "اضافه کردن تصویر پس زمینه", - "remove-background-image": "حذف تصویر پس زمینه", + "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 (__size__ max)", + "back": "Back", + "board-change-color": "Change color", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "All Boards Settings", "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", "boardInfoOnMyBoards-title": "All Boards Settings", "show-card-counter-per-list": "Show card count per list", "show-board_members-avatar": "Show Board members avatars", - "board-nb-stars": "%s ستاره", - "board-not-found": "برد پیدا نشد", + "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>.", - "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", - "boardChangeColorPopup-title": "تغییر پس زمینه برد", - "boardChangeBackgroundImagePopup-title": "تغییر تصویر پس زمینه", - "allBoardsChangeColorPopup-title": "تغییر رنگ", - "allBoardsChangeBackgroundImagePopup-title": "تغییر تصویر پس زمینه", - "boardChangeTitlePopup-title": "تغییر نام برد", - "boardChangeVisibilityPopup-title": "تغییر وضعیت نمایش", - "boardChangeWatchPopup-title": "تغییر دیده‌بانی", - "boardMenuPopup-title": "تنظیمات برد", - "allBoardsMenuPopup-title": "تنظمات", - "boardChangeViewPopup-title": "نمایش برد", - "boards": "بردها", - "board-view": "نمایش برد", - "board-view-cal": "تقویم", - "board-view-swimlanes": "مسیرها", - "board-view-collapse": "جمع کردن", - "board-view-gantt": "گانت", - "board-view-lists": "لیست‌ها", - "bucket-example": "برای مثال چیزی شبیه \"لیست سطل\"", - "cancel": "انصراف", - "card-archived": "این کارت به آرشیو انتقال داده‌شده‌است.", - "board-archived": "این برد به آرشیو انتقال داده‌شده‌است.", - "card-comments-title": "این کارت دارای %s نظر است.", - "card-delete-notice": "حذف دائمی. تمامی موارد مرتبط با این کارت از بین خواهند رفت.", - "card-delete-pop": "همه اقدامات از این پردازه حذف خواهد شد و امکان بازگرداندن کارت وجود نخواهد داشت.", - "card-delete-suggest-archive": "شما می توانید کارت را به بایگانی منتقل کنید تا آن را از هیئت مدیره حذف کنید و فعالیت را حفظ کنید.", - "card-archive-pop": "Card will not be visible at this list after archiving card.", - "card-archive-suggest-cancel": "You can later restore card from Archive.", - "card-due": "موعد", - "card-due-on": "موعد تا", - "card-spent": "زمان صرف شده", - "card-edit-attachments": "ویرایش ضمائم", - "card-edit-custom-fields": "ویرایش فیلدهای سفارشی", - "card-edit-labels": "ویرایش لیبل‌ها", - "card-edit-members": "ویرایش اعضا", - "card-labels-title": "لیبل‌های کارت را تغییر بده.", - "card-members-title": "اعضا ی برد را از/به کارت حذف/اضافه کنید.", - "card-start": "شروع", - "card-start-on": "شروع از", - "cardAttachmentsPopup-title": "ضمیمه از", - "cardCustomField-datePopup-title": "تغییر تاریخ", - "cardCustomFieldsPopup-title": "ویرایش فیلدهای سفارشی", - "cardStartVotingPopup-title": "شروع یک رای‌گیری", - "positiveVoteMembersPopup-title": "طرفداران", - "negativeVoteMembersPopup-title": "مخالفان", - "card-edit-voting": "ویرایش رای‌گیری", - "editVoteEndDatePopup-title": "تغییر تاریخ پایان رای‌گیری", - "allowNonBoardMembers": "اجازه دادن به همه کاربران وارد شده", - "vote-question": "سوال رای گیری", - "vote-public": "نمایش چه کسی به چه رای داده است", - "vote-for-it": "برای این", - "vote-against": "بر خلاف", - "deleteVotePopup-title": "رای‌گیری حذف شود؟", - "vote-delete-pop": "حذف کردن به صورت دائمی هست و قابل برگشت نیست. تمام اطلاعات مرتبط با این رای‌گیری حذف خواهدشد.", + "board-drag-drop-reorder-or-click-open": "برای مرتب سازی آیکونهای تخته درگ دراپ کنید.\nبرای باز کردن تخته روی آیکون کلیک کنید.", + "boardChangeColorPopup-title": "Change Board Background", + "boardChangeBackgroundImagePopup-title": "Change Background Image", + "allBoardsChangeColorPopup-title": "Change color", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", + "boardChangeTitlePopup-title": "Rename Board", + "boardChangeVisibilityPopup-title": "Change Visibility", + "boardChangeWatchPopup-title": "Change Watch", + "boardMenuPopup-title": "Board Settings", + "allBoardsMenuPopup-title": "Settings", + "boardChangeViewPopup-title": "Board View", + "boards": "Boards", + "board-view": "Board View", + "board-view-cal": "Calendar", + "board-view-swimlanes": "Swimlanes", + "board-view-collapse": "Collapse", + "board-view-gantt": "Gantt", + "board-view-lists": "Lists", + "bucket-example": "Like “Bucket List” for example", + "cancel": "Cancel", + "card-archived": "This card is moved to Archive.", + "board-archived": "This board is moved to Archive.", + "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 move a card to Archive to remove it from the board and preserve the activity.", + "card-archive-pop": "کارت بعد از آرشیو کردن در این لیست نمایش داده نخواهد شد.", + "card-archive-suggest-cancel": "بعداً میتوانید کارت را از آرشیو بازگردانید.", + "card-due": "Due", + "card-due-on": "Due on", + "card-spent": "Spent Time", + "card-edit-attachments": "Edit attachments", + "card-edit-custom-fields": "Edit custom fields", + "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", + "cardCustomField-datePopup-title": "Change date", + "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "card-edit-voting": "Edit voting", + "editVoteEndDatePopup-title": "Change vote end date", + "allowNonBoardMembers": "Allow all logged in users", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", + "deleteVotePopup-title": "Delete vote?", + "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", "cardStartPlanningPokerPopup-title": "Start a Planning Poker", "card-edit-planning-poker": "Edit Planning Poker", "editPokerEndDatePopup-title": "Change Planning Poker vote end date", @@ -230,849 +227,840 @@ "poker-twenty": "20", "poker-forty": "40", "poker-oneHundred": "100", - "poker-unsure": "?", - "poker-finish": "Finish", - "poker-result-votes": "Votes", - "poker-result-who": "Who", - "poker-replay": "Replay", - "set-estimation": "Set Estimation", + "poker-unsure": "؟", + "poker-finish": "پایان", + "poker-result-votes": "آراء", + "poker-result-who": "چه کسی", + "poker-replay": "بازپخش", + "set-estimation": "اعلام تخمین", "deletePokerPopup-title": "Delete planning poker?", "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", - "cardDeletePopup-title": "آیا می خواهید کارت را حذف کنید؟", - "cardArchivePopup-title": "Archive Card?", - "cardDetailsActionsPopup-title": "اعمال کارت", - "cardLabelsPopup-title": "لیبل ها", - "cardMembersPopup-title": "اعضا", - "cardMorePopup-title": "بیشتر", - "cardTemplatePopup-title": "ایجاد قالب", - "cards": "کارت‌ها", - "cards-count": "کارت‌ها", - "cards-count-one": "کارت", - "casSignIn": "ورود با استفاده از CAS", - "cardType-card": "کارت", - "cardType-linkedCard": "کارت‌های لینک‌شده", - "cardType-linkedBoard": "برد لینک‌شده", - "change": "تغییر", - "change-avatar": "تغییر آواتار", - "change-password": "تغییر کلمه عبور", - "change-permissions": "تغییر دسترسی‌ها", - "change-settings": "تغییر تنظیمات", - "changeAvatarPopup-title": "تغییر آواتار", - "changeLanguagePopup-title": "تغییر زبان", - "changePasswordPopup-title": "تغییر کلمه عبور", - "changePermissionsPopup-title": "تغییر دسترسی‌ها", - "changeSettingsPopup-title": "تغییر تنظیمات", - "subtasks": "زیر وظیفه", - "checklists": "چک‌لیست‌ها", - "click-to-star": "با کلیک کردن ستاره بدهید", - "click-to-unstar": "با کلیک کردن ستاره را کم کنید", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", - "clipboard": "ذخیره در حافظه ویا بردار-رهاکن", - "close": "بستن", - "close-board": "بستن برد", - "close-board-pop": "شما می توانید با کلیک کردن بر روی دکمه «بایگانی» از صفحه هدر، صفحه را بازگردانید.", - "close-card": "Close Card", - "color-black": "مشکی", - "color-blue": "آبی", - "color-crimson": "قرمز", - "color-darkgreen": "سبز تیره", - "color-gold": "طلایی", - "color-gray": "خاکستری", - "color-green": "سبز", - "color-indigo": "نیلی", - "color-lime": "لیمویی", - "color-magenta": "ارغوانی", - "color-mistyrose": "صورتی روشن", - "color-navy": "لاجوردی", - "color-orange": "نارنجی", - "color-paleturquoise": "فیروزه‌ای کدر", - "color-peachpuff": "هلویی", - "color-pink": "صورتی", - "color-plum": "بنفش کدر", - "color-purple": "بنفش", - "color-red": "قرمز", - "color-saddlebrown": "کاکائویی", - "color-silver": "نقره‌ای", - "color-sky": "آبی آسمانی", - "color-slateblue": "آبی فولادی", - "color-white": "سفید", - "color-yellow": "زرد", - "unset-color": "بازنشانی", - "comments": "نظرها", - "comment": "نظر", - "comment-placeholder": "درج نظر", - "comment-only": "فقط نظر", - "comment-only-desc": "فقط می‌تواند روی کارت‌ها نظر دهد.", - "comment-delete": "آیا مطمئنید که می خواهید این نظر را پاک کنید؟", - "deleteCommentPopup-title": "نظر پاک شود؟", - "no-comments": "هیچ کامنتی موجود نیست", - "no-comments-desc": "نظرات و فعالیت ها را نمی توان دید.", - "worker": "کارگر", - "worker-desc": "تنها می‌توانید کارت‌ها را جابجا کنید، آنها را به خود محول کنید و نظر دهید.", - "computer": "رایانه", - "confirm-subtask-delete-popup": "از حذف این زیر وظیفه اطمینان دارید؟", + "cardDeletePopup-title": "Delete Card?", + "cardArchivePopup-title": "کارت آرشیو شود؟", + "cardDetailsActionsPopup-title": "Card Actions", + "cardLabelsPopup-title": "Labels", + "cardMembersPopup-title": "Members", + "cardMorePopup-title": "More", + "cardTemplatePopup-title": "Create template", + "cards": "Cards", + "cards-count": "Cards", + "cards-count-one": "Card", + "casSignIn": "Sign In with CAS", + "cardType-card": "Card", + "cardType-linkedCard": "Linked Card", + "cardType-linkedBoard": "Linked Board", + "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", + "subtasks": "Subtasks", + "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 “Archive” button from the home header.", + "close-card": "بستن کارت", + "color-black": "black", + "color-blue": "blue", + "color-crimson": "crimson", + "color-darkgreen": "darkgreen", + "color-gold": "gold", + "color-gray": "gray", + "color-green": "green", + "color-indigo": "indigo", + "color-lime": "lime", + "color-magenta": "magenta", + "color-mistyrose": "mistyrose", + "color-navy": "navy", + "color-orange": "orange", + "color-paleturquoise": "paleturquoise", + "color-peachpuff": "peachpuff", + "color-pink": "pink", + "color-plum": "plum", + "color-purple": "purple", + "color-red": "red", + "color-saddlebrown": "saddlebrown", + "color-silver": "silver", + "color-sky": "sky", + "color-slateblue": "slateblue", + "color-white": "white", + "color-yellow": "yellow", + "unset-color": "Unset", + "comment": "Comment", + "comment-placeholder": "Write Comment", + "comment-only": "Comment only", + "comment-only-desc": "Can comment on cards only.", + "comment-delete": "مطمئن هستید که می‌خواهید این نظر را حذف کنید؟", + "deleteCommentPopup-title": "Delete comment?", + "no-comments": "No comments", + "no-comments-desc": "Can not see comments and activities.", + "worker": "Worker", + "worker-desc": "Can only move cards, assign itself to card and comment.", + "computer": "Computer", + "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", "subtaskDeletePopup-title": "Delete Subtask?", "checklistDeletePopup-title": "Delete Checklist?", - "copy-card-link-to-clipboard": "درج پیوند کارت در حافظه", + "copy-card-link-to-clipboard": "Copy card link to clipboard", "copy-text-to-clipboard": "Copy text to clipboard", - "linkCardPopup-title": "ارتباط دادن کارت", - "searchElementPopup-title": "جستجو", - "copyCardPopup-title": "کپی کارت", + "linkCardPopup-title": "Link Card", + "searchElementPopup-title": "Search", + "copyCardPopup-title": "Copy Card", "copyManyCardsPopup-title": "Copy Template to Many Cards", - "copyManyCardsPopup-instructions": "عنوان و توضیحات کارت مقصد در این قالب JSON", + "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", - "create": "ایجاد", - "createBoardPopup-title": "ایجاد برد", - "chooseBoardSourcePopup-title": "وارد کردن برد", - "createLabelPopup-title": "ایجاد لیبل", - "createCustomField": "ایجاد فیلد", - "createCustomFieldPopup-title": "ایجاد فیلد", - "current": "جاری", - "custom-field-delete-pop": "این اقدام فیلد سفارشی را بهمراه تمامی تاریخچه آن از کارت ها پاک می کند و برگشت پذیر نمی باشد", - "custom-field-checkbox": "جعبه انتخابی", - "custom-field-currency": "واحد پولی", - "custom-field-currency-option": "کد واحد پولی", - "custom-field-date": "تاریخ", - "custom-field-dropdown": "لیست افتادنی", - "custom-field-dropdown-none": "(هیچ)", - "custom-field-dropdown-options": "لیست امکانات", - "custom-field-dropdown-options-placeholder": "کلید Enter را جهت افزودن امکانات بیشتر فشار دهید", - "custom-field-dropdown-unknown": "(ناشناخته)", - "custom-field-number": "عدد", - "custom-field-text": "متن", - "custom-fields": "فیلدهای شخصی", - "date": "تاریخ", - "decline": "رد", - "default-avatar": "آواتار پیش‌فرض", - "delete": "حذف", - "deleteCustomFieldPopup-title": "آیا فیلد سفارشی پاک شود؟", - "deleteLabelPopup-title": "آیا می خواهید لیبل را حذف کنید؟", - "description": "توضیحات", - "disambiguateMultiLabelPopup-title": "عمل ابهام زدایی از لیبل", - "disambiguateMultiMemberPopup-title": "عمل ابهام زدایی از کاربر", - "discard": "لغو", - "done": "انجام شده", - "download": "دریافت", - "edit": "ویرایش", - "edit-avatar": "تغییر آواتار", - "edit-profile": "ویرایش پروفایل", + "create": "Create", + "createBoardPopup-title": "Create Board", + "chooseBoardSourcePopup-title": "Import board", + "createLabelPopup-title": "Create Label", + "createCustomField": "Create Field", + "createCustomFieldPopup-title": "Create Field", + "current": "current", + "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", + "custom-field-checkbox": "Checkbox", + "custom-field-currency": "Currency", + "custom-field-currency-option": "Currency Code", + "custom-field-date": "Date", + "custom-field-dropdown": "Dropdown List", + "custom-field-dropdown-none": "(none)", + "custom-field-dropdown-options": "List Options", + "custom-field-dropdown-options-placeholder": "Press enter to add more options", + "custom-field-dropdown-unknown": "(unknown)", + "custom-field-number": "Number", + "custom-field-text": "Text", + "custom-fields": "Custom Fields", + "date": "Date", + "decline": "Decline", + "default-avatar": "Default avatar", + "delete": "Delete", + "deleteCustomFieldPopup-title": "Delete Custom Field?", + "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": "تغییر تاریخ آغاز", - "editCardDueDatePopup-title": "تغییر تاریخ پایان", - "editCustomFieldPopup-title": "ویرایش فیلد", + "editCardStartDatePopup-title": "Change start date", + "editCardDueDatePopup-title": "Change due date", + "editCustomFieldPopup-title": "Edit Field", "addReactionPopup-title": "Add reaction", - "editCardSpentTimePopup-title": "تغییر زمان صرف شده", - "editLabelPopup-title": "تغیر لیبل", - "editNotificationPopup-title": "اصلاح اعلان", - "editProfilePopup-title": "ویرایش پروفایل", - "email": "پست الکترونیک", - "email-enrollAccount-subject": "یک حساب کاربری برای شما در __siteName__ ایجاد شد", - "email-enrollAccount-text": "سلام __user__ \nبرای شروع به استفاده از این سرویس برروی آدرس زیر کلیک کنید.\n__url__\nبا تشکر.", - "email-fail": "عدم موفقیت در فرستادن رایانامه", - "email-fail-text": "خطا در تلاش برای فرستادن رایانامه", - "email-invalid": "رایانامه نادرست", - "email-invite": "دعوت از طریق رایانامه", - "email-invite-subject": "__inviter__ برای شما دعوت نامه ارسال کرده است", - "email-invite-text": "__User__ عزیز\n __inviter__ شما را به عضویت برد \"__board__\" برای همکاری دعوت کرده است.\nلطفا لینک زیر را دنبال کنید، باتشکر:\n__url__", - "email-resetPassword-subject": "تنظیم مجدد کلمه عبور در __siteName__", - "email-resetPassword-text": "سلام __user__\nجهت تنظیم مجدد کلمه عبور آدرس زیر را دنبال نمایید، باتشکر:\n__url__", - "email-sent": "نامه الکترونیکی فرستاده شد", - "email-verifyEmail-subject": "تایید آدرس الکترونیکی شما در __siteName__", - "email-verifyEmail-text": "سلام __user__\nبه منظور تایید آدرس الکترونیکی حساب خود، آدرس زیر را دنبال نمایید، باتشکر:\n__url__.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", + "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": "برد مورد نظر وجود ندارد", - "error-board-notAdmin": "شما جهت انجام آن باید مدیر برد باشید", - "error-board-notAMember": "شما برای انجام آن، باید عضو این برد باشید", - "error-json-malformed": "متن در قالب صحیح Json نمی باشد.", - "error-json-schema": "داده‌های Json شما، شامل اطلاعات صحیح در قالب درستی نمی‌باشد.", + "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-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ", - "error-list-doesNotExist": "این لیست موجود نیست", - "error-user-doesNotExist": "این کاربر وجود ندارد", - "error-user-notAllowSelf": "عدم امکان دعوت خود", - "error-user-notCreated": "این کاربر ایجاد نشده است", - "error-username-taken": "این نام کاربری استفاده شده است", - "error-orgname-taken": "نام سازمان پیشتر ثبت شده است", - "error-teamname-taken": "نام تیم پیشتر ثبت شده است", - "error-email-taken": "رایانامه توسط گیرنده دریافت شده است", - "export-board": "انتقال به بیرون برد", - "export-board-json": "اکسپورت برد به JSON", - "export-board-csv": "اکسپورت برد به CSV", - "export-board-tsv": "اکسپورت برد به TSV", - "export-board-excel": "خروجی برد به اکسل", - "user-can-not-export-excel": "کاربر قادر به گرفتن خروجی اکسلب نیست", - "export-board-html": "اکسپورت برد به HTML", + "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-orgname-taken": "This organization name is already taken", + "error-teamname-taken": "This team name is already taken", + "error-email-taken": "Email has already been taken", + "export-board": "Export board", + "export-board-json": "Export board to JSON", + "export-board-csv": "Export board to CSV", + "export-board-tsv": "Export board to TSV", + "export-board-excel": "Export board to Excel", + "user-can-not-export-excel": "User can not export Excel", + "export-board-html": "Export board to HTML", "export-card": "Export card", "export-card-pdf": "Export card to PDF", "user-can-not-export-card-to-pdf": "User can not export card to PDF", - "exportBoardPopup-title": "انتقال به بیرون برد", + "exportBoardPopup-title": "Export board", "exportCardPopup-title": "Export card", - "sort": "مرتب سازی", + "sort": "Sort", "sorted": "Sorted", "remove-sort": "Remove sort", - "sort-desc": "برای مرتب سازی لیست کلیک کنید", - "list-sort-by": "مرتب سازی لیست بر اساس:", - "list-label-modifiedAt": "زمان دسترسی قبلی", - "list-label-title": "نام لیست", - "list-label-sort": "دلخواه شما", + "sort-desc": "Click to Sort List", + "list-sort-by": "Sort the List By:", + "list-label-modifiedAt": "Last Access Time", + "list-label-title": "Name of the List", + "list-label-sort": "Your Manual Order", "list-label-short-modifiedAt": "(L)", "list-label-short-title": "(N)", "list-label-short-sort": "(M)", - "filter": "فیلتر", - "filter-cards": "فیلتر کارت‌ها یا لیست‌ها", - "filter-dates-label": "فیلتر با تاریخ", - "filter-no-due-date": "بدون تاریخ مقرر", - "filter-overdue": "منقضی شده", - "filter-due-today": "مقتضی امروز", - "filter-due-this-week": "مقتضی این هفته", - "filter-due-next-week": "مقتضی هفته بعد", - "filter-due-tomorrow": "مقتضی فردا", - "list-filter-label": "فیلتر لیست بر اساس عنوان", - "filter-clear": "حذف فیلتر", - "filter-labels-label": "فیلتر کردن با لیبل", - "filter-no-label": "بدون لیبل", - "filter-member-label": "فیلتر کردن با عضو", - "filter-no-member": "بدون عضو", - "filter-assignee-label": "فیلتر کردن با مسئول", - "filter-no-assignee": "منتصب‌نشده", - "filter-custom-fields-label": "فیلتر کردن با فیلدهای سفارشی", - "filter-no-custom-fields": "هیچ فیلد سفارشی ای وجود ندارد", - "filter-show-archive": "نمایش لیست‌های آرشیو شده", - "filter-hide-empty": "مخفی کردن لیست‌های خالی", - "filter-on": "فیلتر فعال است", - "filter-on-desc": "شما درحال فیلتر کارت‌های این برد هستید. برای ویرایش فیلتر کلیک نمایید.", - "filter-to-selection": "فیلتر برای موارد انتخابی", - "other-filters-label": "فیلترهای دیگر", - "advanced-filter-label": "فیلتر پیشرفته", + "filter": "Filter", + "filter-cards": "Filter Cards or Lists", + "filter-dates-label": "Filter by date", + "filter-no-due-date": "No due date", + "filter-overdue": "Overdue", + "filter-due-today": "Due today", + "filter-due-this-week": "Due this week", + "filter-due-next-week": "Due next week", + "filter-due-tomorrow": "Due tomorrow", + "list-filter-label": "Filter List by Title", + "filter-clear": "Clear filter", + "filter-labels-label": "Filter by label", + "filter-no-label": "No label", + "filter-member-label": "Filter by member", + "filter-no-member": "No member", + "filter-assignee-label": "Filter by assignee", + "filter-no-assignee": "No assignee", + "filter-custom-fields-label": "Filter by Custom Fields", + "filter-no-custom-fields": "No Custom Fields", + "filter-show-archive": "Show archived lists", + "filter-hide-empty": "Hide empty lists", + "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", + "other-filters-label": "Other Filters", + "advanced-filter-label": "Advanced Filter", "advanced-filter-description": "فیلتر پیشرفته اجازه می دهد تا برای نوشتن رشته حاوی اپراتورهای زیر: ==! = <=> = && || () یک فضای به عنوان یک جداساز بین اپراتورها استفاده می شود. با تایپ کردن نام ها و مقادیر آنها می توانید برای تمام زمینه های سفارشی فیلتر کنید. به عنوان مثال: Field1 == Value1. نکته: اگر فیلدها یا مقادیر حاوی فضاها باشند، شما باید آنها را به یک نقل قول کپسول کنید. برای مثال: 'فیلد 1' == 'مقدار 1'. برای تک تک کاراکترهای کنترل (\\\\) که می توانید از آنها استفاده کنید، می توانید از \\\\ استفاده کنید. به عنوان مثال: Field1 == I\\\\'m. همچنین شما می توانید شرایط مختلف را ترکیب کنید. برای مثال: F1 == V1 || F1 == V2. به طور معمول همه اپراتورها از چپ به راست تفسیر می شوند. شما می توانید سفارش را با قرار دادن براکت تغییر دهید. برای مثال: F1 == V1 && (F2 == V2 || F2 == V3). همچنین می توانید فیلدهای متنی را با استفاده از regex جستجو کنید: F1 == /Tes.*/i", - "fullname": "نام و نام خانوادگی", - "header-logo-title": "بازگشت به صفحه بردها.", - "show-activities": "نمایش فعالیت ها", - "headerBarCreateBoardPopup-title": "ایجاد برد", - "home": "خانه", - "import": "وارد کردن", - "impersonate-user": "جعل هویت کاربر", - "link": "ارتباط", - "import-board": "وارد کردن برد", - "import-board-c": "وارد کردن برد", - "import-board-title-trello": "وارد کردن برد از Trello", - "import-board-title-wekan": "بارگذاری برد ها از آخرین خروجی", - "import-board-title-csv": "وارد کردن برد از CSV/TSV", - "from-trello": "از Trello", - "from-wekan": "از آخرین خروجی", - "from-csv": "از CSV/TSV", - "import-board-instruction-trello": "در Trello-ی خود به 'Menu'، 'More'، 'Print'، 'Export to JSON رفته و متن نهایی را دراینجا وارد نمایید.", - "import-board-instruction-csv": "مقادیر جداشده با کاما (CSV)/مقادیر جداشده با تبِ (TSV) خود را پیست کنید.", - "import-board-instruction-wekan": "در هیئت مدیره خود، به 'Menu' بروید، سپس 'Export Board'، و متن را در فایل دانلود شده کپی کنید.", - "import-board-instruction-about-errors": "اگر هنگام بازگردانی با خطا مواجه شدید بعضی اوقات بازگردانی انجام می شود و تمامی برد ها در داخل صفحه All Boards هستند", - "import-json-placeholder": "اطلاعات Json معتبر خود را اینجا وارد کنید.", - "import-csv-placeholder": "اطلاعات CSV/TSV خود را اینجا پیست کنید.", - "import-map-members": "نگاشت اعضا", - "import-members-map": "برد ها بازگردانده شده تعدادی کاربر دارند . لطفا کاربر های که می خواهید را انتخاب نمایید", - "import-members-map-note": "نکته: اعضا بدون نقشه به کاربر فعلی واگذار می شوند", - "import-show-user-mapping": "بررسی نقشه کاربران", - "import-user-select": "کاربر فعلی خود را انتخاب نمایید اگر میخواهیپ بعنوان کاربر باشد", - "importMapMembersAddPopup-title": "انتخاب کاربر", - "info": "نسخه", - "initials": "تخصیصات اولیه", - "invalid-date": "تاریخ نامعتبر", - "invalid-time": "زمان نامعتبر", - "invalid-user": "کاربر نامعتبر", - "joined": "متصل", - "just-invited": "هم اکنون، شما به این برد دعوت شده‌اید.", - "keyboard-shortcuts": "میانبر کلیدها", - "label-create": "ایجاد لیبل", - "label-default": "%s لیبل(پیش فرض)", - "label-delete-pop": "این اقدام، لیبل را از همه کارت‌ها پاک خواهد کرد و تاریخچه آن را نیز از بین می‌برد.", - "labels": "لیبل ها", - "language": "زبان", - "last-admin-desc": "شما نمی توانید نقش ـroleـ را تغییر دهید چراکه باید حداقل یک مدیری وجود داشته باشد.", - "leave-board": "خروج از برد", + "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", + "impersonate-user": "Impersonate user", + "link": "Link", + "import-board": "import board", + "import-board-c": "Import board", + "import-board-title-trello": "Import board from Trello", + "import-board-title-wekan": "Import board from previous export", + "import-board-title-csv": "Import board from CSV/TSV", + "from-trello": "From Trello", + "from-wekan": "From previous export", + "from-csv": "From CSV/TSV", + "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", + "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", + "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", + "import-json-placeholder": "Paste your valid JSON data here", + "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", + "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", + "import-show-user-mapping": "Review members mapping", + "import-user-select": "Pick your existing user you want to use as this member", + "importMapMembersAddPopup-title": "Select member", + "info": "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": "ارجاع به این کارت", - "list-archive-cards": "انتقال تمامی کارت های این لیست به آرشیو", - "list-archive-cards-pop": "این کارتباعث حذف تمامی کارت های این لیست از برد می شود . برای مشاهده کارت ها در آرشیو و برگرداندن آنها به برد بر بروی \"Menu\">\"Archive\" کلیک نمایید", - "list-move-cards": "انتقال تمام کارت های این لیست", - "list-select-cards": "انتخاب تمام کارت های این لیست", - "set-color-list": "انتخاب رنگ", - "listActionPopup-title": "لیست اقدامات", - "settingsUserPopup-title": "تنظیمات کاربر", - "settingsTeamPopup-title": "Team Settings", + "link-card": "Link to this card", + "list-archive-cards": "Move all cards in this list to Archive", + "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", + "list-move-cards": "Move all cards in this list", + "list-select-cards": "Select all cards in this list", + "set-color-list": "Set Color", + "listActionPopup-title": "List Actions", + "settingsUserPopup-title": "User Settings", + "settingsTeamPopup-title": "تنظمیات تیم", "settingsOrgPopup-title": "Organization Settings", "swimlaneActionPopup-title": "Swimlane Actions", - "swimlaneAddPopup-title": "اضافه کردن مسیر", - "listImportCardPopup-title": "وارد کردن کارت Trello", - "listImportCardsTsvPopup-title": "وارد کردن CSV/TSV اکسل", - "listMorePopup-title": "بیشتر", - "link-list": "پیوند به این فهرست", + "swimlaneAddPopup-title": "Add a Swimlane below", + "listImportCardPopup-title": "Import a Trello card", + "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", + "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": "شما می توانید لیست را به آرشیو انتقال دهید تا آن را از برد حذف نمایید و فعالیت های خود را حفظ نمایید", - "lists": "لیست‌ها", - "swimlanes": "مسیرها", - "log-out": "خروج", - "log-in": "ورود", - "loginPopup-title": "ورود", - "memberMenuPopup-title": "تنظیمات اعضا", - "members": "اعضا", - "menu": "منو", - "move-selection": "انتقال مورد انتخابی", - "moveCardPopup-title": "انتقال کارت", - "moveCardToBottom-title": "انتقال به پایین", - "moveCardToTop-title": "انتقال به بالا", - "moveSelectionPopup-title": "انتقال مورد انتخابی", - "multi-selection": "امکان چند انتخابی", - "multi-selection-label": "تغییر لیبل انتخاب‌شده‌ها", - "multi-selection-member": "تغییر عضو برای انتخاب‌شده‌ها", - "multi-selection-on": "حالت چند انتخابی روشن است", - "muted": "بی صدا", - "muted-info": "شما هیچگاه از تغییرات این برد مطلع نخواهید شد", - "my-boards": "بردهای من", - "name": "نام", - "no-archived-cards": "هیچ کارتی در آرشیو موجود نمی باشد", - "no-archived-lists": "هیچ لیستی در آرشیو موجود نمی باشد", - "no-archived-swimlanes": "هیچ مسیری در آرشیو موجود نمی باشد", - "no-results": "بدون نتیجه", - "normal": "عادی", - "normal-desc": "امکان نمایش و تنظیم کارت بدون امکان تغییر تنظیمات", - "not-accepted-yet": "دعوت نامه هنوز پذیرفته نشده است", + "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.", + "lists": "Lists", + "swimlanes": "Swimlanes", + "log-out": "Log Out", + "log-in": "Log In", + "loginPopup-title": "Log In", + "memberMenuPopup-title": "Member Settings", + "members": "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-label": "Set label for selection", + "multi-selection-member": "Set member for 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 cards in Archive.", + "no-archived-lists": "No lists in Archive.", + "no-archived-swimlanes": "No swimlanes in Archive.", + "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 creator or member", - "notify-watch": "اطلاع رسانی از هرگونه تغییر در بردها، لیست‌ها یا کارت‌هایی که از آنها دیده‌بانی می‌کنید", - "optional": "انتخابی", - "or": "یا", - "page-maybe-private": "این صفحه ممکن است خصوصی باشد. شما با<a href='%s'>ورود</a> می‌توانید آن را ببینید.", - "page-not-found": "صفحه پیدا نشد.", - "password": "کلمه عبور", - "paste-or-dragdrop": "جهت چسباندن، یا برداشتن-رهاسازی فایل تصویر به آن (تصویر)", - "participating": "شرکت کنندگان", - "preview": "پیش‌نمایش", - "previewAttachedImagePopup-title": "پیش‌نمایش", - "previewClipboardImagePopup-title": "پیش‌نمایش", - "private": "خصوصی", - "private-desc": "این برد خصوصی است. فقط افراد اضافه شده به برد می‌توانند مشاهده و ویرایش کنند.", - "profile": "حساب کاربری", - "public": "عمومی", - "public-desc": "این برد عمومی است. برای هر کسی با آدرس و یا جستجو در موتورها مانند گوگل قابل مشاهده است. فقط افرادی که به برد اضافه شده‌اند امکان ویرایش دارند.", - "quick-access-description": "جهت افزودن یک برد به اینجا، آن را ستاره دار نمایید.", - "remove-cover": "حذف تصویر کاور از مینی کارت", - "remove-from-board": "حذف از برد", - "remove-label": "حذف لیبل", - "listDeletePopup-title": "حذف فهرست؟", - "remove-member": "حذف عضو", - "remove-member-from-card": "حذف از کارت", - "remove-member-pop": "آیا __name__ (__username__) را از __boardTitle__ حذف می‌کنید؟ کاربر از تمام کارت‌ها در این برد حذف خواهد شد. آنها از این اقدام مطلع خواهند شد.", - "removeMemberPopup-title": "آیا می خواهید کاربر را حذف کنید؟", - "rename": "تغیر نام", - "rename-board": "تغییر نام برد", - "restore": "بازیابی", + "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 image from minicard", + "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", "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", "rescue-card-description-dialogue": "Overwrite current card description with your changes?", - "save": "ذخیره", - "search": "جستجو", - "rules": "قواعد", - "search-cards": "جستجو در عناوین، توضیحات و فیلدهای سفارشیِ کارت‌ها/لیست‌ها در این برد", - "search-example": "کلمه مورد جستجو را وارد و اینتر را بزنید", - "select-color": "انتخاب رنگ", - "select-board": "انتخاب برد", - "set-wip-limit-value": "تعیین بیشینه تعداد وظایف در این فهرست", + "save": "Save", + "search": "Search", + "rules": "Rules", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", + "search-example": "Write text you search and press Enter", + "select-color": "Select Color", + "select-board": "Select Board", + "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "اضافه کردن خودتان به کارت", - "shortcut-assign-self": "انتصاب خود به کارت فعلی", - "shortcut-autocomplete-emoji": "تکمیل خودکار شکلکها", - "shortcut-autocomplete-members": "تکمیل خودکار کاربرها", - "shortcut-clear-filters": "حذف تمامی صافی‌ها ـ فیلترها ـ", - "shortcut-close-dialog": "بستن محاوره", - "shortcut-filter-my-cards": "کارت های من", - "shortcut-filter-my-assigned-cards": "فیلتر کارت های اختصاص داده شده به من", - "shortcut-show-shortcuts": "بالا آوردن میانبر این لیست", - "shortcut-toggle-filterbar": "ضامن نوار جداکننده فیلتر", - "shortcut-toggle-searchbar": "کلید نوار جستجوی جانبی", - "shortcut-toggle-sidebar": "ضامن نوار جداکننده برد", - "show-cards-minimum-count": "نمایش تعداد کارتها اگر لیست شامل بیشتراز", - "sidebar-open": "بازکردن جداکننده", - "sidebar-close": "بستن جداکننده", - "signupPopup-title": "ایجاد یک کاربر", - "star-board-title": "برای ستاره دار کردن این برد کلیک کنید. این در بالای لیست بردهای شما نمایش داده خواهد شد.", - "starred-boards": "بردهای ستاره دار", - "starred-boards-description": "بردهای ستاره دار در بالای لیست بردها نمایش داده می‌شود.", - "subscribe": "عضوشدن", - "team": "تیم", - "this-board": "این برد", - "this-card": "این کارت", - "spent-time-hours": "زمان صرف شده (ساعت)", + "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-searchbar": "Toggle Search 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": "زمان", - "title": "عنوان", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", + "time": "Time", + "title": "Title", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", - "tracking": "پیگردی", - "tracking-info": "شما از هرگونه تغییر در کارتهایی که بعنوان ایجاد کننده ویا عضو آن هستید، آگاه خواهید شد", - "type": "نوع", - "unassign-member": "عدم انتصاب کاربر", - "unsaved-description": "شما توضیحات ذخیره نشده دارید.", - "unwatch": "عدم دیده‌بانی", - "upload": "آپلود", - "upload-avatar": "ارسال آواتار", - "uploaded-avatar": "آواتار آپلود شد", - "custom-top-left-corner-logo-image-url": "آدرس تصویر لوگوی سفارشی در گوشه چپ و بالا", - "custom-top-left-corner-logo-link-url": "آدرس لینک لوگوی سفارشی در گوشه چپ و بالا", - "custom-top-left-corner-logo-height": "ارتفاع لوگوی سفارشی در گوشه چپ و بالا. پیش‌فرض: ۲۷", - "custom-login-logo-image-url": "آدرس تصویر لوگوی سفارشی در لاگین", - "custom-login-logo-link-url": "آدرس لینک لوگوی سفارشی در لاگین", + "tracking": "Tracking", + "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", + "type": "Type", + "unassign-member": "Unassign member", + "unsaved-description": "You have an unsaved description.", + "unwatch": "Unwatch", + "upload": "Upload", + "upload-avatar": "Upload an avatar", + "uploaded-avatar": "Uploaded an avatar", + "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", + "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", + "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", + "custom-login-logo-image-url": "Custom Login Logo Image URL", + "custom-login-logo-link-url": "Custom Login Logo Link URL", "custom-help-link-url": "Custom Help Link URL", - "text-below-custom-login-logo": "متن پایین لوگوی سفارشی در فرم لاگین", + "text-below-custom-login-logo": "Text below Custom Login Logo", "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", - "username": "نام کاربری", - "import-usernames": "درون ریزی کاربران", - "view-it": "مشاهده", - "warn-list-archived": "اخطار: این کارت در یک لیست در آرشیو موجود می‌باشد", - "watch": "دیده‌بانی", - "watching": "درحال دیده‌بانی", - "watching-info": "شما از هر تغییری در این برد آگاه خواهید شد", - "welcome-board": "برد خوش‌آمدگویی", - "welcome-swimlane": "نقطع عطف 1", - "welcome-list1": "پایه ای ها", - "welcome-list2": "پیشرفته", - "card-templates-swimlane": "قالب‌های کارت", - "list-templates-swimlane": "لیست قالب‌ها", - "board-templates-swimlane": "قالب‌های برد", - "what-to-do": "چه کاری می خواهید انجام دهید؟", - "wipLimitErrorPopup-title": "محدودی نامعتبر WIP", + "username": "Username", + "import-usernames": "Import Usernames", + "view-it": "View it", + "warn-list-archived": "warning: this card is in an list at Archive", + "watch": "Watch", + "watching": "Watching", + "watching-info": "You will be notified of any change in this board", + "welcome-board": "Welcome Board", + "welcome-swimlane": "Milestone 1", + "welcome-list1": "Basics", + "welcome-list2": "Advanced", + "card-templates-swimlane": "Card Templates", + "list-templates-swimlane": "List Templates", + "board-templates-swimlane": "Board Templates", + "what-to-do": "What do you want to do?", + "wipLimitErrorPopup-title": "Invalid WIP Limit", "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", - "admin-panel": "پیشخوان مدیریتی", - "settings": "تنظمات", - "people": "افراد", - "registration": "ثبت نام", - "disable-self-registration": "‌غیرفعال‌سازی خودثبت‌نامی", + "admin-panel": "Admin Panel", + "settings": "Settings", + "people": "People", + "registration": "Registration", + "disable-self-registration": "Disable Self-Registration", "disable-forgot-password": "Disable Forgot Password", - "invite": "دعوت", - "invite-people": "دعوت از افراد", - "to-boards": "به برد(ها)", - "email-addresses": "نشانی رایانامه", - "smtp-host-description": "آدرس سرور SMTP ای که پست الکترونیکی شما برروی آن است", - "smtp-port-description": "شماره درگاه ـPortـ ای که سرور SMTP شما جهت ارسال از آن استفاده می کند", - "smtp-tls-description": "پشتیبانی از TLS برای سرور SMTP", - "smtp-host": "آدرس سرور SMTP", - "smtp-port": "شماره درگاه ـPortـ سرور SMTP", - "smtp-username": "نام کاربری", - "smtp-password": "کلمه عبور", - "smtp-tls": "پشتیبانی از TLS", - "send-from": "از", - "send-smtp-test": "فرستادن رایانامه آزمایشی به خود", - "invitation-code": "کد دعوت نامه", - "email-invite-register-subject": "__inviter__ برای شما دعوت نامه ارسال کرده است", - "email-invite-register-text": "__user__ عزیز,\n\n__inviter__ شما را به این برد دعوت کرده است.\n\nلطفا روی لینک زیر کلیک نمایید:\n__url__\n\nو کد معرفی شما: __icode__\n\nبا تشکر.", - "email-smtp-test-subject": "SMTP تست ایمیل", - "email-smtp-test-text": "با موفقیت، یک رایانامه را فرستادید", - "error-invitation-code-not-exist": "چنین کد دعوتی یافت نشد", - "error-notAuthorized": "شما مجاز به دیدن این صفحه نیستید.", - "webhook-title": "نام وب‌هوک", - "webhook-token": "توکن (انتخابی برای اعتبارسنجی)", + "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", + "email-smtp-test-subject": "SMTP Test Email", + "email-smtp-test-text": "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.", + "webhook-title": "Webhook Name", + "webhook-token": "Token (Optional for Authentication)", "outgoing-webhooks": "Outgoing Webhooks", - "bidirectional-webhooks": "وب‌هوک two-way", + "bidirectional-webhooks": "Two-Way Webhooks", "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "فیلتر عنوان کارت", - "disable-webhook": "حذف این وب‌هوک", - "global-webhook": "وب‌هوک‌های سراسری", + "boardCardTitlePopup-title": "Card Title Filter", + "disable-webhook": "Disable This Webhook", + "global-webhook": "Global Webhooks", "new-outgoing-webhook": "New Outgoing Webhook", - "no-name": "(ناشناخته)", - "Node_version": "نسخه Node", - "Meteor_version": "نسخه متئور", - "MongoDB_version": "ورژن MongoDB", - "MongoDB_storage_engine": "موتور ذخیره سازی MongoDB", - "MongoDB_Oplog_enabled": "MongoDB Oplog فعال است", - "OS_Arch": "معماری سیستم‌عامل", - "OS_Cpus": "تعدا سی‌پی‌یو سیستم‌عامل", - "OS_Freemem": "حافظه سیستم‌عامل", - "OS_Loadavg": "میانگین لود سیستم‌عامل", - "OS_Platform": "پلتفرم سیستم‌عامل", - "OS_Release": "انتشار سیستم‌عامل", - "OS_Totalmem": "حافظه کل سیستم‌عامل", - "OS_Type": "نوع سیستم‌عامل", - "OS_Uptime": "آپ‌تایم سیستم‌عامل", - "days": "روزها", - "hours": "ساعت", - "minutes": "دقیقه", - "seconds": "ثانیه", - "show-field-on-card": "این فیلد را در کارت نمایش بده", - "automatically-field-on-card": "افزودن فیلد به کارت های جدید", - "always-field-on-card": "افزودن فیلد به همه کارت ها", - "showLabel-field-on-card": "نمایش لیبل فیلد در کارت‌های کوچک", + "no-name": "(Unknown)", + "Node_version": "Node version", + "Meteor_version": "Meteor version", + "MongoDB_version": "MongoDB version", + "MongoDB_storage_engine": "MongoDB storage engine", + "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", + "OS_Arch": "OS Arch", + "OS_Cpus": "OS CPU Count", + "OS_Freemem": "OS Free Memory", + "OS_Loadavg": "OS Load Average", + "OS_Platform": "OS Platform", + "OS_Release": "OS Release", + "OS_Totalmem": "OS Total Memory", + "OS_Type": "OS Type", + "OS_Uptime": "OS Uptime", + "days": "days", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "show-field-on-card": "Show this field on card", + "automatically-field-on-card": "Add field to new cards", + "always-field-on-card": "Add field to all cards", + "showLabel-field-on-card": "Show field label on minicard", "showSum-field-on-list": "Show sum of fields at top of list", - "yes": "بله", - "no": "خیر", - "accounts": "حساب‌ها", - "accounts-allowEmailChange": "اجازه تغییر ایمیل", - "accounts-allowUserNameChange": "اجازه تغییر نام کاربری", + "yes": "Yes", + "no": "No", + "accounts": "Accounts", + "accounts-allowEmailChange": "Allow Email Change", + "accounts-allowUserNameChange": "Allow Username Change", "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", "tableVisibilityMode" : "Boards visibility", - "createdAt": "ساخته شده در", - "modifiedAt": "تغییر یافته در", - "verified": "معتبر", - "active": "فعال", - "card-received": "رسیده", - "card-received-on": "رسیده در", - "card-end": "پایان", - "card-end-on": "پایان در", - "editCardReceivedDatePopup-title": "تغییر تاریخ رسید", - "editCardEndDatePopup-title": "تغییر تاریخ پایان", - "setCardColorPopup-title": "انتخاب رنگ", - "setCardActionsColorPopup-title": "انتخاب کردن رنگ", - "setSwimlaneColorPopup-title": "انتخاب کردن رنگ", - "setListColorPopup-title": "انتخاب کردن رنگ", - "assigned-by": "محول شده توسط", - "requested-by": "تقاضا شده توسط", + "createdAt": "Created at", + "modifiedAt": "Modified at", + "verified": "Verified", + "active": "Active", + "card-received": "Received", + "card-received-on": "Received on", + "card-end": "End", + "card-end-on": "Ends on", + "editCardReceivedDatePopup-title": "Change received date", + "editCardEndDatePopup-title": "Change end date", + "setCardColorPopup-title": "Set color", + "setCardActionsColorPopup-title": "Choose a color", + "setSwimlaneColorPopup-title": "Choose a color", + "setListColorPopup-title": "Choose a color", + "assigned-by": "Assigned By", + "requested-by": "Requested By", "card-sorting-by-number": "Card sorting by number", - "board-delete-notice": "حذف دائمی است شما تمام لیست ها، کارت ها و اقدامات مرتبط با این برد را از دست خواهید داد.", - "delete-board-confirm-popup": "تمام لیست ها، کارت ها، لیبل ها و فعالیت ها حذف خواهند شد و شما نمی توانید محتوای برد را بازیابی کنید. هیچ واکنشی وجود ندارد", - "boardDeletePopup-title": "حذف برد؟", - "delete-board": "حذف برد", - "default-subtasks-board": "زیروظایفِ برد __board__", - "default": "پیش‌فرض", - "defaultdefault": "پیش‌فرض", - "queue": "صف", - "subtask-settings": "تنظیمات زیروظایف", - "card-settings": "تنظیمات کارت", + "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", + "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", + "boardDeletePopup-title": "Delete Board?", + "delete-board": "Delete Board", + "default-subtasks-board": "Subtasks for __board__ board", + "default": "Default", + "defaultdefault": "Default", + "queue": "Queue", + "subtask-settings": "Subtasks Settings", + "card-settings": "Card Settings", "minicard-settings": "Minicard Settings", - "boardSubtaskSettingsPopup-title": "تنظیمات زیروظایف برد", - "boardCardSettingsPopup-title": "تنظیمات کارت", + "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", + "boardCardSettingsPopup-title": "Card Settings", "boardMinicardSettingsPopup-title": "Minicard Settings", - "deposit-subtasks-board": "افزودن ریزکار به برد:", - "deposit-subtasks-list": "لیست برای ریزکار های افزوده شده", - "show-parent-in-minicard": "نمایش خانواده در ریز کارت", + "deposit-subtasks-board": "Deposit subtasks to this board:", + "deposit-subtasks-list": "Landing list for subtasks deposited here:", + "show-parent-in-minicard": "Show parent in minicard:", "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "عکس کاور بر روی مینی کارت", - "badge-attachment-on-minicard": "شمارنده ضمائم بر روی مینی کارت", - "card-sorting-by-number-on-minicard": "مرتب سازی کارت با شماره بر روی مینی کارت", - "prefix-with-full-path": "پیشوند با مسیر کامل", - "prefix-with-parent": "پیشوند با خانواده", - "subtext-with-full-path": "زیرنویس با مسیر کامل", - "subtext-with-parent": "زیرنویس با خانواده", - "change-card-parent": "تغییرخانواده کارت", - "parent-card": "کارت پدر", - "source-board": "برد مرجع", - "no-parent": "پدر را نمایش نده", - "activity-added-label": "افزودن لیبل '%s' به %s", - "activity-removed-label": "حذف لیبل '%s' از %s", - "activity-delete-attach": "حذف ضمیمه از %s", - "activity-added-label-card": "لیبل افزوده‌شده '%s'", - "activity-removed-label-card": "لیبل حذف‌شده '%s'", - "activity-delete-attach-card": "حذف ضمیمه", + "cover-attachment-on-minicard": "Cover image on minicard", + "badge-attachment-on-minicard": "Count of attachments on minicard", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", + "prefix-with-full-path": "Prefix with full path", + "prefix-with-parent": "Prefix with parent", + "subtext-with-full-path": "Subtext with full path", + "subtext-with-parent": "Subtext with parent", + "change-card-parent": "Change card's parent", + "parent-card": "Parent card", + "source-board": "Source board", + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", "activity-set-customfield": "set custom field '%s' to '%s' in %s", "activity-unset-customfield": "unset custom field '%s' in %s", - "r-rule": "قاعده", - "r-add-trigger": "افزودن گیره", - "r-add-action": "افزودن عملیات", - "r-board-rules": "قواعد برد", - "r-add-rule": "افزودن قاعده", - "r-view-rule": "نمایش قاعده", - "r-delete-rule": "حذف قاعده", - "r-new-rule-name": "تیتر قاعده جدید", - "r-no-rules": "بدون قواعد", - "r-trigger": "تریگر", - "r-action": "عملیات", - "r-when-a-card": "زمانی که کارت", - "r-is": "هست", - "r-is-moved": "جابه‌جا شده", - "r-added-to": "افزوده‌شده به", - "r-removed-from": "حذف از", - "r-the-board": "برد", - "r-list": "لیست", - "set-filter": "اضافه کردن فیلتر", - "r-moved-to": "انتقال به", - "r-moved-from": "انتقال از", - "r-archived": "انتقال به آرشیو", - "r-unarchived": "بازگردانی از آرشیو", - "r-a-card": "کارت", - "r-when-a-label-is": "زمانی که لیبل هست", - "r-when-the-label": "زمانی که لیبل هست", - "r-list-name": "نام لیست", - "r-when-a-member": "زمانی که کاربر هست", - "r-when-the-member": "زمانی که کاربر", - "r-name": "نام", - "r-when-a-attach": "زمانی که ضمیمه", - "r-when-a-checklist": "زمانی که چک‌لیست هست", - "r-when-the-checklist": "زمانی که چک‌لیست", - "r-completed": "تمام شده", - "r-made-incomplete": "تمام نشده", - "r-when-a-item": "زمانی که آیتم چک‌لیست هست", - "r-when-the-item": "زمانی که آیتم چک‌لیست", - "r-checked": "انتخاب شده", - "r-unchecked": "لغو انتخاب", - "r-move-card-to": "انتقال کارت به", - "r-top-of": "بالای", - "r-bottom-of": "پایین", - "r-its-list": "لیست خود", - "r-archive": "انتقال به آرشیو", - "r-unarchive": "بازگردانی از آرشیو", - "r-card": "کارت", - "r-add": "افزودن", - "r-remove": "حذف", - "r-label": "لیبل", - "r-member": "عضو", - "r-remove-all": "حذف همه کاربران از کارت", - "r-set-color": "انتخاب رنگ به", - "r-checklist": "چک‌لیست", - "r-check-all": "انتخاب همه", - "r-uncheck-all": "لغو انتخاب همه", - "r-items-check": "آیتم‌های چک‌لیست", - "r-check": "انتخاب", - "r-uncheck": "لغو انتخاب", - "r-item": "آیتم", - "r-of-checklist": "از چک‌لیست", - "r-send-email": "ارسال ایمیل", - "r-to": "به", - "r-of": "از", - "r-subject": "عنوان", - "r-rule-details": "جزئیات قاعده", - "r-d-move-to-top-gen": "انتقال کارت به ابتدای لیست خود", - "r-d-move-to-top-spec": "انتقال کارت به ابتدای لیست", - "r-d-move-to-bottom-gen": "انتقال کارت به انتهای لیست خود", - "r-d-move-to-bottom-spec": "انتقال کارت به انتهای لیست", - "r-d-send-email": "ارسال ایمیل", - "r-d-send-email-to": "به", - "r-d-send-email-subject": "عنوان", - "r-d-send-email-message": "پیام", - "r-d-archive": "انتقال کارت به آرشیو", - "r-d-unarchive": "بازگردانی کارت از آرشیو", - "r-d-add-label": "افزودن لیبل", - "r-d-remove-label": "حذف لیبل", - "r-create-card": "ساخت کارت جدید", - "r-in-list": "در لیست", - "r-in-swimlane": "در مسیرِ", - "r-d-add-member": "افزودن عضو", - "r-d-remove-member": "حذف عضو", - "r-d-remove-all-member": "حذف تمامی کاربران", - "r-d-check-all": "انتخاب تمام آیتم های لیست", - "r-d-uncheck-all": "لغوانتخاب تمام آیتم های لیست", - "r-d-check-one": "انتخاب آیتم", - "r-d-uncheck-one": "لغو انتخاب آیتم", - "r-d-check-of-list": "از چک‌لیست", - "r-d-add-checklist": "افزودن چک‌لیست", - "r-d-remove-checklist": "حذف چک‌لیست", - "r-by": "توسط", - "r-add-checklist": "افزودن چک‌لیست", - "r-with-items": "با آیتم‌های", - "r-items-list": "آیتم1،آیتم2،آیتم3", - "r-add-swimlane": "افزودن مسیر", - "r-swimlane-name": "نام مسیر", + "r-rule": "Rule", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", + "r-board-rules": "Board rules", + "r-add-rule": "Add rule", + "r-view-rule": "View rule", + "r-delete-rule": "Delete rule", + "r-new-rule-name": "New rule title", + "r-no-rules": "No rules", + "r-trigger": "Trigger", + "r-action": "Action", + "r-when-a-card": "When a card", + "r-is": "is", + "r-is-moved": "is moved", + "r-added-to": "Added to", + "r-removed-from": "Removed from", + "r-the-board": "the board", + "r-list": "list", + "set-filter": "Set Filter", + "r-moved-to": "Moved to", + "r-moved-from": "Moved from", + "r-archived": "Moved to Archive", + "r-unarchived": "Restored from Archive", + "r-a-card": "a card", + "r-when-a-label-is": "When a label is", + "r-when-the-label": "When the label", + "r-list-name": "list name", + "r-when-a-member": "When a member is", + "r-when-the-member": "When the member", + "r-name": "name", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Move to Archive", + "r-unarchive": "Restore from Archive", + "r-card": "card", + "r-add": "Add", + "r-remove": "Remove", + "r-label": "label", + "r-member": "member", + "r-remove-all": "Remove all members from the card", + "r-set-color": "Set color to", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-items-check": "items of checklist", + "r-check": "Check", + "r-uncheck": "Uncheck", + "r-item": "item", + "r-of-checklist": "of checklist", + "r-send-email": "Send an email", + "r-to": "to", + "r-of": "of", + "r-subject": "subject", + "r-rule-details": "Rule details", + "r-d-move-to-top-gen": "Move card to top of its list", + "r-d-move-to-top-spec": "Move card to top of list", + "r-d-move-to-bottom-gen": "Move card to bottom of its list", + "r-d-move-to-bottom-spec": "Move card to bottom of list", + "r-d-send-email": "Send email", + "r-d-send-email-to": "to", + "r-d-send-email-subject": "subject", + "r-d-send-email-message": "message", + "r-d-archive": "Move card to Archive", + "r-d-unarchive": "Restore card from Archive", + "r-d-add-label": "Add label", + "r-d-remove-label": "Remove label", + "r-create-card": "Create new card", + "r-in-list": "in list", + "r-in-swimlane": "in swimlane", + "r-d-add-member": "Add member", + "r-d-remove-member": "Remove member", + "r-d-remove-all-member": "Remove all member", + "r-d-check-all": "Check all items of a list", + "r-d-uncheck-all": "Uncheck all items of a list", + "r-d-check-one": "Check item", + "r-d-uncheck-one": "Uncheck item", + "r-d-check-of-list": "of checklist", + "r-d-add-checklist": "Add checklist", + "r-d-remove-checklist": "Remove checklist", + "r-by": "by", + "r-add-checklist": "Add checklist", + "r-with-items": "with items", + "r-items-list": "item1,item2,item3", + "r-add-swimlane": "Add swimlane", + "r-swimlane-name": "swimlane name", "r-board-note": "Note: leave a field empty to match every possible value. ", - "r-checklist-note": "نکته: چک‌لیست‌ها باید توسط کاما از یک‌دیگر جدا شوند.", - "r-when-a-card-is-moved": "زمانی که یک کارت به لیست دیگری منتقل شد", - "r-set": "تنظیم", - "r-update": "به روز رسانی", - "r-datefield": "تاریخ", - "r-df-start-at": "شروع", - "r-df-due-at": "ناشی از", - "r-df-end-at": "پایان", - "r-df-received-at": "رسیده", - "r-to-current-datetime": "به تاریخ/زمان فعلی", - "r-remove-value-from": "حذف مقدار از", + "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", + "r-when-a-card-is-moved": "When a card is moved to another list", + "r-set": "Set", + "r-update": "Update", + "r-datefield": "date field", + "r-df-start-at": "start", + "r-df-due-at": "due", + "r-df-end-at": "end", + "r-df-received-at": "received", + "r-to-current-datetime": "to current date/time", + "r-remove-value-from": "Remove value from", "r-link-card": "Link card to", "ldap": "LDAP", "oauth2": "OAuth2", "cas": "CAS", - "authentication-method": "متد اعتبارسنجی", - "authentication-type": "نوع اعتبارسنجی", - "custom-product-name": "نام سفارشی محصول", - "layout": "لایه", - "hide-logo": "مخفی سازی نماد", + "authentication-method": "Authentication method", + "authentication-type": "Authentication type", + "custom-product-name": "Custom Product Name", + "layout": "Layout", + "hide-logo": "Hide Logo", "hide-card-counter-list": "Hide card counter list on All Boards", "hide-board-member-list": "Hide board member list on All Boards", - "add-custom-html-after-body-start": "افزودن کد های HTML بعد از <body> شروع", - "add-custom-html-before-body-end": "افزودن کد های HTML قبل از </body> پایان", - "error-undefined": "یک اشتباه رخ داده شده است", - "error-ldap-login": "هنگام تلاش برای ورود به یک خطا رخ داد", - "display-authentication-method": "نمایش نوع اعتبارسنجی", + "add-custom-html-after-body-start": "Add Custom HTML after <body> start", + "add-custom-html-before-body-end": "Add Custom HTML before </body> end", + "error-undefined": "Something went wrong", + "error-ldap-login": "An error occurred while trying to login", + "display-authentication-method": "Display Authentication Method", "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "نوع اعتبارسنجی پیشفرض", - "duplicate-board": "برد تکراری", - "org-number": "تعداد سازمان ها:", - "team-number": "تعداد تیم ها:", - "people-number": "تعداد افراد:", - "swimlaneDeletePopup-title": "مسیر حذف شود؟", + "default-authentication-method": "Default Authentication Method", + "duplicate-board": "Duplicate Board", + "org-number": "The number of organizations is: ", + "team-number": "The number of teams is: ", + "people-number": "The number of people is: ", + "swimlaneDeletePopup-title": "Delete Swimlane ?", "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", - "restore-all": "بازگردانی همه", - "delete-all": "حذف همه", - "loading": "در حال بارگزاری، لطفاً منتظر بمانید.", - "previous_as": "آخرین زمان بوده", - "act-a-dueAt": "اصلاح زمان انجام به \nکِی: __timeValue__\nکجا: __card__\n زمان قبلی انجام __timeOldValue__ بوده", - "act-a-endAt": "زمان پایان ویرایش‌شده به __timeValue__ از (__timeOldValue__)", - "act-a-startAt": "زمان آغاز ویرایش‌شده به __timeValue__ از (__timeOldValue__)", - "act-a-receivedAt": "زمان رسیدن ویرایش شده به __timeValue__ از (__timeOldValue__)", - "a-dueAt": "زمان سررسید ویرایش‌شده به", - "a-endAt": "زمان پایان ویرایش‌شده به", - "a-startAt": "زمان شروع ویرایش‌شده به", - "a-receivedAt": "زمان رسیدن ویرایش شده به", - "almostdue": "زمان سررسید فعلی %s د رحال رسیدن است", - "pastdue": "زمان سررسید فعلی %s گذشته‌است", - "duenow": "زمان سررسید فعلی %s امروز است", - "act-newDue": "__list__/__card__ اولین یادآوری سررسید در برد [__board__] را دارد", - "act-withDue": "__list__/__card__ یادآوری‌های سررسید [__board__]", - "act-almostdue": "یاآوری سررسید (__timeValue__) از __card__ در حال رسیدن است", - "act-pastdue": "یاآوری سررسید (__timeValue__) از __card__ گذشته‌است", - "act-duenow": "یاآوری سررسید (__timeValue__) از __card__ هم‌اکنون است", - "act-atUserComment": "به شما در [__board__] __list__/__card__ اشاره‌شده‌است.", - "delete-user-confirm-popup": "از حذف این اکانت مطمئن هستید؟ این عملیات برگشت‌ناپذیر است.", + "restore-all": "Restore all", + "delete-all": "Delete all", + "loading": "Loading, please wait.", + "previous_as": "last time was", + "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", + "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", + "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", + "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", + "a-dueAt": "modified due time to be", + "a-endAt": "modified ending time to be", + "a-startAt": "modified starting time to be", + "a-receivedAt": "modified received time to be", + "almostdue": "current due time %s is approaching", + "pastdue": "current due time %s is past", + "duenow": "current due time %s is today", + "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", + "act-withDue": "__list__/__card__ due reminders [__board__]", + "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", + "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", + "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", + "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", + "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.", "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", - "accounts-allowUserDelete": "به کاربران اجازه دهید خودشان اکانتشان را حذف کنند", - "hide-minicard-label-text": "مخفی کردن اسم لیبل مینی کارت", - "show-desktop-drag-handles": "نمایش دستگیره‌های درگ‌کردن دسکتاپ", - "assignee": "محول‌شده", - "cardAssigneesPopup-title": "محول‌شده", - "addmore-detail": "افزودن توضیحات کامل تر", - "show-on-card": "نمایش در کارت", + "accounts-allowUserDelete": "Allow users to self delete their account", + "hide-minicard-label-text": "Hide minicard label text", + "show-desktop-drag-handles": "Show desktop drag handles", + "assignee": "Assignee", + "cardAssigneesPopup-title": "Assignee", + "addmore-detail": "Add a more detailed description", + "show-on-card": "Show on Card", "show-on-minicard": "Show on Minicard", - "new": "جدید", - "editOrgPopup-title": "ویرایش سازمان", - "newOrgPopup-title": "سازمان جدید", - "editTeamPopup-title": "ویرایش تیم", - "newTeamPopup-title": "تیم جدید", - "editUserPopup-title": "ویرایش کاربر", - "newUserPopup-title": "کاربر جدید", - "notifications": "اعلان‌ها", + "new": "New", + "editOrgPopup-title": "Edit Organization", + "newOrgPopup-title": "New Organization", + "editTeamPopup-title": "Edit Team", + "newTeamPopup-title": "New Team", + "editUserPopup-title": "Edit User", + "newUserPopup-title": "New User", + "notifications": "Notifications", "help": "Help", - "view-all": "مشاهده همه", - "filter-by-unread": "فیلتر با خوانده نشده", - "mark-all-as-read": "علامت همه به خوانده شده", - "remove-all-read": "حذف همه خوانده شده", - "allow-rename": "اجازه تغییر نام", - "allowRenamePopup-title": "اجازه تغییر نام", - "start-day-of-week": "تنظیم روز شروع هفته", - "monday": "دوشنبه", - "tuesday": "سه شنبه", - "wednesday": "چهارشنبه", - "thursday": "پنجشنبه", - "friday": "جمعه", - "saturday": "شنبه", - "sunday": "یکشنبه", - "status": "وضعیت", - "swimlane": "مسیر", - "owner": "صاحب", - "last-modified-at": "آخرین ویرایش در", - "last-activity": "آخرین فعالیت", - "voting": "رأی دهی", - "archived": "بایگانی شده", - "delete-linked-card-before-this-card": "پیش از این‌که کارت‌های لینک شده به این کارت را حذف نکنید، نمی‌توانید این کارت را حذف کنید.", - "delete-linked-cards-before-this-list": "پیش از حذف کارت‌هایی که به کارت‌های این لیست لینک شده‌اند نمی‌توانید این لیست را حذف کنید.", - "hide-checked-items": "مخفی کردن انتخاب‌شده‌ها", - "hide-finished-checklist": "پنهان کردن چک لیست های تمام شده", - "task": "کار", - "create-task": "ایجاد کار", - "ok": "تأیید", - "organizations": "سازمان ها", - "teams": "تیم ها", - "displayName": "نام نمایشی", - "shortName": "نام کوتاه", + "view-all": "View All", + "filter-by-unread": "Filter by Unread", + "mark-all-as-read": "Mark all as read", + "remove-all-read": "Remove all read", + "allow-rename": "Allow Rename", + "allowRenamePopup-title": "Allow Rename", + "start-day-of-week": "Set day of the week start", + "monday": "Monday", + "tuesday": "Tuesday", + "wednesday": "Wednesday", + "thursday": "Thursday", + "friday": "Friday", + "saturday": "Saturday", + "sunday": "Sunday", + "status": "Status", + "swimlane": "Swimlane", + "owner": "Owner", + "last-modified-at": "Last modified at", + "last-activity": "Last activity", + "voting": "Voting", + "archived": "Archived", + "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Hide checked items", + "task": "Task", + "create-task": "Create Task", + "ok": "OK", + "organizations": "Organizations", + "teams": "Teams", + "displayName": "Display Name", + "shortName": "Short Name", "autoAddUsersWithDomainName": "Automatically add users with the domain name", - "website": "وبسایت", - "person": "فرد", - "my-cards": "کارت های من", - "card": "کارت", - "list": "لیست", - "board": "برد", + "website": "Website", + "person": "Person", + "my-cards": "My Cards", + "card": "Card", + "list": "List", + "board": "Board", "context-separator": "/", "myCardsViewChange-title": "My Cards View", "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "بردها", + "myCardsViewChange-choice-boards": "Boards", "myCardsViewChange-choice-table": "Table", - "myCardsSortChange-title": "نظم کارت های من", - "myCardsSortChangePopup-title": "نظم کارت های من", - "myCardsSortChange-choice-board": "بر اساس برد", - "myCardsSortChange-choice-dueat": "بر اساس تاریخ انجام", - "dueCards-title": "کارتهای سررسید", - "dueCardsViewChange-title": "نمایش کارتهای سررسید", - "dueCardsViewChangePopup-title": "نمایش کارتهای سررسید", - "dueCardsViewChange-choice-me": "من", - "dueCardsViewChange-choice-all": "تمام کاربران", + "myCardsSortChange-title": "My Cards Sort", + "myCardsSortChangePopup-title": "My Cards Sort", + "myCardsSortChange-choice-board": "By Board", + "myCardsSortChange-choice-dueat": "By Due Date", + "dueCards-title": "Due Cards", + "dueCardsViewChange-title": "Due Cards View", + "dueCardsViewChangePopup-title": "Due Cards View", + "dueCardsViewChange-choice-me": "Me", + "dueCardsViewChange-choice-all": "All Users", "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", - "broken-cards": "کارت های شکسته", + "broken-cards": "Broken Cards", "board-title-not-found": "Board '%s' not found.", "swimlane-title-not-found": "Swimlane '%s' not found.", "list-title-not-found": "List '%s' not found.", "label-not-found": "Label '%s' not found.", "label-color-not-found": "Label color %s not found.", "user-username-not-found": "Username '%s' not found.", - "comment-not-found": "کارتی که نظرتاش شمال باشد '%s' یافت نشد.", + "comment-not-found": "Card with comment containing text '%s' not found.", "org-name-not-found": "Organization '%s' not found.", "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "جست و جو در همه برد ها", - "no-cards-found": "هیچ کارتی یافت نشد", - "one-card-found": "یک کارت یافت شد", + "globalSearch-title": "Search All Boards", + "no-cards-found": "No Cards Found", + "one-card-found": "One Card Found", "n-cards-found": "%s Cards Found", "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "برد", + "operator-board": "board", "operator-board-abbrev": "b", - "operator-swimlane": "مسیر", + "operator-swimlane": "swimlane", "operator-swimlane-abbrev": "s", - "operator-list": "لیست", + "operator-list": "list", "operator-list-abbrev": "l", - "operator-label": "لیبل", + "operator-label": "label", "operator-label-abbrev": "#", "operator-user": "user", "operator-user-abbrev": "@", - "operator-member": "عضو", + "operator-member": "member", "operator-member-abbrev": "m", - "operator-assignee": "محول‌شده", + "operator-assignee": "assignee", "operator-assignee-abbrev": "a", "operator-creator": "creator", "operator-status": "status", - "operator-due": "ناشی از", - "operator-created": "ایجاد شده", - "operator-modified": "ویرایش شده", - "operator-sort": "مرتب سازی", - "operator-comment": "نظر", - "operator-has": "دارد", - "operator-limit": "حد", + "operator-due": "due", + "operator-created": "created", + "operator-modified": "modified", + "operator-sort": "sort", + "operator-comment": "comment", + "operator-has": "has", + "operator-limit": "limit", "operator-debug": "debug", "operator-org": "org", "operator-team": "team", - "predicate-archived": "بایگانی شده", - "predicate-open": "باز", - "predicate-ended": "پایان یافته", - "predicate-all": "همه", - "predicate-overdue": "منقضی شده", - "predicate-week": "هفته", - "predicate-month": "ماه", - "predicate-quarter": "فصل", - "predicate-year": "سال", - "predicate-due": "ناشی از", - "predicate-modified": "ویرایش شده", - "predicate-created": "ایجاد شده", - "predicate-attachment": "ضمیمه", - "predicate-description": "توضیحات", - "predicate-checklist": "چک‌لیست", - "predicate-start": "شروع", - "predicate-end": "پایان", - "predicate-assignee": "محول‌شده", - "predicate-member": "عضو", - "predicate-public": "عمومی", - "predicate-private": "خصوصی", + "predicate-archived": "archived", + "predicate-open": "open", + "predicate-ended": "ended", + "predicate-all": "all", + "predicate-overdue": "overdue", + "predicate-week": "week", + "predicate-month": "month", + "predicate-quarter": "quarter", + "predicate-year": "year", + "predicate-due": "due", + "predicate-modified": "modified", + "predicate-created": "created", + "predicate-attachment": "attachment", + "predicate-description": "description", + "predicate-checklist": "checklist", + "predicate-start": "start", + "predicate-end": "end", + "predicate-assignee": "assignee", + "predicate-member": "member", + "predicate-public": "public", + "predicate-private": "private", "predicate-selector": "selector", "predicate-projection": "projection", - "operator-unknown-error": "%s اپراتور نیست", + "operator-unknown-error": "%s is not an operator", "operator-number-expected": "operator __operator__ expected a number, got '__value__'", "operator-sort-invalid": "sort of '%s' is invalid", "operator-status-invalid": "'%s' is not a valid status", "operator-has-invalid": "%s is not a valid existence check", "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "صفحه بعد", - "previous-page": "صفحه قبلی", - "heading-notes": "یادداشت ها", - "globalSearch-instructions-heading": "دستورالعمل جستجو", + "next-page": "Next Page", + "previous-page": "Previous Page", + "heading-notes": "Notes", + "globalSearch-instructions-heading": "Search Instructions", "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", - "globalSearch-instructions-operators": "اپراتورها حاضر", + "globalSearch-instructions-operators": "Available operators:", "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", @@ -1102,41 +1090,40 @@ "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", - "globalSearch-instructions-notes-4": "جستجوی متنی به کارکتر بزرگ و کوچک حساس است", + "globalSearch-instructions-notes-4": "Text searches are case insensitive.", "globalSearch-instructions-notes-5": "By default archived cards are not searched.", - "link-to-search": "مرتبط به این جستجو", - "excel-font": "اِریال", - "number": "عدد", - "label-colors": "رنگ لیبل", - "label-names": "اسامی لیبل", - "archived-at": "بایگانی شده در", - "sort-cards": "مرتب‌سازی کارت‌ها", - "sort-is-on": "مرتب سازی فعال است", - "cardsSortPopup-title": "مرتب‌سازی کارت‌ها", - "due-date": "تاریخ اجرا", - "server-error": "خطای سرور", + "link-to-search": "Link to this search", + "excel-font": "Arial", + "number": "Number", + "label-colors": "Label Colors", + "label-names": "Label Names", + "archived-at": "archived at", + "sort-cards": "Sort Cards", + "sort-is-on": "Sort is on", + "cardsSortPopup-title": "Sort Cards", + "due-date": "Due Date", + "server-error": "Server Error", "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", - "title-alphabetically": "تیتر (به صورت الفبا)", - "created-at-newest-first": "ساخته شده در تاریخ (با اولویت جدید تر)", - "created-at-oldest-first": "ساخته شده در تاریخ (با اولویت قدیمی تر)", - "links-heading": "پیوندها", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", - "move-swimlane": "انتقال مسیر", - "moveSwimlanePopup-title": "انتقال مسیر", - "custom-field-stringtemplate": "قالب رشته", + "title-alphabetically": "Title (Alphabetically)", + "created-at-newest-first": "Created At (Newest First)", + "created-at-oldest-first": "Created At (Oldest First)", + "links-heading": "Links", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", + "move-swimlane": "Move Swimlane", + "moveSwimlanePopup-title": "Move Swimlane", + "custom-field-stringtemplate": "String Template", "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", "custom-field-stringtemplate-separator": "Separator (use or   for a space)", - "custom-field-stringtemplate-item-placeholder": "برای افزودن موارد بیشتر ، Enter را فشار دهید", - "creator": "سازنده", - "creator-on-minicard": "Creator on minicard", - "filesReportTitle": "گزارش پرونده‌ها", - "reports": "گزارش‌ها", - "rulesReportTitle": "گزارش قوانین", + "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", + "creator": "Creator", + "filesReportTitle": "Files Report", + "reports": "Reports", + "rulesReportTitle": "Rules Report", "boardsReportTitle": "Boards Report", "cardsReportTitle": "Cards Report", - "copy-swimlane": "کپی از مسیر", - "copySwimlanePopup-title": "کپی از مسیر", + "copy-swimlane": "Copy Swimlane", + "copySwimlanePopup-title": "Copy Swimlane", "display-card-creator": "Display Card Creator", "wait-spinner": "Wait Spinner", "Bounce": "Bounce Wait Spinner", @@ -1172,7 +1159,7 @@ "add-teams-label": "Added teams are displayed below:", "remove-team-from-table": "Are you sure you want to remove this team from the board ?", "confirm-btn": "Confirm", - "remove-btn": "حذف", + "remove-btn": "Remove", "filter-card-title-label": "Filter by card title", "invite-people-success": "Invitation to register sent with success", "invite-people-error": "Error while sending invitation to register", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "هر خط از متن به یک آیتم از چک لیست تبدیل شود", - "newLineNewItem": "یک خط از متن = یک آیتم چک لیست", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "مرتب سازی اصلی", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1227,9 +1211,9 @@ "version-name": "Version-Name", "size": "Size", "storage": "Storage", - "action": "عملیات", + "action": "Action", "board-title": "Board Title", - "attachmentRenamePopup-title": "تغیر نام", + "attachmentRenamePopup-title": "Rename", "uploading": "Uploading", "remaining_time": "Remaining time", "speed": "Speed", @@ -1240,33 +1224,24 @@ "forgot-password": "Forgot password", "minicardDetailsActionsPopup-title": "Card Details", "Mongo_sessions_count": "Mongo sessions count", - "change-visibility": "تغییر وضعیت نمایش", - "max-upload-filesize": "حداکثر اندازه بارگزاری فایل به بایت:", - "allowed-upload-filetypes": "نوع فایل های مجاز برای بارگذاری:", - "max-avatar-filesize": "حداکثر اندازه بارگزاری آواتار به بایت:", - "allowed-avatar-filetypes": "نوع فایل های مجاز", - "invalid-file": "اگر نام فایل معتبر نباشد، آپلود یا تغییر نام لغو خواهد شد", + "change-visibility": "Change Visibility", + "max-upload-filesize": "Max upload filesize in bytes:", + "allowed-upload-filetypes": "Allowed upload filetypes:", + "max-avatar-filesize": "Max avatar filesize in bytes:", + "allowed-avatar-filetypes": "Allowed avatar filetypes:", + "invalid-file": "If filename is invalid, upload or rename is cancelled.", "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", - "drag-board": "کشیدن برد", + "drag-board": "Drag board", "translation-number": "The number of custom translation strings is:", "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", "newTranslationPopup-title": "New custom translation string", "editTranslationPopup-title": "Edit custom translation string", "settingsTranslationPopup-title": "Delete this custom translation string?", "translation": "Translation", - "text": "متن", + "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "جمع کردن", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "پنهان کردن موارد انجام شده چک لیست", - "hideAllChecklistItems": "پنهان کردن همه موارد چک لیست", - "support": "پشتیبانی", - "supportPopup-title": "پشتیبانی", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/fa.i18n.json b/imports/i18n/data/fa.i18n.json index e7b0ce5bc..8fee9eb35 100644 --- a/imports/i18n/data/fa.i18n.json +++ b/imports/i18n/data/fa.i18n.json @@ -1,5 +1,5 @@ { - "accept": "پذیرفتن", + "accept": "Accept", "act-activity-notify": "اعلان فعالیت", "act-addAttachment": "ضمیمه __attachment__ به کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ اضافه شده", "act-deleteAttachment": "ضمیمه __attachment__ از کارت __card__ در لیست __list__ در مسیر __swimlane__ در برد __board__ حذف شده", @@ -49,7 +49,6 @@ "activity-archived": "%s به آرشیو انتقال یافت", "activity-attached": "%s به %s پیوست شد", "activity-created": "%s ایجاد شد", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "فیلد سفارشی %s ایجاد شد", "activity-excluded": "%s از %s مستثنی گردید", "activity-imported": "%s از %s وارد %s شد", @@ -86,12 +85,10 @@ "add-card": "افزودن کارت", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "اعلان", "admin-announcement-active": "فعال کردن اعلان‌های سمت سیستم", "admin-announcement-title": "اعلان از سوی مدیر", - "all-boards": "همه بردها", + "all-boards": "All boards", "and-n-other-card": "و __count__ کارت دیگر", "and-n-other-card_plural": "و __count__ کارت دیگر", "apply": "اعمال", @@ -149,10 +146,10 @@ "avatar-too-big": "The avatar is too large (__size__ max)", "back": "بازگشت", "board-change-color": "تغییر رنگ", - "board-change-background-image": "تغییر تصویر پس زمینه", - "board-background-image-url": "لینک تصویر پس زمینه", - "add-background-image": "اضافه کردن تصویر پس زمینه", - "remove-background-image": "حذف تصویر پس زمینه", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "All Boards Settings", "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", @@ -160,15 +157,15 @@ "show-card-counter-per-list": "Show card count per list", "show-board_members-avatar": "Show Board members avatars", "board-nb-stars": "%s ستاره", - "board-not-found": "برد پیدا نشد", + "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>.", "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", - "boardChangeColorPopup-title": "تغییر پس زمینه برد", - "boardChangeBackgroundImagePopup-title": "تغییر تصویر پس زمینه", + "boardChangeColorPopup-title": "Change Board Background", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "تغییر رنگ", - "allBoardsChangeBackgroundImagePopup-title": "تغییر تصویر پس زمینه", - "boardChangeTitlePopup-title": "تغییر نام برد", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", + "boardChangeTitlePopup-title": "Rename Board", "boardChangeVisibilityPopup-title": "تغییر وضعیت نمایش", "boardChangeWatchPopup-title": "تغییر دیده‌بانی", "boardMenuPopup-title": "تنظیمات برد", @@ -266,9 +263,6 @@ "checklists": "چک‌لیست‌ها", "click-to-star": "با کلیک کردن ستاره بدهید", "click-to-unstar": "با کلیک کردن ستاره را کم کنید", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "ذخیره در حافظه ویا بردار-رهاکن", "close": "بستن", "close-board": "بستن برد", @@ -300,7 +294,6 @@ "color-white": "سفید", "color-yellow": "زرد", "unset-color": "بازنشانی", - "comments": "Comments", "comment": "نظر", "comment-placeholder": "درج نظر", "comment-only": "فقط نظر", @@ -383,7 +376,6 @@ "email-sent": "نامه الکترونیکی فرستاده شد", "email-verifyEmail-subject": "تایید آدرس الکترونیکی شما در __siteName__", "email-verifyEmail-text": "سلام __user__\nبه منظور تایید آدرس الکترونیکی حساب خود، آدرس زیر را دنبال نمایید، باتشکر:\n__url__.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Enable WIP Limit", "error-board-doesNotExist": "برد مورد نظر وجود ندارد", "error-board-notAdmin": "شما جهت انجام آن باید مدیر برد باشید", @@ -429,7 +421,7 @@ "filter-overdue": "منقضی شده", "filter-due-today": "مقتضی امروز", "filter-due-this-week": "مقتضی این هفته", - "filter-due-next-week": "مقتضی هفته بعد", + "filter-due-next-week": "Due next week", "filter-due-tomorrow": "مقتضی فردا", "list-filter-label": "فیلتر لیست بر اساس عنوان", "filter-clear": "حذف فیلتر", @@ -451,7 +443,7 @@ "advanced-filter-description": "فیلتر پیشرفته اجازه می دهد تا برای نوشتن رشته حاوی اپراتورهای زیر: ==! = <=> = && || () یک فضای به عنوان یک جداساز بین اپراتورها استفاده می شود. با تایپ کردن نام ها و مقادیر آنها می توانید برای تمام زمینه های سفارشی فیلتر کنید. به عنوان مثال: Field1 == Value1. نکته: اگر فیلدها یا مقادیر حاوی فضاها باشند، شما باید آنها را به یک نقل قول کپسول کنید. برای مثال: 'فیلد 1' == 'مقدار 1'. برای تک تک کاراکترهای کنترل (\\\\) که می توانید از آنها استفاده کنید، می توانید از \\\\ استفاده کنید. به عنوان مثال: Field1 == I\\\\'m. همچنین شما می توانید شرایط مختلف را ترکیب کنید. برای مثال: F1 == V1 || F1 == V2. به طور معمول همه اپراتورها از چپ به راست تفسیر می شوند. شما می توانید سفارش را با قرار دادن براکت تغییر دهید. برای مثال: F1 == V1 && (F2 == V2 || F2 == V3). همچنین می توانید فیلدهای متنی را با استفاده از regex جستجو کنید: F1 == /Tes.*/i", "fullname": "نام و نام خانوادگی", "header-logo-title": "بازگشت به صفحه بردها.", - "show-activities": "Show Activities", + "hide-system-messages": "عدم نمایش پیامهای سیستمی", "headerBarCreateBoardPopup-title": "ایجاد برد", "home": "خانه", "import": "وارد کردن", @@ -558,7 +550,7 @@ "public": "عمومی", "public-desc": "این برد عمومی است. برای هر کسی با آدرس و یا جستجو در موتورها مانند گوگل قابل مشاهده است. فقط افرادی که به برد اضافه شده‌اند امکان ویرایش دارند.", "quick-access-description": "جهت افزودن یک برد به اینجا، آن را ستاره دار نمایید.", - "remove-cover": "حذف تصویر کاور از مینی کارت", + "remove-cover": "Remove cover image from minicard", "remove-from-board": "حذف از برد", "remove-label": "حذف لیبل", "listDeletePopup-title": "حذف فهرست؟", @@ -567,7 +559,7 @@ "remove-member-pop": "آیا __name__ (__username__) را از __boardTitle__ حذف می‌کنید؟ کاربر از تمام کارت‌ها در این برد حذف خواهد شد. آنها از این اقدام مطلع خواهند شد.", "removeMemberPopup-title": "آیا می خواهید کاربر را حذف کنید؟", "rename": "تغیر نام", - "rename-board": "تغییر نام برد", + "rename-board": "Rename Board", "restore": "بازیابی", "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", "rescue-card-description-dialogue": "Overwrite current card description with your changes?", @@ -580,14 +572,12 @@ "select-board": "انتخاب برد", "set-wip-limit-value": "تعیین بیشینه تعداد وظایف در این فهرست", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "انتصاب خود به کارت فعلی", "shortcut-autocomplete-emoji": "تکمیل خودکار شکلکها", "shortcut-autocomplete-members": "تکمیل خودکار کاربرها", "shortcut-clear-filters": "حذف تمامی صافی‌ها ـ فیلترها ـ", "shortcut-close-dialog": "بستن محاوره", "shortcut-filter-my-cards": "کارت های من", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "بالا آوردن میانبر این لیست", "shortcut-toggle-filterbar": "ضامن نوار جداکننده فیلتر", "shortcut-toggle-searchbar": "کلید نوار جستجوی جانبی", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "زمان", "title": "عنوان", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "پیگردی", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "پیش از این‌که کارت‌های لینک شده به این کارت را حذف نکنید، نمی‌توانید این کارت را حذف کنید.", "delete-linked-cards-before-this-list": "پیش از حذف کارت‌هایی که به کارت‌های این لیست لینک شده‌اند نمی‌توانید این لیست را حذف کنید.", "hide-checked-items": "مخفی کردن انتخاب‌شده‌ها", - "hide-finished-checklist": "Hide finished checklist", "task": "کار", "create-task": "ایجاد کار", "ok": "تأیید", @@ -1006,7 +994,7 @@ "comment-not-found": "Card with comment containing text '%s' not found.", "org-name-not-found": "Organization '%s' not found.", "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "جست و جو در همه برد ها", + "globalSearch-title": "Search All Boards", "no-cards-found": "هیچ کارتی یافت نشد", "one-card-found": "یک کارت یافت شد", "n-cards-found": "%s Cards Found", @@ -1111,7 +1099,7 @@ "label-names": "اسامی لیبل", "archived-at": "بایگانی شده در", "sort-cards": "مرتب‌سازی کارت‌ها", - "sort-is-on": "مرتب سازی فعال است", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "مرتب‌سازی کارت‌ها", "due-date": "تاریخ اجرا", "server-error": "خطای سرور", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "ساخته شده در تاریخ (با اولویت جدید تر)", "created-at-oldest-first": "ساخته شده در تاریخ (با اولویت قدیمی تر)", "links-heading": "پیوندها", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "مخفی‌سازی پیام‌های تمام کاربران", + "now-system-messages-of-all-users-are-hidden": "اکنون پیام‌های همه کاربران مخفی است", "move-swimlane": "انتقال مسیر", "moveSwimlanePopup-title": "انتقال مسیر", "custom-field-stringtemplate": "قالب رشته", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "برای افزودن موارد بیشتر ، Enter را فشار دهید", "creator": "سازنده", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "گزارش پرونده‌ها", "reports": "گزارش‌ها", "rulesReportTitle": "گزارش قوانین", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1244,8 +1228,8 @@ "max-upload-filesize": "Max upload filesize in bytes:", "allowed-upload-filetypes": "Allowed upload filetypes:", "max-avatar-filesize": "Max avatar filesize in bytes:", - "allowed-avatar-filetypes": "نوع فایل های مجاز", - "invalid-file": "اگر نام فایل معتبر نباشد، آپلود یا تغییر نام لغو خواهد شد", + "allowed-avatar-filetypes": "Allowed avatar filetypes:", + "invalid-file": "If filename is invalid, upload or rename is cancelled.", "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", "drag-board": "Drag board", "translation-number": "The number of custom translation strings is:", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "متن", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "جمع کردن", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/fi.i18n.json b/imports/i18n/data/fi.i18n.json index 4e11a001f..4974ceca8 100644 --- a/imports/i18n/data/fi.i18n.json +++ b/imports/i18n/data/fi.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s siirretty Arkistoon", "activity-attached": "liitetty %s kohteeseen %s", "activity-created": "luotu %s", - "activity-changedListTitle": "listan nimeksi muutettu %s", "activity-customfield-created": "luotu mukautettu kenttä %s", "activity-excluded": "poistettu %s kohteesta %s", "activity-imported": "tuotu %s kohteeseen %s lähteestä %s", @@ -86,12 +85,10 @@ "add-card": "Lisää kortti", "add-card-to-top-of-list": "Lisää kortti listan alkuun", "add-card-to-bottom-of-list": "Lisää kortti listan loppuun", - "setListWidthPopup-title": "Aseta leveydet", - "set-list-width": "Aseta leveydet", - "set-list-width-value": "Aseta minimi ja maksimi leveydet (pikseliä)", - "list-width-error-message": "Listan leveydet täytyy olla kokonaislukuja, suurempia kuin 100", - "keyboard-shortcuts-enabled": "Pikanäppäimet käytössä. Klikkaa poistaaksesi käytöstä.", - "keyboard-shortcuts-disabled": "Pikanäppäimet poistettu käytöstä. Klikkaa ottaaksesi käyttöön.", + "setListWidthPopup-title": "Aseta listan leveys", + "set-list-width": "Aseta listan leveys", + "set-list-width-value": "Listan leveys (pikseliä)", + "list-width-error-message": "Listan leveyden täytyy olla positiivinen kokonaisluku", "setSwimlaneHeightPopup-title": "Aseta uimaradan korkeus", "set-swimlane-height": "Aseta uimaradan korkeus", "set-swimlane-height-value": "Uimaradan korkeus (pikseliä)", @@ -245,8 +242,8 @@ "cardMembersPopup-title": "Jäsenet", "cardMorePopup-title": "Lisää", "cardTemplatePopup-title": "Luo malli", - "cards": "Korttia", - "cards-count": "Korttia", + "cards": "Kortit", + "cards-count": "Kortit", "cards-count-one": "Kortti", "casSignIn": "CAS-kirjautuminen", "cardType-card": "Kortti", @@ -266,9 +263,6 @@ "checklists": "Tarkistuslistat", "click-to-star": "Klikkaa merkataksesi tämä taulu tähdellä.", "click-to-unstar": "Klikkaa poistaaksesi tähtimerkintä taululta.", - "click-to-enable-auto-width": "Automaattinen listan leveys ei ole käytössä. Klikkaa ottaaksesi käyttöön.", - "click-to-disable-auto-width": "Automaattinen listan leveys käytössä. Klikkaa poistaaksesi käytöstä.", - "auto-list-width": "Automaattinen listan leveys", "clipboard": "Leikepöytä tai raahaa ja pudota", "close": "Sulje", "close-board": "Sulje taulu", @@ -300,7 +294,6 @@ "color-white": "valkoinen", "color-yellow": "keltainen", "unset-color": "Poista asetus", - "comments": "Kommentit", "comment": "Kommentti", "comment-placeholder": "Kirjoita kommentti", "comment-only": "Vain kommentointi", @@ -383,7 +376,6 @@ "email-sent": "Sähköposti lähetetty", "email-verifyEmail-subject": "Varmista sähköpostiosoitteesi osoitteessa __url__", "email-verifyEmail-text": "Hei __user__,\n\nvahvistaaksesi sähköpostiosoitteesi, klikkaa alla olevaa linkkiä.\n\n__url__\n\nKiitos.", - "enable-vertical-scrollbars": "Ota pystysuuntaiset vierityspalkit käyttöön", "enable-wip-limit": "Ota käyttöön WIP-raja", "error-board-doesNotExist": "Tätä taulua ei ole olemassa", "error-board-notAdmin": "Tehdäksesi tämän sinun täytyy olla tämän taulun ylläpitäjä", @@ -451,7 +443,7 @@ "advanced-filter-description": "Edistynyt suodatin mahdollistaa merkkijonon, joka sisältää seuraavat operaattorit: == != <= >= && || ( ) Operaattorien välissä käytetään välilyöntiä. Voit suodattaa kaikki mukautetut kentät kirjoittamalla niiden nimet ja arvot. Esimerkiksi: Field1 == Value1. Huom: Jos kentillä tai arvoilla on välilyöntejä, sinun on sijoitettava ne yksittäisiin lainausmerkkeihin. Esimerkki: 'Kenttä 1' == 'Arvo 1'. Voit hypätä yksittäisen kontrollimerkkien (' \\\\/) yli käyttämällä \\\\. Esimerkki: Field1 = I\\\\'m. Voit myös yhdistää useita ehtoja. Esimerkiksi: F1 == V1 || F1 == V2. Yleensä kaikki operaattorit tulkitaan vasemmalta oikealle. Voit muuttaa järjestystä asettamalla sulkuja. Esimerkiksi: F1 == V1 && (F2 == V2 || F2 == V3). Voit myös etsiä tekstikentistä regexillä: F1 == /Tes.*/i", "fullname": "Koko nimi", "header-logo-title": "Palaa taulut sivullesi.", - "show-activities": "Näytä toimet", + "hide-system-messages": "Piilota järjestelmäviestit", "headerBarCreateBoardPopup-title": "Luo taulu", "home": "Koti", "import": "Tuo", @@ -580,14 +572,12 @@ "select-board": "Valitse taulu", "set-wip-limit-value": "Aseta tämän listan tehtävien enimmäismäärä", "setWipLimitPopup-title": "Aseta WIP-raja", - "shortcut-add-self": "Lisää itsesi nykyiselle kortille", "shortcut-assign-self": "Valitse itsesi nykyiselle kortille", "shortcut-autocomplete-emoji": "Automaattinen täydennys emojille", "shortcut-autocomplete-members": "Automaattinen täydennys jäsenille", "shortcut-clear-filters": "Poista kaikki suodattimet", "shortcut-close-dialog": "Sulje valintaikkuna", "shortcut-filter-my-cards": "Suodata korttini", - "shortcut-filter-my-assigned-cards": "Suodata käsittelijä korttini", "shortcut-show-shortcuts": "Tuo esiin tämä pikavalintalista", "shortcut-toggle-filterbar": "Muokkaa suodatussivupalkin näkyvyyttä", "shortcut-toggle-searchbar": "Muokkaa etsintäsivupalkin näkyvyyttä", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Sisältää käytetty aika -kortteja", "time": "Aika", "title": "Otsikko", - "toggle-assignees": "Muokkaa käsittelijöiden 1-9 näkyvyyttä kortilla (Taululle lisäys järjestyksessä).", "toggle-labels": "Muokkaa nimilappujen 1-9 näkyvyyttä kortilla. Monivalinta lisää nimilaput 1-9", "remove-labels-multiselect": "Monivalinta poistaa nimilaput 1-9", "tracking": "Ilmoitukset", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Et voi poistaa tätä korttia ennenkuin ensin poistat linkitetyn kortin jolla on", "delete-linked-cards-before-this-list": "Et voi poistaa tätä listaa ennenkuin poistat linkitetyt kortit jotka osoittavat kortteihin tässä listassa", "hide-checked-items": "Piilota ruksatut kohdat", - "hide-finished-checklist": "Piilota valmistuneet tarkistuslistat", "task": "Tehtävä", "create-task": "Luo tehtävä", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Luotu (Uusin ensin)", "created-at-oldest-first": "Luotu (Vanhin ensin)", "links-heading": "Linkit", - "hide-activities-of-all-boards": "Älä näytä taulun toimia kaikilla tauluilla", - "now-activities-of-all-boards-are-hidden": "Nyt kaikki toimet kaikilla tauluilla on piilotettu", + "hide-system-messages-of-all-users": "Piilota kaikkien käyttäjien järjestelmäviestit", + "now-system-messages-of-all-users-are-hidden": "Nyt kaikkien käyttäjien järjestelmäviestit on piilotettu", "move-swimlane": "Siirrä uimarata", "moveSwimlanePopup-title": "Siirrä uimarata", "custom-field-stringtemplate": "Merkkijono malli", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Erotin (käytä tai   välilyöntinä)", "custom-field-stringtemplate-item-placeholder": "Paina Enter lisätäksesi lisää kohtia", "creator": "Luoja", - "creator-on-minicard": "Luoja minikortilla", "filesReportTitle": "Tiedostot raportti", "reports": "Raportit", "rulesReportTitle": "Säännöt raportti", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Tarkistuslista toimet", "moveChecklist": "Siirrä tarkistuslista", "moveChecklistPopup-title": "Siirrä tarkistuslista", - "newlineBecomesNewChecklistItem": "Joka rivistä tekstiä tulee yksi tarkistuslistan kohdista", - "newLineNewItem": "Yksi rivi tekstiä = yksi tarkistuslistan kohta", - "newlineBecomesNewChecklistItemOriginOrder": "Joka rivistä tulee yksi tarkistuslistan kohdista, alkuperäinen järjestys", - "originOrder": "alkuperäinen järjestys", + "newlineBecomesNewChecklistItem": "Uusi rivi muuttuu uudeksi tarkistuslistakohdaksi", "copyChecklist": "Kopioi tarkistuslista", "copyChecklistPopup-title": "Kopioi tarkistuslista", "card-show-lists": "Näytä listat kortilla", @@ -1256,17 +1240,8 @@ "translation": "Käännös", "text": "Teksti", "translation-text": "Käännetty teksti", + "show-at-minicard": "Näytä minikortilla", + "show-checklist-at-minicard": "Näytä tarkistuslista minikortilla", "show-subtasks-field": "Näytä alitehtävät kenttä", - "show-week-of-year": "Näytä vuoden viikko numero (ISO 8601)", - "convert-to-markdown": "Muuta markdowniksi", - "import-board-zip": "Lisää .zip tiedosto jossa on taulu JSON tiedostot, ja taulu nimi alihakemistot liitteineen", - "collapse": "Pienennä", - "uncollapse": "Suurenna", - "hideCheckedChecklistItems": "Piilota ruksatut tarkistuslistan kohdat", - "hideAllChecklistItems": "Piilota kaikki tarkistuslistan kohdat", - "support": "Tuki", - "supportPopup-title": "Tuki", - "accessibility-page-enabled": "Saavutettavuus sivu käytössä", - "accessibility-title": "Saavutettavuus otsikko", - "accessibility-content": "Saavutettavuus sisältö" + "convert-to-markdown": "Muuta markdowniksi" } diff --git a/imports/i18n/data/fr-CH.i18n.json b/imports/i18n/data/fr-CH.i18n.json index d7595cf07..f0dfbcb0b 100644 --- a/imports/i18n/data/fr-CH.i18n.json +++ b/imports/i18n/data/fr-CH.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "Tous les tableaux", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Le filtre avancé permet d'écrire une chaîne contenant les opérateur suivants : == != <= >= && || ( ). Les opérateurs doivent être séparés par des espaces. Vous pouvez filtrer tous les champs personnalisés en saisissant leur nom et leur valeur. Par exemple : champ1 == valeur1. Remarque : si des champs ou valeurs contiennent des espaces, vous devez les mettre entre apostrophes. Par exemple : 'champ 1' = 'valeur 1'. Pour échapper un caractère de contrôle (' \\\\/), vous pouvez utiliser \\\\. Par exemple : champ1 = I\\\\'m. Il est également possible de combiner plusieurs conditions. Par exemple : f1 == v1 || f2 == v2. Normalement, tous les opérateurs sont interprétés de gauche à droite. Vous pouvez changer l'ordre à l'aide de parenthèses. Par exemple : f1 == v1 and (f2 == v2 || f2 == v3). Vous pouvez également chercher parmi les champs texte en utilisant des expressions régulières : f1 == /Test.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/fr-FR.i18n.json b/imports/i18n/data/fr-FR.i18n.json index 3737dfa6a..8eb23579d 100644 --- a/imports/i18n/data/fr-FR.i18n.json +++ b/imports/i18n/data/fr-FR.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s a été archivé", "activity-attached": "a attaché %s à %s", "activity-created": "a créé %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "a créé le champ personnalisé %s", "activity-excluded": "a exclu %s de %s", "activity-imported": "a importé %s vers %s depuis %s", @@ -86,12 +85,10 @@ "add-card": "Ajouter une carte", "add-card-to-top-of-list": "Ajouter la carte en haut de la liste", "add-card-to-bottom-of-list": "Ajouter la carte en bas de la liste", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Définir la largeur de la liste", + "set-list-width": "Définir la largeur de la liste", + "set-list-width-value": "Largeur de la liste (pixels)", + "list-width-error-message": "La largeur de la liste doit être un entier positif", "setSwimlaneHeightPopup-title": "Définir la hauteur du couloir", "set-swimlane-height": "Définir la hauteur du couloir", "set-swimlane-height-value": "Hauteur du couloir (pixels)", @@ -178,7 +175,7 @@ "board-view": "Vue du tableau", "board-view-cal": "Calendrier", "board-view-swimlanes": "Couloirs", - "board-view-collapse": "Réduire", + "board-view-collapse": "Diminuer", "board-view-gantt": "Gantt", "board-view-lists": "Listes", "bucket-example": "Comme « todo list » par exemple", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Cliquez pour ajouter ce tableau aux favoris.", "click-to-unstar": "Cliquez pour retirer ce tableau des favoris.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Presse-papier ou glisser-déposer", "close": "Fermer", "close-board": "Fermer le tableau", @@ -300,7 +294,6 @@ "color-white": "blanc", "color-yellow": "jaune", "unset-color": "Enlever", - "comments": "Comments", "comment": "Commenter", "comment-placeholder": "Écrire un commentaire", "comment-only": "Commentaire uniquement", @@ -383,7 +376,6 @@ "email-sent": "Courriel envoyé", "email-verifyEmail-subject": "Vérifier votre adresse de courriel sur __siteName__", "email-verifyEmail-text": "Bonjour __user__,\n\nPour vérifier votre compte courriel, il suffit de cliquer sur le lien ci-dessous.\n\n__url__\n\nMerci.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Activer la limite WIP", "error-board-doesNotExist": "Ce tableau n'existe pas", "error-board-notAdmin": "Vous devez être administrateur de ce tableau pour faire cela", @@ -451,7 +443,7 @@ "advanced-filter-description": "Le filtre avancé permet d'écrire une chaîne contenant les opérateur suivants : == != <= >= && || ( ). Les opérateurs doivent être séparés par des espaces. Vous pouvez filtrer tous les champs personnalisés en saisissant leur nom et leur valeur. Par exemple : champ1 == valeur1. Remarque : si des champs ou valeurs contiennent des espaces, vous devez les mettre entre apostrophes. Par exemple : 'champ 1' == 'valeur 1'. Pour échapper un caractère de contrôle (' \\/), vous pouvez utiliser \\. Par exemple : champ1 == I\\'m. Il est également possible de combiner plusieurs conditions. Par exemple : f1 == v1 || f2 == v2. Normalement, tous les opérateurs sont interprétés de gauche à droite. Vous pouvez changer l'ordre à l'aide de parenthèses. Par exemple : F1 == V1 && ( F2 == V2 || F2 == V3 ). Vous pouvez également chercher parmi les champs texte en utilisant des expressions régulières : f1 == /Test.*/i", "fullname": "Nom complet", "header-logo-title": "Retourner à la page des tableaux", - "show-activities": "Show Activities", + "hide-system-messages": "Masquer les messages système", "headerBarCreateBoardPopup-title": "Créer un tableau", "home": "Accueil", "import": "Importer", @@ -580,14 +572,12 @@ "select-board": "Sélectionner le tableau", "set-wip-limit-value": "Définit une limite maximale au nombre de cartes de cette liste", "setWipLimitPopup-title": "Définir la limite WIP", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Affecter cette carte à vous-même", "shortcut-autocomplete-emoji": "Auto-complétion des emoji", "shortcut-autocomplete-members": "Auto-complétion des participants", "shortcut-clear-filters": "Retirer tous les filtres", "shortcut-close-dialog": "Fermer la boîte de dialogue", "shortcut-filter-my-cards": "Filtrer mes cartes", - "shortcut-filter-my-assigned-cards": "Filtrer mes cartes assignées", "shortcut-show-shortcuts": "Afficher cette liste de raccourcis", "shortcut-toggle-filterbar": "Afficher/Masquer la barre latérale des filtres", "shortcut-toggle-searchbar": "Afficher/Masquer la barre latérale de recherche", @@ -610,7 +600,6 @@ "has-spenttime-cards": "A des cartes avec du temps passé", "time": "Temps", "title": "Titre", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Bascule les étiquettes 1-9 pour les cartes. La sélection multiple ajoute les étiquettes 1-9", "remove-labels-multiselect": "La multi-sélection supprime les étiquettes 1-9", "tracking": "Suivi", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Vous ne pouvez pas supprimer cette carte avant d'avoir d'abord supprimé la carte liée qui a", "delete-linked-cards-before-this-list": "Vous ne pouvez pas supprimer cette liste avant d'avoir d'abord supprimé les cartes liées qui pointent vers des cartes de cette liste", "hide-checked-items": "Cacher les éléments cochés", - "hide-finished-checklist": "Hide finished checklist", "task": "Tâche", "create-task": "Créer une tâche", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Équipes", "displayName": "Nom d'Affichage", "shortName": "Nom Court", - "autoAddUsersWithDomainName": "Ajouter automatiquement les utilisateurs avec le nom de domaine", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Site Web", "person": "Personne", "my-cards": "Mes Cartes", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Date de création (Plus récentes en premier)", "created-at-oldest-first": "Date de création (Plus anciennes en premier)", "links-heading": "Liens", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Masquer les messages système de tous les utilisateurs", + "now-system-messages-of-all-users-are-hidden": "Les messages système de tous les utilisateurs seront dorénavant masqués", "move-swimlane": "Déplacer le couloir", "moveSwimlanePopup-title": "Déplacer le couloir", "custom-field-stringtemplate": "Modèle de chaîne", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Séparateur (utiliser ou   pour un espace)", "custom-field-stringtemplate-item-placeholder": "Appuyez sur Entrée pour ajouter plus d'éléments", "creator": "Créateur", - "creator-on-minicard": "Créateur sur la mini-carte", "filesReportTitle": "Rapports sur les fichiers", "reports": "Rapports", "rulesReportTitle": "Rapports sur les règles", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Actions sur la checklist", "moveChecklist": "Déplacer la checklist", "moveChecklistPopup-title": "Déplacer la checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Chaque retour à la ligne produit un nouvel élément de checklist", "copyChecklist": "Copier la checklist", "copyChecklistPopup-title": "Copier la checklist", "card-show-lists": "Afficher les listes sur la carte", @@ -1256,17 +1240,8 @@ "translation": "Traduction", "text": "Texte", "translation-text": "Texte traduit", + "show-at-minicard": "Afficher sur la mini-carte", + "show-checklist-at-minicard": "Afficher la check-list sur la mini-carte", "show-subtasks-field": "Afficher le champ des sous-tâches", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convertir en markdown", - "import-board-zip": "Ajouter un fichier .zip qui contient les fichiers JSON du tableau et les noms de sous-répertoires avec les pièces jointes", - "collapse": "Réduire", - "uncollapse": "Développer", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convertir en markdown" } diff --git a/imports/i18n/data/fr.i18n.json b/imports/i18n/data/fr.i18n.json index 9cf32fbbf..25f600960 100644 --- a/imports/i18n/data/fr.i18n.json +++ b/imports/i18n/data/fr.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s a été archivé", "activity-attached": "a attaché %s à %s", "activity-created": "a créé %s", - "activity-changedListTitle": "a renommé la liste en 1%s", "activity-customfield-created": "a créé le champ personnalisé %s", "activity-excluded": "a exclu %s de %s", "activity-imported": "a importé %s vers %s depuis %s", @@ -86,12 +85,10 @@ "add-card": "Ajouter une carte", "add-card-to-top-of-list": "Ajouter la carte en haut de la liste", "add-card-to-bottom-of-list": "Ajouter la carte en bas de la liste", - "setListWidthPopup-title": "Définir les largeurs", - "set-list-width": "Définir les largeurs", - "set-list-width-value": "Définir les largeurs mini. & maxi. (pixels)", - "list-width-error-message": "Les largeurs de liste doivent être des entiers supérieurs à 100", - "keyboard-shortcuts-enabled": "Raccourcis clavier activés. Cliquer pour désactiver.", - "keyboard-shortcuts-disabled": "Raccourcis clavier désactivés. Cliquer pour activer.", + "setListWidthPopup-title": "Définir la largeur de la liste", + "set-list-width": "Définir la largeur de la liste", + "set-list-width-value": "Largeur de la liste (pixels)", + "list-width-error-message": "La largeur de la liste doit être un entier positif", "setSwimlaneHeightPopup-title": "Définir la hauteur du couloir", "set-swimlane-height": "Définir la hauteur du couloir", "set-swimlane-height-value": "Hauteur du couloir (pixels)", @@ -107,7 +104,7 @@ "add-label": "Ajouter une étiquette", "add-list": "Ajouter une liste", "add-after-list": "Ajouter après la liste", - "add-members": "Ajouter des participants", + "add-members": "Assigner des participants", "added": "Ajouté le", "addMemberPopup-title": "Participants", "memberPopup-title": "Préférence du participant", @@ -139,7 +136,7 @@ "templates": "Modèles", "template-container": "Conteneur de modèles", "add-template-container": "Ajouter un conteneur de modèles", - "assign-member": "Attribuer à un participant", + "assign-member": "Affecter un participant", "attached": "joint", "attachment": "Pièce jointe", "attachment-delete-pop": "La suppression d'une pièce jointe est définitive. Cela est irréversible.", @@ -178,7 +175,7 @@ "board-view": "Vue du tableau", "board-view-cal": "Calendrier", "board-view-swimlanes": "Couloirs", - "board-view-collapse": "Réduire", + "board-view-collapse": "Diminuer", "board-view-gantt": "Gantt", "board-view-lists": "Listes", "bucket-example": "Comme « todo list » par exemple", @@ -199,7 +196,7 @@ "card-edit-labels": "Gérer les étiquettes", "card-edit-members": "Gérer les participants", "card-labels-title": "Modifier les étiquettes de la carte.", - "card-members-title": "Ajouter ou supprimer des participants du tableau à la carte.", + "card-members-title": "Assigner ou supprimer des participants à la carte.", "card-start": "Début", "card-start-on": "Commence le", "cardAttachmentsPopup-title": "Ajouter depuis", @@ -266,9 +263,6 @@ "checklists": "Check-lists", "click-to-star": "Cliquez pour ajouter ce tableau aux favoris.", "click-to-unstar": "Cliquez pour retirer ce tableau des favoris.", - "click-to-enable-auto-width": "Largeur de liste auto. désactivée. Cliquer pour activer.", - "click-to-disable-auto-width": "Largeur de liste auto. activée. Cliquer pour désactiver.", - "auto-list-width": "Largeur de liste auto.", "clipboard": "Presse-papier ou glisser-déposer", "close": "Fermer", "close-board": "Fermer le tableau", @@ -300,7 +294,6 @@ "color-white": "blanc", "color-yellow": "jaune", "unset-color": "Enlever", - "comments": "Commentaires", "comment": "Commenter", "comment-placeholder": "Écrire un commentaire", "comment-only": "Commentaire uniquement", @@ -310,7 +303,7 @@ "no-comments": "Aucun commentaire", "no-comments-desc": "Ne peut pas voir les commentaires et les activités.", "worker": "Travailleur", - "worker-desc": "Peut seulement déplacer des cartes, s'attribuer une carte et la commenter.", + "worker-desc": "Peut seulement déplacer des cartes, s'assigner à une carte et la commenter.", "computer": "Ordinateur", "confirm-subtask-delete-popup": "Êtes-vous sûr de vouloir supprimer la sous-tâche ?", "confirm-checklist-delete-popup": "Êtes-vous sûr de vouloir supprimer la check-list ?", @@ -383,7 +376,6 @@ "email-sent": "Courriel envoyé", "email-verifyEmail-subject": "Vérifier votre adresse de courriel sur __siteName__", "email-verifyEmail-text": "Bonjour __user__,\n\nPour vérifier votre compte courriel, il suffit de cliquer sur le lien ci-dessous.\n\n__url__\n\nMerci.", - "enable-vertical-scrollbars": "Activer les barres de défilement verticales", "enable-wip-limit": "Activer la limite WIP", "error-board-doesNotExist": "Ce tableau n'existe pas", "error-board-notAdmin": "Vous devez être administrateur de ce tableau pour faire cela", @@ -437,8 +429,8 @@ "filter-no-label": "Aucune étiquette", "filter-member-label": "Filtrer par participant", "filter-no-member": "Aucun participant", - "filter-assignee-label": "Filtrer par intervenant", - "filter-no-assignee": "Pas d'intervenant", + "filter-assignee-label": "Filtrer par personne assignée", + "filter-no-assignee": "Pas de personne assignée", "filter-custom-fields-label": "Filtrer par champs personnalisés", "filter-no-custom-fields": "Pas de champs personnalisés", "filter-show-archive": "Montrer les listes archivées", @@ -451,7 +443,7 @@ "advanced-filter-description": "Le filtre avancé permet d'écrire une chaîne contenant les opérateur suivants : == != <= >= && || ( ). Les opérateurs doivent être séparés par des espaces. Vous pouvez filtrer tous les champs personnalisés en saisissant leur nom et leur valeur. Par exemple : champ1 == valeur1. Remarque : si des champs ou valeurs contiennent des espaces, vous devez les mettre entre apostrophes. Par exemple : 'champ 1' == 'valeur 1'. Pour échapper un caractère de contrôle (' \\/), vous pouvez utiliser \\. Par exemple : champ1 == I\\'m. Il est également possible de combiner plusieurs conditions. Par exemple : f1 == v1 || f2 == v2. Normalement, tous les opérateurs sont interprétés de gauche à droite. Vous pouvez changer l'ordre à l'aide de parenthèses. Par exemple : F1 == V1 && ( F2 == V2 || F2 == V3 ). Vous pouvez également chercher parmi les champs texte en utilisant des expressions régulières : f1 == /Test.*/i", "fullname": "Nom complet", "header-logo-title": "Retourner à la page des tableaux", - "show-activities": "Afficher les activités", + "hide-system-messages": "Masquer les messages système", "headerBarCreateBoardPopup-title": "Créer un tableau", "home": "Accueil", "import": "Importer", @@ -471,9 +463,9 @@ "import-board-instruction-about-errors": "Si une erreur survient en important le tableau, il se peut que l'import ait fonctionné, et que le tableau se trouve sur la page \"Tous les tableaux\".", "import-json-placeholder": "Collez ici les données JSON valides", "import-csv-placeholder": "Déposez ici vos données valides CSV/TSV", - "import-map-members": "Faire correspondre les participants", - "import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez faire correspondre les participants que vous souhaitez importer à vos utilisateurs.", - "import-members-map-note": "Note: les participants ne concordant pas seront attribués à l'utilisateur courant.", + "import-map-members": "Assigner des participants", + "import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez assigner les participants que vous souhaitez importer à vos utilisateurs.", + "import-members-map-note": "Note: les participants ne concordant pas seront assignés à l'utilisateur courant.", "import-show-user-mapping": "Contrôler l'assignation des participants", "import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce participant", "importMapMembersAddPopup-title": "Sélectionner le participant", @@ -580,14 +572,12 @@ "select-board": "Sélectionner le tableau", "set-wip-limit-value": "Définit une limite maximale au nombre de cartes de cette liste", "setWipLimitPopup-title": "Définir la limite WIP", - "shortcut-add-self": "S'ajouter à la carte courante", - "shortcut-assign-self": "S'attribuer cette carte", + "shortcut-assign-self": "Affecter cette carte à vous-même", "shortcut-autocomplete-emoji": "Auto-complétion des emoji", "shortcut-autocomplete-members": "Auto-complétion des participants", "shortcut-clear-filters": "Retirer tous les filtres", "shortcut-close-dialog": "Fermer la boîte de dialogue", "shortcut-filter-my-cards": "Filtrer mes cartes", - "shortcut-filter-my-assigned-cards": "Filtrer mes cartes attribuées", "shortcut-show-shortcuts": "Afficher cette liste de raccourcis", "shortcut-toggle-filterbar": "Afficher/Masquer la barre latérale des filtres", "shortcut-toggle-searchbar": "Afficher/Masquer la barre latérale de recherche", @@ -610,8 +600,7 @@ "has-spenttime-cards": "A des cartes avec du temps passé", "time": "Temps", "title": "Titre", - "toggle-assignees": "Changer les intervenants 1-9 sur une carte (par ordre d'ajout au tableau)", - "toggle-labels": "Afficher/Masquer les étiquettes 1-9 sur les cartes. La sélection multiple ajoute les étiquettes 1-9", + "toggle-labels": "Bascule les étiquettes 1-9 pour les cartes. La sélection multiple ajoute les étiquettes 1-9", "remove-labels-multiselect": "La multi-sélection supprime les étiquettes 1-9", "tracking": "Suivi", "tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou participant.", @@ -729,7 +718,7 @@ "setCardActionsColorPopup-title": "Choisissez une couleur", "setSwimlaneColorPopup-title": "Choisissez une couleur", "setListColorPopup-title": "Choisissez une couleur", - "assigned-by": "Attribué par", + "assigned-by": "Assigné par", "requested-by": "Demandé par", "card-sorting-by-number": "Tri numérique des cartes", "board-delete-notice": "La suppression est définitive. Vous perdrez toutes les listes, cartes et actions associées à ce tableau.", @@ -742,10 +731,10 @@ "queue": "Queue", "subtask-settings": "Paramètres des sous-tâches", "card-settings": "Paramètres de la carte", - "minicard-settings": "Paramètres de la mini-carte", + "minicard-settings": "Paramètres de la minicarte", "boardSubtaskSettingsPopup-title": "Paramètres des sous-tâches du tableau", "boardCardSettingsPopup-title": "Paramètres de la carte", - "boardMinicardSettingsPopup-title": "Paramètres de la mini-carte", + "boardMinicardSettingsPopup-title": "Paramètres de la minicarte", "deposit-subtasks-board": "Déposer des sous-tâches dans ce tableau :", "deposit-subtasks-list": "Liste de destination pour les sous-tâches déposées ici :", "show-parent-in-minicard": "Voir la carte parente dans la mini-carte :", @@ -928,11 +917,11 @@ "accounts-allowUserDelete": "Autoriser les utilisateurs à supprimer leur compte", "hide-minicard-label-text": "Cacher l'étiquette de la mini-carte", "show-desktop-drag-handles": "Voir les poignées de déplacement du bureau", - "assignee": "Intervenant", - "cardAssigneesPopup-title": "Intervenant", + "assignee": "Personne assignée", + "cardAssigneesPopup-title": "Personne assignée", "addmore-detail": "Ajouter une description plus détaillée", "show-on-card": "Afficher sur la carte", - "show-on-minicard": "Afficher sur la mini-carte", + "show-on-minicard": "Afficher sur la minicarte", "new": "Nouveau", "editOrgPopup-title": "Éditer l'organisation", "newOrgPopup-title": "Nouvelle organisation", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Vous ne pouvez pas supprimer cette carte avant d'avoir d'abord supprimé la carte liée qui a", "delete-linked-cards-before-this-list": "Vous ne pouvez pas supprimer cette liste avant d'avoir d'abord supprimé les cartes liées qui pointent vers des cartes de cette liste", "hide-checked-items": "Cacher les éléments cochés", - "hide-finished-checklist": "Cacher la check-list terminée", "task": "Tâche", "create-task": "Créer une tâche", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Équipes", "displayName": "Nom d'Affichage", "shortName": "Nom Court", - "autoAddUsersWithDomainName": "Ajouter automatiquement les utilisateurs avec le nom de domaine", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Site Web", "person": "Personne", "my-cards": "Mes Cartes", @@ -1023,7 +1011,7 @@ "operator-user-abbrev": "@", "operator-member": "participant", "operator-member-abbrev": "m", - "operator-assignee": "intervenant", + "operator-assignee": "personne assignée", "operator-assignee-abbrev": "a", "operator-creator": "créateur", "operator-status": "statut", @@ -1054,7 +1042,7 @@ "predicate-checklist": "check-list", "predicate-start": "début", "predicate-end": "fin", - "predicate-assignee": "intervenant", + "predicate-assignee": "personne assignée", "predicate-member": "participant", "predicate-public": "public", "predicate-private": "privé", @@ -1079,13 +1067,13 @@ "globalSearch-instructions-operator-comment": "`__operator_comment__:<texte>` - cartes dont le commentaire contient *<texte>*.", "globalSearch-instructions-operator-label": "`__operator_label__:<couleur>` `__operator_label__:<nom>` - cartes qui ont une étiquette correspondant à *<couleur>* ou à *<nom>*.", "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<nom|couleur>` - raccourci pour `__operator_label__:<couleur>` ou `__operator_label__:<nom>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<nom>` - cartes où l'utilisateur <nom> est *participant* ou *intervenant*.", + "globalSearch-instructions-operator-user": "`__operator_user__:<nom>` - cartes où l'utilisateur <nom> est *assigné* ou est un *participant*.", "globalSearch-instructions-operator-at": "`__operator_user_abbrev__nom` - raccourci pour `__operator_user__:<nom>`", "globalSearch-instructions-operator-member": "`__operator_member__:<nom>` - cartes pour lesquelles l'utilisateur *<nom>* est *participant*", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<nom>` - cartes *attribuées* à l'utilisateur *<nom>*", + "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<nom>` - cartes *assignées* à l'utilisateur *<nom>*", "globalSearch-instructions-operator-creator": "`__operator_creator__:<utilisateur>` - cartes dont le créateur est *<utilisateur>*", - "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cartes appartenant à un tableau attribué à l'organisation *<name>*", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cartes appartenant à un tableau attribué à l'équipe *<name>*", + "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cartes appartenant à un tableau assigné à l'organisation *<name>*", + "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cartes appartenant à un tableau assigné à l'équipe *<name>*", "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cartes qui arrive à échéance dans moins de *<n>* jours à partir d'aujourd'hui.\n`__operator_due__:__predicate_overdue__` liste toutes les cartes ayant passé la date d'échéance.", "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cartes qui ont été créées il y a *<n>* jours ou moins", "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cartes qui ont été modifiées il y a *<n>* jours ou moins", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Date de création (Plus récentes en premier)", "created-at-oldest-first": "Date de création (Plus anciennes en premier)", "links-heading": "Liens", - "hide-activities-of-all-boards": "Ne pas afficher les activités du tableau sur tous les tableaux", - "now-activities-of-all-boards-are-hidden": "Les activités de tous les tableaux seront dorénavant cachées", + "hide-system-messages-of-all-users": "Masquer les messages système de tous les utilisateurs", + "now-system-messages-of-all-users-are-hidden": "Les messages système de tous les utilisateurs seront dorénavant masqués", "move-swimlane": "Déplacer le couloir", "moveSwimlanePopup-title": "Déplacer le couloir", "custom-field-stringtemplate": "Modèle de chaîne", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Séparateur (utiliser ou   pour un espace)", "custom-field-stringtemplate-item-placeholder": "Appuyez sur Entrée pour ajouter plus d'éléments", "creator": "Créateur", - "creator-on-minicard": "Créateur sur la mini-carte", "filesReportTitle": "Rapports sur les fichiers", "reports": "Rapports", "rulesReportTitle": "Rapports sur les règles", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Actions sur la check-list", "moveChecklist": "Déplacer la check-list", "moveChecklistPopup-title": "Déplacer la check-list", - "newlineBecomesNewChecklistItem": "Chaque ligne de texte devient un élément de la check-list", - "newLineNewItem": "Une ligne de texte = un élément de la check-list", - "newlineBecomesNewChecklistItemOriginOrder": "Chaque ligne de texte devient un élément de la check-list, l'ordre est respecté", - "originOrder": "ordre original", + "newlineBecomesNewChecklistItem": "Chaque retour à la ligne produit un nouvel élément de check-list", "copyChecklist": "Copier la check-list", "copyChecklistPopup-title": "Copier la check-list", "card-show-lists": "Afficher les listes sur la carte", @@ -1256,17 +1240,8 @@ "translation": "Traduction", "text": "Texte", "translation-text": "Texte traduit", + "show-at-minicard": "Afficher sur la mini-carte", + "show-checklist-at-minicard": "Afficher la check-list sur la mini-carte", "show-subtasks-field": "Afficher le champ des sous-tâches", - "show-week-of-year": "Afficher la semaine de l'année (ISO 8601)", - "convert-to-markdown": "Convertir en markdown", - "import-board-zip": "Ajouter un fichier .zip qui contient les fichiers JSON du tableau et les noms de sous-répertoires avec les pièces jointes", - "collapse": "Réduire", - "uncollapse": "Développer", - "hideCheckedChecklistItems": "Cacher les éléments cochés de la check-list", - "hideAllChecklistItems": "Cacher tous les éléments de la check-list", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Page d'accessibilité activée", - "accessibility-title": "Sujet d'accessibilité", - "accessibility-content": "Contenu d'accessibilité" + "convert-to-markdown": "Convertir en markdown" } diff --git a/imports/i18n/data/fy-NL.i18n.json b/imports/i18n/data/fy-NL.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/fy-NL.i18n.json +++ b/imports/i18n/data/fy-NL.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/fy.i18n.json b/imports/i18n/data/fy.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/fy.i18n.json +++ b/imports/i18n/data/fy.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/gl-ES.i18n.json b/imports/i18n/data/gl-ES.i18n.json index f2cd7a910..db54c9626 100644 --- a/imports/i18n/data/gl-ES.i18n.json +++ b/imports/i18n/data/gl-ES.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Engadir tarxeta", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "amarelo", "unset-color": "Unset", - "comments": "Comments", "comment": "Comentario", "comment-placeholder": "Escribir un comentario", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Nome completo", "header-logo-title": "Retornar á páxina dos seus taboleiros.", - "show-activities": "Show Activities", + "hide-system-messages": "Agochar as mensaxes do sistema", "headerBarCreateBoardPopup-title": "Crear taboleiro", "home": "Inicio", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Hora", "title": "Título", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Seguimento", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/gl.i18n.json b/imports/i18n/data/gl.i18n.json index 9dfe8894e..883e77d2c 100644 --- a/imports/i18n/data/gl.i18n.json +++ b/imports/i18n/data/gl.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Engadir tarxeta", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "amarelo", "unset-color": "Unset", - "comments": "Comments", "comment": "Comentario", "comment-placeholder": "Escribir un comentario", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Nome completo", "header-logo-title": "Retornar á páxina dos seus taboleiros.", - "show-activities": "Show Activities", + "hide-system-messages": "Agochar as mensaxes do sistema", "headerBarCreateBoardPopup-title": "Crear taboleiro", "home": "Inicio", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Hora", "title": "Título", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Seguimento", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/gu-IN.i18n.json b/imports/i18n/data/gu-IN.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/gu-IN.i18n.json +++ b/imports/i18n/data/gu-IN.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/he-IL.i18n.json b/imports/i18n/data/he-IL.i18n.json index 126686818..952553a36 100644 --- a/imports/i18n/data/he-IL.i18n.json +++ b/imports/i18n/data/he-IL.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "כל הלוחות", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "המסנן המתקדם מאפשר לך לכתוב מחרוזת שמכילה את הפעולות הבאות: == != <= >= && || ( ) רווח מכהן כמפריד בין הפעולות. ניתן לסנן את כל השדות המותאמים אישית על ידי הקלדת שמם והערך שלהם. למשל: שדה1 == ערך1. לתשומת לבך: אם שדות או ערכים מכילים רווח, יש לעטוף אותם במירכא מכל צד. למשל: 'שדה 1' == 'ערך 1'. ניתן גם לשלב מגוון תנאים. למשל: F1 == V1 || F1 == V2. על פי רוב כל הפעולות מפוענחות משמאל לימין. ניתן לשנות את הסדר על ידי הצבת סוגריים. למשל: ( F1 == V1 && ( F2 == V2 || F2 == V3. כמו כן, ניתן לחפש בשדה טקסט באופן הבא: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/he.i18n.json b/imports/i18n/data/he.i18n.json index 3273295d4..784cab688 100644 --- a/imports/i18n/data/he.i18n.json +++ b/imports/i18n/data/he.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s הועבר לארכיון", "activity-attached": "%s צורף ל%s", "activity-created": "%s נוצר", - "activity-changedListTitle": "שם הרשימה השתנה לשם %s", "activity-customfield-created": "נוצר שדה בהתאמה אישית %s", "activity-excluded": "%s לא נכלל ב%s", "activity-imported": "%s ייובא מ%s אל %s", @@ -86,12 +85,10 @@ "add-card": "הוספת כרטיס", "add-card-to-top-of-list": "הוספת כרטיס לראש הרשימה", "add-card-to-bottom-of-list": "הוספת כרטיס לתחתית הרשימה", - "setListWidthPopup-title": "הגדרת רוחבים", - "set-list-width": "הגדרת רוחבים", - "set-list-width-value": "הגדרת רוחבים מזעריים ומרביים (פיקסלים)", - "list-width-error-message": "רשימת הרוחבים חייבים להיות מספרים שלמים מעל 100", - "keyboard-shortcuts-enabled": "קיצורי מקלדת פעילים. לחיצה תשבית אותם.", - "keyboard-shortcuts-disabled": "קיצורי מקלדת מושבתים. לחיצה תפעיל אותם.", + "setListWidthPopup-title": "הגדרת רוחב רשימה", + "set-list-width": "הגדרת רוחב רשימה", + "set-list-width-value": "רוחב רשימה (פיקסלים)", + "list-width-error-message": "רוחב הרשימה חייב להיות מספר שלם וחיובי", "setSwimlaneHeightPopup-title": "הגדרת גובה מסלול", "set-swimlane-height": "הגדרת גובה מסלול", "set-swimlane-height-value": "גובה מסלול (פיקסלים)", @@ -266,9 +263,6 @@ "checklists": "רשימות", "click-to-star": "יש ללחוץ להוספת הלוח למועדפים.", "click-to-unstar": "יש ללחוץ להסרת הלוח מהמועדפים.", - "click-to-enable-auto-width": "רוחב רשימה אוטומטי מושבת. לחיצה תפעיל אותו.", - "click-to-disable-auto-width": "רוחב רשימה אוטומטי מופעל. לחיצה תשבית אותו.", - "auto-list-width": "רוחב רשימה אוטומטי", "clipboard": "לוח גזירים או גרירה ושחרור", "close": "סגירה", "close-board": "סגירת לוח", @@ -300,7 +294,6 @@ "color-white": "לבן", "color-yellow": "צהוב", "unset-color": "בטל הגדרה", - "comments": "הערות", "comment": "לפרסם", "comment-placeholder": "כתיבת הערה", "comment-only": "תגובות בלבד", @@ -383,7 +376,6 @@ "email-sent": "הודעת הדוא״ל נשלחה", "email-verifyEmail-subject": "אימות כתובת הדוא״ל שלך באתר __siteName__", "email-verifyEmail-text": "__user__ שלום,\n\nלאימות כתובת הדוא״ל המשויכת לחשבונך, עליך פשוט ללחוץ על הקישור המופיע להלן.\n\n__url__\n\nתודה.", - "enable-vertical-scrollbars": "הפעלת פסי גלילה אנכיים", "enable-wip-limit": "הפעלת מגבלת „בעבודה”", "error-board-doesNotExist": "לוח זה אינו קיים", "error-board-notAdmin": "צריכות להיות לך הרשאות ניהול על לוח זה כדי לעשות זאת", @@ -451,7 +443,7 @@ "advanced-filter-description": "המסנן המתקדם מאפשר לך לכתוב מחרוזת שמכילה את הפעולות הבאות: == != <= >= && || ( ) רווח מכהן כמפריד בין הפעולות. ניתן לסנן את כל השדות המותאמים אישית על ידי הקלדת שמם והערך שלהם. למשל: שדה1 == ערך1. לתשומת לבך: אם שדות או ערכים מכילים רווח, יש לעטוף אותם במירכא מכל צד. למשל: 'שדה 1' == 'ערך 1'. ניתן גם לשלב מגוון תנאים. למשל: F1 == V1 || F1 == V2. על פי רוב כל הפעולות מפוענחות משמאל לימין. ניתן לשנות את הסדר על ידי הצבת סוגריים. למשל: ( F1 == V1 && ( F2 == V2 || F2 == V3. כמו כן, ניתן לחפש בשדה טקסט באופן הבא: F1 == /Tes.*/i", "fullname": "שם מלא", "header-logo-title": "חזרה לדף הלוחות שלך.", - "show-activities": "הצגת פעילויות", + "hide-system-messages": "הסתרת הודעות מערכת", "headerBarCreateBoardPopup-title": "יצירת לוח", "home": "בית", "import": "יבוא", @@ -580,14 +572,12 @@ "select-board": "בחירת לוח", "set-wip-limit-value": "הגדרת מגבלה למספר המרבי של משימות ברשימה זו", "setWipLimitPopup-title": "הגדרת מגבלת „בעבודה”", - "shortcut-add-self": "להוסיף את עצמך לכרטיס הנוכחי", "shortcut-assign-self": "להקצות אותי לכרטיס הנוכחי", "shortcut-autocomplete-emoji": "השלמה אוטומטית לאימוג׳י", "shortcut-autocomplete-members": "השלמה אוטומטית של חברים", "shortcut-clear-filters": "ביטול כל המסננים", "shortcut-close-dialog": "סגירת החלון", "shortcut-filter-my-cards": "סינון הכרטיסים שלי", - "shortcut-filter-my-assigned-cards": "סינון הכרטיסים שלי שהוקצו", "shortcut-show-shortcuts": "העלאת רשימת קיצורים זו", "shortcut-toggle-filterbar": "הצגה או הסתרה של סרגל צד הסינון", "shortcut-toggle-searchbar": "הצגה או הסתרה של סרגל הצד", @@ -610,7 +600,6 @@ "has-spenttime-cards": "יש כרטיסי זמן שהושקע", "time": "זמן", "title": "כותרת", - "toggle-assignees": "הצגת/הסרת מוקצים 1-‏9 בכרטיסים (לפי סדר ההוספה ללוח).", "toggle-labels": "החלפת מצב תוויות 1-‎9 לכרטיס. בחירה מרוכזת מוסיפה תוויות 1‏-9", "remove-labels-multiselect": "בחירה מרוכזת מסירה תוויות 1-‏9", "tracking": "מעקב", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "לא ניתן למחוק את הכרטיס הזה לפני שמוחקים את הכרטיס המקושר שיש לו", "delete-linked-cards-before-this-list": "לא ניתן למחוק את הרשימה הזו לפני שמוחקים את הכרטיסים שמצביעים לכרטיסים ברשימה הזו", "hide-checked-items": "הסתרת הפריטים שסומנו", - "hide-finished-checklist": "הסתרת רשימת מטלות שהושלמה", "task": "משימה", "create-task": "צירת משימה", "ok": "אישור", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "מועד יצירה (החדש ביותר בהתחלה)", "created-at-oldest-first": "מועד יצירה (הישן ביותר בהתחלה)", "links-heading": "קישורים", - "hide-activities-of-all-boards": "לא להציג את פעילויות הלוח בכל הלוחות", - "now-activities-of-all-boards-are-hidden": "עכשיו כל הפעילויות של כל הלוחות מוסתרות", + "hide-system-messages-of-all-users": "להסתיר את הודעות המערכת של כל המשתמשים", + "now-system-messages-of-all-users-are-hidden": "כעת הודעות המערכת של כל המשתמשים מוסתרות", "move-swimlane": "העברת מסלול", "moveSwimlanePopup-title": "העברת מסלול", "custom-field-stringtemplate": "תבנית מחרוזת", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "מפריד (להשתמש ב־ או ב־  כרווח)", "custom-field-stringtemplate-item-placeholder": "יש ללחוץ על enter כדי להוסיף עוד פריטים", "creator": "יוצר", - "creator-on-minicard": "יוצר בכרטיסון", "filesReportTitle": "דוח קבצים", "reports": "דוחות", "rulesReportTitle": "דוח כללים", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "פעולות על רשימת מטלות", "moveChecklist": "העברת רשימת מטלות", "moveChecklistPopup-title": "העברת רשימת מטלות", - "newlineBecomesNewChecklistItem": "כל שורה של טקסט הופכת לאחד מפריטי רשימת המטלות", - "newLineNewItem": "שורה אחת של טקסט = פריט רשימת מטלות אחד", - "newlineBecomesNewChecklistItemOriginOrder": "כל שורה של טקסט הופכת לאחד הפריטים ברשימת המטלות, לפי הסדר המקורי", - "originOrder": "סדר מקורי", + "newlineBecomesNewChecklistItem": "שורה חדשה הופכת לפריט חדש ברשימת המטלות", "copyChecklist": "העתקת רשימת מטלות", "copyChecklistPopup-title": "העתקת רשימת מטלות", "card-show-lists": "הצגת רשימות על הכרטיס", @@ -1256,17 +1240,8 @@ "translation": "תרגום", "text": "טקסט", "translation-text": "טקסט תרגום", + "show-at-minicard": "הצגה בכרטיסון", + "show-checklist-at-minicard": "הצגת רשימת מטלות על הכרטיסון", "show-subtasks-field": "הצגת שדה תת־משימות", - "show-week-of-year": "הצגת שבוע בשנה (ISO 8601)", - "convert-to-markdown": "המרה ל־Markdown", - "import-board-zip": "הוספת קובץ ‎.zip עם קובצי JSON של לוח, ותת־תיקיות בשם הלוח עם קבצים מצורפים", - "collapse": "צמצום", - "uncollapse": "ביטול צמצום", - "hideCheckedChecklistItems": "הסתרת פריטים שסומנו ברשימת הפריטים", - "hideAllChecklistItems": "הסתרת כל הפריטים ברשימת המטלות", - "support": "תמיכה", - "supportPopup-title": "תמיכה", - "accessibility-page-enabled": "עמוד הנגישות הופעל", - "accessibility-title": "נושא נגישות", - "accessibility-content": "תוכן נגישות" + "convert-to-markdown": "המרה ל־Markdown" } diff --git a/imports/i18n/data/hi-IN.i18n.json b/imports/i18n/data/hi-IN.i18n.json index 4e08ed540..e541a5c7e 100644 --- a/imports/i18n/data/hi-IN.i18n.json +++ b/imports/i18n/data/hi-IN.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%sसंग्रह में ले जाया गया", "activity-attached": "संलग्न %s से %s", "activity-created": "बनाया %s", - "activity-changedListTitle": "सूची का नाम बदलकर %sकर दिया गया", "activity-customfield-created": "बनाया रिवाज क्षेत्र %s", "activity-excluded": "छोड़ा %s से %s", "activity-imported": "सूचित कर %s के अंदर %s से %s", @@ -86,16 +85,14 @@ "add-card": "कार्ड जोड़ें", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "चौड़ाई सेट करें", - "set-list-width": "चौड़ाई सेट करें", - "set-list-width-value": "न्यूनतम और अधिकतम चौड़ाई (पिक्सेल) सेट करें", - "list-width-error-message": "सूची चौड़ाई 100 से अधिक पूर्णांक होनी चाहिए", - "keyboard-shortcuts-enabled": "कुंजीपटल शॉर्टकट सक्षम किए गए. अक्षम करने के लिए क्लिक करें.", - "keyboard-shortcuts-disabled": "कुंजीपटल शॉर्टकट अक्षम है| सक्षम करने के लिए क्लिक करें।", - "setSwimlaneHeightPopup-title": "स्विमलेन ऊंचाई सेट करें |", - "set-swimlane-height": "स्विमलेन ऊंचाई सेट करें |", - "set-swimlane-height-value": "स्विमलेन ऊँचाई (पिक्सेल) |", - "swimlane-height-error-message": "स्विमलेन की ऊंचाई एक धनात्मक पूर्णांक होनी चाहिए", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", "add-swimlane": "तैरन जोड़ें", "add-subtask": "उप कार्य जोड़ें", "add-checklist": "चिह्नांकन-सूची जोड़ें", @@ -103,10 +100,10 @@ "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "मिनीकार्ड में कवर छवि जोड़ें", + "add-cover": "Add cover image to minicard", "add-label": "नामपत्र जोड़ें", "add-list": "सूची जोड़ें", - "add-after-list": "सूची के बाद जोड़ें", + "add-after-list": "Add After List", "add-members": "सदस्य जोड़ें", "added": "जोड़ा गया", "addMemberPopup-title": "सदस्य", @@ -146,13 +143,13 @@ "attachmentDeletePopup-title": "मिटाएँ संलग्नक?", "attachments": "संलग्नक", "auto-watch": "स्वचालित रूप से देखो बोर्डों जब वे बनाए जाते हैं", - "avatar-too-big": "अवतार बहुत बड़ा है (__आकार__अधिकतम )", + "avatar-too-big": "The avatar is too large (__size__ max)", "back": "वापस", "board-change-color": "रंग बदलना", - "board-change-background-image": "पृष्ठभूमि छवि बदलें", - "board-background-image-url": "पृष्ठभूमि छवि URL", - "add-background-image": "पृष्ठभूमि छवि जोड़ें ", - "remove-background-image": "पृष्ठभूमि छवि निकालें", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "All Boards Settings", "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", @@ -165,9 +162,9 @@ "board-public-info": "यह बोर्ड हो जाएगा <strong>सार्वजनिक</strong>.", "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", "boardChangeColorPopup-title": "बोर्ड पृष्ठभूमि बदलें", - "boardChangeBackgroundImagePopup-title": "पृष्ठभूमि छवि बदलें", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "रंग बदलना", - "allBoardsChangeBackgroundImagePopup-title": "पृष्ठभूमि छवि बदलें", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "बोर्ड का नाम बदलें", "boardChangeVisibilityPopup-title": "दृश्यता बदलें", "boardChangeWatchPopup-title": "बदलें वॉच", @@ -266,9 +263,6 @@ "checklists": "जांच सूची", "click-to-star": "इस बोर्ड को स्टार करने के लिए क्लिक करें ।", "click-to-unstar": "इस बोर्ड को अनस्टार करने के लिए क्लिक करें।", - "click-to-enable-auto-width": "ऑटो सूची चौड़ाई अक्षम है। सक्षम करने के लिए क्लिक करें", - "click-to-disable-auto-width": "ऑटो सूची चौड़ाई अक्षम है। अक्षम करने के लिए क्लिक करें.", - "auto-list-width": "ऑटो सूची चौड़ाई", "clipboard": "क्लिपबोर्ड या खींचें और छोड़ें", "close": "बंद करे", "close-board": "बोर्ड बंद करे", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "पीला", "unset-color": "Unset", - "comments": "टिप्पणियाँ", "comment": "टिप्पणी", "comment-placeholder": "टिप्पणी लिखें", "comment-only": "केवल टिप्पणी करें", @@ -383,14 +376,13 @@ "email-sent": "Email sent", "email-verifyEmail-subject": "Verify your email address on __siteName__", "email-verifyEmail-text": "नमस्ते __user __, \n\n अपना खाता ईमेल सत्यापित करने के लिए, बस नीचे दिए गए लिंक पर क्लिक करें। \n\n__url __ \n\n धन्यवाद।", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Enable WIP Limit", "error-board-doesNotExist": "यह बोर्ड does not exist", "error-board-notAdmin": "You need तक be व्यवस्थापक of यह बोर्ड तक do that", "error-board-notAMember": "You need तक be एक सदस्य of यह बोर्ड तक do that", "error-json-malformed": "Your text is not valid JSON", "error-json-schema": "आपके JSON डेटा में सही प्रारूप में सही जानकारी शामिल नहीं है", - "error-csv-schema": "आपके CSV(कॉमा सेपरेटेड वैल्यू)/TSV (टैब सेपरेटेड वैल्यू) में सही फ़ॉर्मैट में उचित जानकारी शामिल नहीं है", + "error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ", "error-list-doesNotExist": "यह सूची does not exist", "error-user-doesNotExist": "यह user does not exist", "error-user-notAllowSelf": "You can not invite yourself", @@ -429,7 +421,7 @@ "filter-overdue": "Overdue", "filter-due-today": "Due today", "filter-due-this-week": "Due this week", - "filter-due-next-week": "अगले सप्ताह होने वाला है", + "filter-due-next-week": "Due next week", "filter-due-tomorrow": "Due tomorrow", "list-filter-label": "शीर्षक द्वारा निस्पंदन सूची", "filter-clear": "Clear filter", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows तक write एक string containing following operators: == != <= >= && || ( ) एक space is used as एक separator between the Operators. You can filter for संपूर्ण प्रचलन क्षेत्र by typing their names और values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need तक encapsulate them के अंदर single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) तक be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally संपूर्ण operators are interpreted से left तक right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back तक your बोर्डों page.", - "show-activities": "गतिविधियाँ दिखाएँ", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "बोर्ड निर्माण करना", "home": "Home", "import": "Import", @@ -558,7 +550,7 @@ "public": "Public", "public-desc": "यह बोर्ड is public. It's visible तक anyone साथ में the link और will show up अंदर में गूगल की तरह खोज इंजन । केवल लोग संकलित तक बोर्ड संपादित कर सकते हैं.", "quick-access-description": "Star एक बोर्ड तक जोड़ें एक shortcut अंदर में यह पट्टी .", - "remove-cover": "मिनीकार्ड से कवर छवि हटाएं", + "remove-cover": "Remove cover image from minicard", "remove-from-board": "हटाएँ से बोर्ड", "remove-label": "हटाएँ Label", "listDeletePopup-title": "मिटाएँ सूची ?", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set एक limit for the maximum number of tasks अंदर में यह list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "अपने आप को वर्तमान कार्ड में जोड़ें", "shortcut-assign-self": "Assign yourself तक current कार्ड", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete सदस्य", "shortcut-clear-filters": "Clear संपूर्ण filters", "shortcut-close-dialog": "Close Dialog", "shortcut-filter-my-cards": "Filter my कार्ड", - "shortcut-filter-my-assigned-cards": "मेरे असाइन किए गए कार्ड फ़िल्टर करें", "shortcut-show-shortcuts": "Bring up यह shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time कार्ड", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -750,9 +739,9 @@ "deposit-subtasks-list": "Landing सूची for subtasks deposited here:", "show-parent-in-minicard": "Show parent अंदर में minicard:", "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "मिनकार्ड पर कवर छवि", - "badge-attachment-on-minicard": "मिनीकार्ड पर अटैचमेंट की गिनती", - "card-sorting-by-number-on-minicard": "मिनीकार्ड पर नंबर के आधार पर कार्ड सॉर्टिंग", + "cover-attachment-on-minicard": "Cover image on minicard", + "badge-attachment-on-minicard": "Count of attachments on minicard", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", "prefix-with-full-path": "Prefix साथ में full path", "prefix-with-parent": "Prefix साथ में parent", "subtext-with-full-path": "Subtext साथ में full path", @@ -865,7 +854,7 @@ "r-items-list": "item1,item2,item3", "r-add-swimlane": "Add swimlane", "r-swimlane-name": "swimlane name", - "r-board-note": "ध्यान दें: हर संभव मान से मेल खाने के लिए एक फ़ील्ड खाली छोड़ दें।", + "r-board-note": "Note: leave a field empty to match every possible value. ", "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", "r-when-a-card-is-moved": "जब एक कार्ड is स्थानांतरित तक another list", "r-set": "Set", @@ -896,9 +885,9 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", - "org-number": "संगठनों की संख्या है: ", - "team-number": "दल - टीमों की संख्या है: ", - "people-number": "व्यक्तियों की संख्या है: ", + "org-number": "The number of organizations is: ", + "team-number": "The number of teams is: ", + "people-number": "The number of people is: ", "swimlaneDeletePopup-title": "Delete Swimlane ?", "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", "restore-all": "Restore all", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "समाप्त चेकलिस्ट छुपाएं", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Teams", "displayName": "Display Name", "shortName": "Short Name", - "autoAddUsersWithDomainName": "डोमेन नाम के साथ उपयोगकर्ताओं को स्वचालित रूप से जोड़ें", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Website", "person": "Person", "my-cards": "My Cards", @@ -1111,7 +1099,7 @@ "label-names": "Label Names", "archived-at": "archived at", "sort-cards": "Sort Cards", - "sort-is-on": "तरह - सॉर्ट-चालू है", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "Sort Cards", "due-date": "Due Date", "server-error": "Server Error", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "सभी बोर्डों पर बोर्ड की गतिविधियों को न दिखाएं", - "now-activities-of-all-boards-are-hidden": "अब सभी बोर्डों की सभी गतिविधियां छिपी हुई हैं", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "मिनीकार्ड पर निर्माता", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "पाठ की प्रत्येक पंक्ति चेकलिस्ट आइटम में से एक बन जाती है", - "newLineNewItem": "पाठ की एक पंक्ति = एक चेकलिस्ट आइटम", - "newlineBecomesNewChecklistItemOriginOrder": "पाठ की प्रत्येक पंक्ति चेकलिस्ट आइटम, मूल क्रम में से एक बन जाती है", - "originOrder": "मूल क्रम", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1241,32 +1225,23 @@ "minicardDetailsActionsPopup-title": "Card Details", "Mongo_sessions_count": "Mongo sessions count", "change-visibility": "दृश्यता बदलें", - "max-upload-filesize": "बाइट्स में फ़ाइल आकार अधिकतम अपलोड करें:", - "allowed-upload-filetypes": "अपलोड करने की अनुमति दी गई फ़ाइल प्रकार:", - "max-avatar-filesize": "बाइट्स में अधिकतम अवतार फ़ाइल आकार:", - "allowed-avatar-filetypes": "अनुमत अवतार फ़ाइलप्रकार:", - "invalid-file": "अगर फ़ाइल नाम अमान्य है, तो अपलोड या नाम बदलना रद्द कर दिया जाता है.", - "preview-pdf-not-supported": "आपका डिवाइस PDF का पूर्वावलोकन करने का समर्थन नहीं करता है। इसके बजाय डाउनलोड करने का प्रयास करें।", - "drag-board": "बोर्ड खींचें", - "translation-number": "कस्टम अनुवाद स्ट्रिंग्स की संख्या है:", - "delete-translation-confirm-popup": "क्या आप वाकई इस कस्टम अनुवाद स्ट्रिंग को हटाना चाहते हैं? कोई पूर्ववत नहीं है।", - "newTranslationPopup-title": "नई कस्टम अनुवाद स्ट्रिंग", - "editTranslationPopup-title": "कस्टम अनुवाद स्ट्रिंग संपादित करें", - "settingsTranslationPopup-title": "इस कस्टम अनुवाद स्ट्रिंग को हटाएँ?", - "translation": "अनुवाद", + "max-upload-filesize": "Max upload filesize in bytes:", + "allowed-upload-filetypes": "Allowed upload filetypes:", + "max-avatar-filesize": "Max avatar filesize in bytes:", + "allowed-avatar-filetypes": "Allowed avatar filetypes:", + "invalid-file": "If filename is invalid, upload or rename is cancelled.", + "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", + "drag-board": "Drag board", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "Text", - "translation-text": "अनुवाद पाठ", - "show-subtasks-field": "उप-कार्य फ़ील्ड दिखाएँ", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "मार्कडाउन में कनवर्ट करें", - "import-board-zip": ".zip फ़ाइल जोड़ें जिसमें बोर्ड JSON फ़ाइलें हैं, और अनुलग्नकों के साथ बोर्ड नाम उपनिर्देशिकाएँ हैं", - "collapse": "संक्षिप्त करें", - "uncollapse": "असंकुचित करें", - "hideCheckedChecklistItems": "चेक किए गए चेकलिस्ट आइटम छुपाएं", - "hideAllChecklistItems": "सभी चेकलिस्ट आइटम छुपाएं", - "support": "समर्थन या सहायता", - "supportPopup-title": "समर्थन या सहायता", - "accessibility-page-enabled": "अभिगम्यता पृष्ठ सक्षम किया गया", - "accessibility-title": " सुलभता विषय", - "accessibility-content": "सुलभता सामग्री" + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/hi.i18n.json b/imports/i18n/data/hi.i18n.json index f6e2a64a3..103dfea41 100644 --- a/imports/i18n/data/hi.i18n.json +++ b/imports/i18n/data/hi.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%sसंग्रह में ले जाया गया", "activity-attached": "संलग्न %s से %s", "activity-created": "बनाया %s", - "activity-changedListTitle": "सूची का नाम बदलकर %s कर दिया गया", "activity-customfield-created": "बनाया रिवाज क्षेत्र %s", "activity-excluded": "छोड़ा %s से %s", "activity-imported": "सूचित कर %s के अंदर %s से %s", @@ -86,16 +85,14 @@ "add-card": "कार्ड जोड़ें", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "चौड़ाई सेट करें", - "set-list-width": "चौड़ाई सेट करें", - "set-list-width-value": "न्यूनतम और अधिकतम चौड़ाई सेट करें (पिक्सेल)", - "list-width-error-message": "सूची की चौड़ाई 100 से अधिक पूर्णांक होनी चाहिए", - "keyboard-shortcuts-enabled": "कीबोर्ड शॉर्टकट सक्षम किए गए। अक्षम करने के लिए क्लिक करें।", - "keyboard-shortcuts-disabled": "कीबोर्ड शॉर्टकट अक्षम किए गए। सक्षम करने के लिए क्लिक करें।", - "setSwimlaneHeightPopup-title": "स्विमलेन की ऊंचाई सेट करें", - "set-swimlane-height": "स्विमलेन की ऊंचाई सेट करें", - "set-swimlane-height-value": "स्विमलेन की ऊंचाई (पिक्सेल)", - "swimlane-height-error-message": "स्विमलेन की ऊंचाई एक धनात्मक पूर्णांक होनी चाहिए", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", "add-swimlane": "तैरन जोड़ें", "add-subtask": "उप कार्य जोड़ें", "add-checklist": "चिह्नांकन-सूची जोड़ें", @@ -103,10 +100,10 @@ "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "मिनीकार्ड में कवर छवि जोड़ें", + "add-cover": "Add cover image to minicard", "add-label": "नामपत्र जोड़ें", "add-list": "सूची जोड़ें", - "add-after-list": "सूची के बाद जोड़ें", + "add-after-list": "Add After List", "add-members": "सदस्य जोड़ें", "added": "जोड़ा गया", "addMemberPopup-title": "सदस्य", @@ -146,13 +143,13 @@ "attachmentDeletePopup-title": "मिटाएँ संलग्नक?", "attachments": "संलग्नक", "auto-watch": "स्वचालित रूप से देखो बोर्डों जब वे बनाए जाते हैं", - "avatar-too-big": "अवतार बहुत बड़ा है (__आकार__ अधिकतम)", + "avatar-too-big": "The avatar is too large (__size__ max)", "back": "वापस", "board-change-color": "रंग बदलना", - "board-change-background-image": "पृष्ठभूमि छवि बदलें", - "board-background-image-url": "पृष्ठभूमि छवि URL", - "add-background-image": "पृष्ठभूमि छवि जोड़ें", - "remove-background-image": "पृष्ठभूमि छवि हटाएं", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "All Boards Settings", "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", @@ -165,9 +162,9 @@ "board-public-info": "यह बोर्ड हो जाएगा <strong>सार्वजनिक</strong>.", "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", "boardChangeColorPopup-title": "बोर्ड पृष्ठभूमि बदलें", - "boardChangeBackgroundImagePopup-title": "पृष्ठभूमि छवि बदलें", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "रंग बदलना", - "allBoardsChangeBackgroundImagePopup-title": "पृष्ठभूमि छवि बदलें", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "बोर्ड का नाम बदलें", "boardChangeVisibilityPopup-title": "दृश्यता बदलें", "boardChangeWatchPopup-title": "बदलें वॉच", @@ -266,9 +263,6 @@ "checklists": "जांच सूची", "click-to-star": "इस बोर्ड को स्टार करने के लिए क्लिक करें ।", "click-to-unstar": "इस बोर्ड को अनस्टार करने के लिए क्लिक करें।", - "click-to-enable-auto-width": "स्वचालित सूची चौड़ाई अक्षम। सक्षम करने के लिए क्लिक करें।", - "click-to-disable-auto-width": "ऑटो सूची चौड़ाई सक्षम। अक्षम करने के लिए क्लिक करें.", - "auto-list-width": "स्वचालित सूची चौड़ाई", "clipboard": "क्लिपबोर्ड या खींचें और छोड़ें", "close": "बंद करे", "close-board": "बोर्ड बंद करे", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "पीला", "unset-color": "Unset", - "comments": "टिप्पणियाँ", "comment": "टिप्पणी", "comment-placeholder": "टिप्पणी लिखें", "comment-only": "केवल टिप्पणी करें", @@ -383,14 +376,13 @@ "email-sent": "Email sent", "email-verifyEmail-subject": "Verify your email address on __siteName__", "email-verifyEmail-text": "नमस्ते __user __, \n\n अपना खाता ईमेल सत्यापित करने के लिए, बस नीचे दिए गए लिंक पर क्लिक करें। \n\n__url __ \n\n धन्यवाद।", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Enable WIP Limit", "error-board-doesNotExist": "यह बोर्ड does not exist", "error-board-notAdmin": "You need तक be व्यवस्थापक of यह बोर्ड तक do that", "error-board-notAMember": "You need तक be एक सदस्य of यह बोर्ड तक do that", "error-json-malformed": "Your text is not valid JSON", "error-json-schema": "आपके JSON डेटा में सही प्रारूप में सही जानकारी शामिल नहीं है", - "error-csv-schema": "आपकी CSV (कोमा सेपरेटेड वैल्यू)/TSV (टैब सेपरेटेड वैल्यू) में सही प्रारूप में उचित जानकारी शामिल नहीं है", + "error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) does not include the proper information in the correct format ", "error-list-doesNotExist": "यह सूची does not exist", "error-user-doesNotExist": "यह user does not exist", "error-user-notAllowSelf": "You can not invite yourself", @@ -429,7 +421,7 @@ "filter-overdue": "Overdue", "filter-due-today": "Due today", "filter-due-this-week": "Due this week", - "filter-due-next-week": "अगले सप्ताह तक देय", + "filter-due-next-week": "Due next week", "filter-due-tomorrow": "Due tomorrow", "list-filter-label": "शीर्षक द्वारा निस्पंदन सूची", "filter-clear": "Clear filter", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows तक write एक string containing following operators: == != <= >= && || ( ) एक space is used as एक separator between the Operators. You can filter for संपूर्ण प्रचलन क्षेत्र by typing their names और values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need तक encapsulate them के अंदर single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) तक be skipped, you can use \\\\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally संपूर्ण operators are interpreted से left तक right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back तक your बोर्डों page.", - "show-activities": "गतिविधियाँ दिखाएं", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "बोर्ड निर्माण करना", "home": "Home", "import": "Import", @@ -558,7 +550,7 @@ "public": "Public", "public-desc": "यह बोर्ड is public. It's visible तक anyone साथ में the link और will show up अंदर में गूगल की तरह खोज इंजन । केवल लोग संकलित तक बोर्ड संपादित कर सकते हैं.", "quick-access-description": "Star एक बोर्ड तक जोड़ें एक shortcut अंदर में यह पट्टी .", - "remove-cover": "मिनीकार्ड से कवर छवि हटाएं", + "remove-cover": "Remove cover image from minicard", "remove-from-board": "हटाएँ से बोर्ड", "remove-label": "हटाएँ Label", "listDeletePopup-title": "मिटाएँ सूची ?", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set एक limit for the maximum number of tasks अंदर में यह list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "वर्तमान कार्ड में स्वयं को जोड़ें", "shortcut-assign-self": "Assign yourself तक current कार्ड", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete सदस्य", "shortcut-clear-filters": "Clear संपूर्ण filters", "shortcut-close-dialog": "Close Dialog", "shortcut-filter-my-cards": "Filter my कार्ड", - "shortcut-filter-my-assigned-cards": "मेरे असाइन किए गए कार्ड को फ़िल्टर करें", "shortcut-show-shortcuts": "Bring up यह shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time कार्ड", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -750,9 +739,9 @@ "deposit-subtasks-list": "Landing सूची for subtasks deposited here:", "show-parent-in-minicard": "Show parent अंदर में minicard:", "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "मिनीकार्ड पर कवर छवि", - "badge-attachment-on-minicard": "मिनीकार्ड पर अटैचमेंट की गिनती", - "card-sorting-by-number-on-minicard": "मिनीकार्ड पर संख्या के अनुसार कार्ड क्रमबद्ध करें", + "cover-attachment-on-minicard": "Cover image on minicard", + "badge-attachment-on-minicard": "Count of attachments on minicard", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", "prefix-with-full-path": "Prefix साथ में full path", "prefix-with-parent": "Prefix साथ में parent", "subtext-with-full-path": "Subtext साथ में full path", @@ -865,7 +854,7 @@ "r-items-list": "item1,item2,item3", "r-add-swimlane": "Add swimlane", "r-swimlane-name": "swimlane name", - "r-board-note": "ध्यान दें: प्रत्येक संभव मान से मेल खाने के लिए एक फ़ील्ड खाली छोड़ दें।", + "r-board-note": "Note: leave a field empty to match every possible value. ", "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", "r-when-a-card-is-moved": "जब एक कार्ड is स्थानांतरित तक another list", "r-set": "Set", @@ -896,9 +885,9 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", - "org-number": "संगठनों की संख्या है:", - "team-number": "टीमों की संख्या है:", - "people-number": "लोगों की संख्या है:", + "org-number": "The number of organizations is: ", + "team-number": "The number of teams is: ", + "people-number": "The number of people is: ", "swimlaneDeletePopup-title": "Delete Swimlane ?", "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", "restore-all": "Restore all", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "पूर्ण चेकलिस्ट छिपाएं", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Teams", "displayName": "Display Name", "shortName": "Short Name", - "autoAddUsersWithDomainName": "डोमेन नाम वाले उपयोगकर्ताओं को स्वचालित रूप से जोड़ें", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Website", "person": "Person", "my-cards": "My Cards", @@ -1111,7 +1099,7 @@ "label-names": "Label Names", "archived-at": "archived at", "sort-cards": "Sort Cards", - "sort-is-on": "सॉर्ट चालू है", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "Sort Cards", "due-date": "Due Date", "server-error": "Server Error", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "सभी बोर्डों पर बोर्ड गतिविधियाँ न दिखाएं", - "now-activities-of-all-boards-are-hidden": "अब सभी बोर्डों की सभी गतिविधियाँ छिपा दी गई हैं", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "मिनीकार्ड पर निर्माता", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "पाठ की प्रत्येक पंक्ति चेकलिस्ट आइटम में से एक बन जाती है|", - "newLineNewItem": "एक पंक्ति = एक चेकलिस्ट आइटम", - "newlineBecomesNewChecklistItemOriginOrder": "पाठ की प्रत्येक पंक्ति चेकलिस्ट आइटम में बदल जाती है, मूल क्रम", - "originOrder": "मूल क्रम", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1241,32 +1225,23 @@ "minicardDetailsActionsPopup-title": "Card Details", "Mongo_sessions_count": "Mongo sessions count", "change-visibility": "दृश्यता बदलें", - "max-upload-filesize": "बाइट्स में फ़ाइल आकार अधिकतम अपलोड करें:", - "allowed-upload-filetypes": "अनुमत अपलोड फ़ाइल प्रकार:", - "max-avatar-filesize": "अधिकतम अवतार फ़ाइल आकार बाइट्स में:", - "allowed-avatar-filetypes": "अनुमत अवतार फ़ाइल प्रकार:", - "invalid-file": "यदि फ़ाइल का नाम अमान्य है, तो अपलोड या नाम बदलना रद्द कर दिया जाएगा।", - "preview-pdf-not-supported": "आपका डिवाइस PDF का पूर्वावलोकन समर्थित नहीं करता है। इसके बजाय डाउनलोड करने का प्रयास करें।", - "drag-board": "बोर्ड खींचें", - "translation-number": "कस्टम अनुवाद स्ट्रिंग्स की संख्या है:", - "delete-translation-confirm-popup": "क्या आप सुनिश्चित हैं कि आप इस कस्टम अनुवाद स्ट्रिंग को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं होगी।", - "newTranslationPopup-title": "नई कस्टम अनुवाद स्ट्रिंग", - "editTranslationPopup-title": "कस्टम अनुवाद स्ट्रिंग संपादित करें", - "settingsTranslationPopup-title": "इस कस्टम अनुवाद स्ट्रिंग को हटाएं?", - "translation": "अनुवाद", + "max-upload-filesize": "Max upload filesize in bytes:", + "allowed-upload-filetypes": "Allowed upload filetypes:", + "max-avatar-filesize": "Max avatar filesize in bytes:", + "allowed-avatar-filetypes": "Allowed avatar filetypes:", + "invalid-file": "If filename is invalid, upload or rename is cancelled.", + "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", + "drag-board": "Drag board", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "Text", - "translation-text": "अनुवाद पाठ", - "show-subtasks-field": "उप-कार्य फ़ील्ड दिखाएँ", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "मार्कडाउन में कन्वर्ट करें", - "import-board-zip": ".zip फ़ाइल जोड़ें जिसमें बोर्ड JSON फ़ाइलें और अनुलग्नकों वाले उपनिर्देशिका हों", - "collapse": "संक्षिप्त करें", - "uncollapse": "असंकुचित करें", - "hideCheckedChecklistItems": "चेक की गई चेकलिस्ट आइटम छिपाएं", - "hideAllChecklistItems": "सभी चेकलिस्ट आइटम छिपाएं", - "support": "सहायता", - "supportPopup-title": "सहायता", - "accessibility-page-enabled": "अभिगम्यता पृष्ठ सक्षम किया गया", - "accessibility-title": "एक्सेसिबिलिटी टॉपिक", - "accessibility-content": "अभिगम्यता सामग्री" + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/hr.i18n.json b/imports/i18n/data/hr.i18n.json index 06cfc183e..656c7b0ab 100644 --- a/imports/i18n/data/hr.i18n.json +++ b/imports/i18n/data/hr.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s prebačen je u Arhivu", "activity-attached": "dodao/la je %s u %s", "activity-created": "kreirao/la je %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "kreirao/la je prilagođeno polje %s", "activity-excluded": "izdvojio/la je %s iz %s", "activity-imported": "uvezeno %s u %s iz %s", @@ -86,12 +85,10 @@ "add-card": "Dodaj karticu", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Liste provjere", "click-to-star": "Kliknite da biste ovu ploču označili zvjezdicom.", "click-to-unstar": "Kliknite da biste uklonili zvjezdicu s ove ploče.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Međuspremnik ili povucite i ispustite", "close": "Zatvori", "close-board": "Zatvori ploču", @@ -300,7 +294,6 @@ "color-white": "bijela", "color-yellow": "žuta", "unset-color": "Unset", - "comments": "Comments", "comment": "Komentiraj", "comment-placeholder": "Napiši komentar", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "email-sent": "Email je poslan", "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Dodaj ploču", "home": "Početna", "import": "Uvoz", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Vrijeme", "title": "Naziv", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Tekst", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/hu.i18n.json b/imports/i18n/data/hu.i18n.json index f128893be..e064f27ce 100644 --- a/imports/i18n/data/hu.i18n.json +++ b/imports/i18n/data/hu.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s áthelyezve az Archívumba", "activity-attached": "%s mellékletet csatolt a kártyához: %s", "activity-created": "%s létrehozva", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "létrehozta a(z) %s egyéni mezőt", "activity-excluded": "%s kizárva innen: %s", "activity-imported": "%s importálva ebbe: %s, innen: %s", @@ -86,12 +85,10 @@ "add-card": "Kártya hozzáadása", "add-card-to-top-of-list": "Kártya hozzáadás a Lista elejére", "add-card-to-bottom-of-list": "Kártya hozzáadás a Lista végére", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Ellenőrző-listák", "click-to-star": "Kattints a tábla csillagozásához.", "click-to-unstar": "Kattints a tábla csillagának eltávolításához.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Vágólap vagy fogd és vidd", "close": "Bezárás", "close-board": "Tábla bezárása", @@ -300,7 +294,6 @@ "color-white": "fehér", "color-yellow": "sárga", "unset-color": "Nincs megadva", - "comments": "Comments", "comment": "Megjegyzés", "comment-placeholder": "Megjegyzés írása", "comment-only": "Csak megjegyzés", @@ -383,7 +376,6 @@ "email-sent": "E-mail elküldve", "email-verifyEmail-subject": "Igazolja vissza az e-mail címét a következő oldalon: __siteName__", "email-verifyEmail-text": "Kedves __user__!\n\nAz e-mail fiók visszaigazolásához egyszerűen kattints a lenti hivatkozásra.\n\n__url__\n\nKöszönjük.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "WIP korlát engedélyezése", "error-board-doesNotExist": "Ez a tábla nem létezik", "error-board-notAdmin": "A tábla adminisztrátorának kell lennie, hogy ezt megtehesse", @@ -451,7 +443,7 @@ "advanced-filter-description": "A speciális szűrőben megadhatsz egy olyan szöveget, mely az alábbi operátorokat tartalmazza:\n<= >= && || ( )\nSzóközzel választhatod el az operátorokat.\nSzűrhetsz az minden egyedi mezőre a nevére és értékére hivatkozva. \nPl.: Mező1 == Érték1\nMegjegyzés: Ha a mezők vagy értékek szóközöket is tartalmaznak, idézőjelek közé kell zárnod. \nPl.: 'Mező 1' == 'Érték 1'\nKontroll-karaktereket ( ' \\\\/ ) vissza-perjellel írhatsz: \\\\ Pl.: Johnny\\\\'s\nTovábbá kombinálhatsz több feltételt. Pl.: F1 == V1 || F1 == V2\nAlapesetben az ellenőrzés sorrendje: Jobbról->Balra. Ezt felülbírálhatod zárójelekkel. Pl.: F1 == V1 && ( F2 == V2 || F2 == V3 )\nRegex keresést is használhatsz: F1 == /Tes.*/i", "fullname": "Teljes név", "header-logo-title": "Vissza a táblák oldalára.", - "show-activities": "Show Activities", + "hide-system-messages": "Rendszerüzenetek elrejtése", "headerBarCreateBoardPopup-title": "Tábla létrehozása", "home": "Kezdőlap", "import": "Importálás", @@ -580,14 +572,12 @@ "select-board": "Válassz Táblát", "set-wip-limit-value": "Korlát beállítása a listán lévő feladatok legnagyobb számához", "setWipLimitPopup-title": "WIP korlát beállítása", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Önmagad hozzárendelése a jelenlegi kártyához", "shortcut-autocomplete-emoji": "Emodzsi automatikus kiegészítése", "shortcut-autocomplete-members": "Tagok automatikus kiegészítése", "shortcut-clear-filters": "Összes szűrő törlése", "shortcut-close-dialog": "Párbeszédablak bezárása", "shortcut-filter-my-cards": "Kártyáim szűrése", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "A hivatkozási lista előre hozása", "shortcut-toggle-filterbar": "Szűrő oldalsáv ki- és bekapcsolása", "shortcut-toggle-searchbar": "Kereső oldalsáv ki- és bekapcsolása", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Van eltöltött-idő kártyája", "time": "Idő", "title": "Cím", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Követés", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Nem törölheted addig ezt a Kártyát, amíg nem törlöd előbb a kapcsolt Kártyákat", "delete-linked-cards-before-this-list": "Nem törölheted addig ezt a Listát, amíg le nem törölted azokat a Kártyákat, amik ezen Lista Kártyáira mutatnak.", "hide-checked-items": "Kijelölt elemek elrejtése", - "hide-finished-checklist": "Hide finished checklist", "task": "Feladat", "create-task": "Új feladat", "ok": "Rendben", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Létrehozva (Legújabb elől)", "created-at-oldest-first": "Létrehozva (Legrégebbi elől)", "links-heading": "Linkek", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Minden rendszerüzenet elrejtése minden felhasználónál", + "now-system-messages-of-all-users-are-hidden": "Most már minden rendszerüzenet rejtve lett minden felhasználónál.", "move-swimlane": "Úszósáv mozhatása", "moveSwimlanePopup-title": "Úszósáv mozhatása", "custom-field-stringtemplate": "Szöveg Sablon", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Nyomj Enter-t több elem hozzáadásához", "creator": "Létrehozó", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Fájl Riport", "reports": "Riportok", "rulesReportTitle": "Szabályok Riportja", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Szöveg", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Összecsukás", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/hy.i18n.json b/imports/i18n/data/hy.i18n.json index 801a30eaa..3381516f0 100644 --- a/imports/i18n/data/hy.i18n.json +++ b/imports/i18n/data/hy.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/id.i18n.json b/imports/i18n/data/id.i18n.json index 7be0542bf..beb077cdd 100644 --- a/imports/i18n/data/id.i18n.json +++ b/imports/i18n/data/id.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s dipindah ke arsip", "activity-attached": "dilampirkan %s ke %s", "activity-created": "dibuat %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "tidak termasuk %s dari %s", "activity-imported": "diimpor %s kedalam %s dari %s", @@ -86,12 +85,10 @@ "add-card": "Tambah Kartu", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Atur lebar daftar", + "set-list-width": "Atur lebar daftar", + "set-list-width-value": "Lebar daftar (pixel)", + "list-width-error-message": "Lebar daftar harus dalam sebuah bilangan bulat posiif", "setSwimlaneHeightPopup-title": "Atur Tinggi Swimlane ", "set-swimlane-height": "Atur Tinggi Swimlane ", "set-swimlane-height-value": "Tinggi Swimlane (pixel)", @@ -266,9 +263,6 @@ "checklists": "Daftar Periksa", "click-to-star": "Klik untuk tandai bintang panel ini", "click-to-unstar": "Klik untuk tidak memberi bintang pada panel ini", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard atau drag & drop", "close": "Tutup", "close-board": "Tutup Panel", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "kuning", "unset-color": "Unset", - "comments": "Comments", "comment": "Komentar", "comment-placeholder": "Write Comment", "comment-only": "Hanya komentar", @@ -383,7 +376,6 @@ "email-sent": "Email terkirim", "email-verifyEmail-subject": "Verifikasi surel Anda pada __siteName__", "email-verifyEmail-text": "Halo __user__,\n\nUntuk memverifikasi surel Anda, silakan klik tautan berikut.\n\n__url__\n\nTerima kasih.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Enable WIP Limit", "error-board-doesNotExist": "Panel ini tidak ada", "error-board-notAdmin": "Anda harus admin dari panel ini untuk melakukan itu", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Nama Lengkap", "header-logo-title": "Kembali ke laman panel anda", - "show-activities": "Show Activities", + "hide-system-messages": "Sembunyikan pesan-pesan sistem", "headerBarCreateBoardPopup-title": "Buat Panel", "home": "Beranda", "import": "Impor", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Tetapkan batas untuk jumlah tugas maksimum dalam daftar ini", "setWipLimitPopup-title": "Tetapkan Batas WIP", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Masukkan diri anda sendiri ke kartu ini", "shortcut-autocomplete-emoji": "Pelengkap Otomatis emoji", "shortcut-autocomplete-members": "Autocomplete partisipan", "shortcut-clear-filters": "Bersihkan semua saringan", "shortcut-close-dialog": "Tutup Dialog", "shortcut-filter-my-cards": "Filter kartu saya", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Angkat naik shortcut daftar ini", "shortcut-toggle-filterbar": "Toggle Filter Bilah Samping", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Waktu", "title": "Judul", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Pelacakan", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Kamu tidak dapat menghapus kartu ini sebelum menghapus kartu tertaut yang telah", "delete-linked-cards-before-this-list": "Kamu tidak dapat menghapus daftar ini sebelum menghapus kartu tertaut yang mengarah ke kartu dalam daftar ini", "hide-checked-items": "Sembunyikan item yang dicentang", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Terjemahan", "text": "Text", "translation-text": "Terjemahan teks", + "show-at-minicard": "Tampilkan di kartu kecil", + "show-checklist-at-minicard": "Tampilkan daftar periksa di kartu kecil", "show-subtasks-field": "Tampilkan bagian tugas bidang", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Mengubah ke markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Ciutkan", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Mengubah ke markdown" } diff --git a/imports/i18n/data/ig.i18n.json b/imports/i18n/data/ig.i18n.json index 22476d20d..6ab83e5bd 100644 --- a/imports/i18n/data/ig.i18n.json +++ b/imports/i18n/data/ig.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/it.i18n.json b/imports/i18n/data/it.i18n.json index b2e922d94..eb183724b 100644 --- a/imports/i18n/data/it.i18n.json +++ b/imports/i18n/data/it.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s spostato nell'archivio", "activity-attached": "allegato %s a %s", "activity-created": "creato %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "%s creato come campo personalizzato", "activity-excluded": "escluso %s da %s", "activity-imported": "importato %s in %s da %s", @@ -86,12 +85,10 @@ "add-card": "Aggiungi scheda", "add-card-to-top-of-list": "Aggiungi Scheda in cima alla Lista", "add-card-to-bottom-of-list": "Aggiungi Scheda in fondo alla Lista", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Impostare la larghezza della lista", + "set-list-width": "Impostare la larghezza della lista", + "set-list-width-value": "Larghezza della lista (in pixel)", + "list-width-error-message": "La larghezza della lista deve essere un intero positivo", "setSwimlaneHeightPopup-title": "Impostare l'altezza della corsia", "set-swimlane-height": "Impostare l'altezza della corsia", "set-swimlane-height-value": "Altezza della corsia (in pixel)", @@ -103,10 +100,10 @@ "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Converti in scheda", - "add-cover": "Aggiungi immagine di copertina a minicard", + "add-cover": "Add cover image to minicard", "add-label": "Aggiungi etichetta", "add-list": "Aggiungi lista", - "add-after-list": "Aggiungi Dopo la Lista", + "add-after-list": "Add After List", "add-members": "Aggiungi membri", "added": "Aggiunto/a", "addMemberPopup-title": "Membri", @@ -146,7 +143,7 @@ "attachmentDeletePopup-title": "Eliminare l'allegato?", "attachments": "Allegati", "auto-watch": "Segui automaticamente le bacheche quando vengono create.", - "avatar-too-big": "L'avatar è troppo grande (__size__ max)", + "avatar-too-big": "The avatar is too large (__size__ max)", "back": "Indietro", "board-change-color": "Cambia colore", "board-change-background-image": "Modificare immagine di sfondo", @@ -266,9 +263,6 @@ "checklists": "Checklist", "click-to-star": "Clicca per stellare questa bacheca", "click-to-unstar": "Clicca per togliere la stella da questa bacheca.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Appunti o trascinamento", "close": "Chiudi", "close-board": "Chiudi bacheca", @@ -300,7 +294,6 @@ "color-white": "bianco", "color-yellow": "giallo", "unset-color": "Non impostato", - "comments": "Comments", "comment": "Commenta", "comment-placeholder": "Scrivi un commento...", "comment-only": "Solo commenti", @@ -383,7 +376,6 @@ "email-sent": "Email inviata", "email-verifyEmail-subject": "Verifica il tuo indirizzo email su __siteName__", "email-verifyEmail-text": "Ciao __user__,\n\nPer verificare il tuo account email, clicca sul link seguente:\n\n__url__\n\nGrazie.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Attiva limite Work In Progress", "error-board-doesNotExist": "Questa bacheca non esiste", "error-board-notAdmin": "Devi essere admin di questa bacheca per poterlo fare", @@ -429,7 +421,7 @@ "filter-overdue": "Scaduta", "filter-due-today": "Scade oggi", "filter-due-this-week": "Scade questa settimana", - "filter-due-next-week": "Scadenza prossima settimana", + "filter-due-next-week": "Due next week", "filter-due-tomorrow": "Scade domani", "list-filter-label": "Filtra lista per titolo", "filter-clear": "Pulisci filtri", @@ -451,7 +443,7 @@ "advanced-filter-description": "Il filtro avanzato permette di scrivere una stringa contenente i seguenti operatori: == != <= >= && || ( ) Uno spazio è usato come separatore tra gli operatori. Si può filtrare per tutti i campi personalizzati, scrivendo i loro nomi e valori. Per esempio: Campo1 == Valore1. Nota: Se i campi o i valori contengono spazi, è necessario incapsularli all'interno di apici singoli. Per esempio: 'Campo 1' == 'Valore 1'. Per i singoli caratteri di controllo (' \\\\/) che devono essere ignorati, si può usare \\\\. Per esempio: C1 == Campo1 == L'\\\\ho. Si possono anche combinare condizioni multiple. Per esempio: C1 == V1 || C1 ==V2. Di norma tutti gli operatori vengono letti da sinistra a destra. Si può cambiare l'ordine posizionando delle parentesi. Per esempio: C1 == V1 && ( C2 == V2 || C2 == V3) . Inoltre è possibile cercare nei campi di testo usando le espressioni regolari (n.d.t. regex): F1 ==/Tes.*/i", "fullname": "Nome completo", "header-logo-title": "Torna alla pagina delle tue bacheche.", - "show-activities": "Show Activities", + "hide-system-messages": "Nascondi i messaggi di sistema", "headerBarCreateBoardPopup-title": "Crea bacheca", "home": "Home", "import": "Importa", @@ -558,7 +550,7 @@ "public": "Pubblica", "public-desc": "Questa bacheca è pubblica. È visibile a chiunque abbia il link e sarà mostrata dai motori di ricerca come Google. Solo le persone aggiunte alla bacheca possono modificarla.", "quick-access-description": "Stella una bacheca per aggiungere una scorciatoia in questa barra.", - "remove-cover": "Rimuovere immagine di copertina da minicard", + "remove-cover": "Remove cover image from minicard", "remove-from-board": "Rimuovi dalla bacheca", "remove-label": "Rimuovi etichetta", "listDeletePopup-title": "Eliminare lista?", @@ -580,14 +572,12 @@ "select-board": "Seleziona bacheca", "set-wip-limit-value": "Seleziona un limite per il massimo numero di attività in questa lista", "setWipLimitPopup-title": "Imposta limite Work In Progress", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Assegna te stesso alla scheda corrente", "shortcut-autocomplete-emoji": "Autocompletamento emoji", "shortcut-autocomplete-members": "Autocompletamento membri", "shortcut-clear-filters": "Pulisci tutti i filtri", "shortcut-close-dialog": "Chiudi finestra di dialogo", "shortcut-filter-my-cards": "Filtra le mie schede", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Apri questa lista di scorciatoie", "shortcut-toggle-filterbar": "Apri/chiudi la barra laterale dei filtri", "shortcut-toggle-searchbar": "Apri/chiudi la barra laterale di ricerca", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Ci sono schede con tempo impiegato", "time": "Ora", "title": "Titolo", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Monitoraggio", @@ -750,9 +739,9 @@ "deposit-subtasks-list": "Lista di destinaizoni per questi sotto-compiti", "show-parent-in-minicard": "Mostra genirotri nelle mini schede:", "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "Immagine di copertina su minicard", - "badge-attachment-on-minicard": "Conteggio degli allegati sulla minicard", - "card-sorting-by-number-on-minicard": "La scheda viene ordinata per numero sulla minicard", + "cover-attachment-on-minicard": "Cover image on minicard", + "badge-attachment-on-minicard": "Count of attachments on minicard", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", "prefix-with-full-path": "Prefisso con percorso completo", "prefix-with-parent": "Prefisso con genitore", "subtext-with-full-path": "Sottotesto con percorso completo", @@ -865,7 +854,7 @@ "r-items-list": "elemento1,elemento2,elemento3", "r-add-swimlane": "Aggiungi swimlane", "r-swimlane-name": "nome swimlane", - "r-board-note": "Nota: Lascia un campo vuoto per abbinare ogni possibile valore.", + "r-board-note": "Note: leave a field empty to match every possible value. ", "r-checklist-note": "Nota: Gli elementi della checklist devono essere scritti come valori separati dalla virgola", "r-when-a-card-is-moved": "Quando una scheda viene spostata in un'altra lista", "r-set": "Imposta", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Non puoi eliminare questa scheda prima di avere eliminato una scheda collegata che ha", "delete-linked-cards-before-this-list": "Non puoi eliminare questa lista prima di avere eliminato le schede collegate che puntano su schede in questa lista", "hide-checked-items": "Nascondi articoli controllati", - "hide-finished-checklist": "Hide finished checklist", "task": "Compito", "create-task": "Crea compito", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Team", "displayName": "Nome da visualizzare", "shortName": "Nome abbreviato", - "autoAddUsersWithDomainName": "Aggiungi automaticamente utenti con il nome di dominio", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Sito web", "person": "Persona", "my-cards": "Le mie schede", @@ -1111,7 +1099,7 @@ "label-names": "Nomi etichette", "archived-at": "archiviata il", "sort-cards": "Ordina schede", - "sort-is-on": "Ordinamento attivo", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "Ordina schede", "due-date": "Data di scadenza", "server-error": "Errore server", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Data di creazione (dalla più nuova)", "created-at-oldest-first": "Data di creazione (dalla più vecchia)", "links-heading": "Link", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Nascondi messaggi di sistema di tutti gli utenti", + "now-system-messages-of-all-users-are-hidden": "Messaggi di sistema di tutti gli utenti nascosti", "move-swimlane": "Sposta swimlane", "moveSwimlanePopup-title": "Sposta swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Premi Invio per aggiungere più elementi", "creator": "Creatore", - "creator-on-minicard": "Creatore su minicard", "filesReportTitle": "Files Report", "reports": "Segnalazioni", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Azioni checklist", "moveChecklist": "Sposta checklist", "moveChecklistPopup-title": "Sposta checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Nuove linee diventano elementi della checklist", "copyChecklist": "Copia checklist", "copyChecklistPopup-title": "Copia checklist", "card-show-lists": "Card Show Lists", @@ -1241,13 +1225,13 @@ "minicardDetailsActionsPopup-title": "Dettagli scheda", "Mongo_sessions_count": "Numero sessioni Mongo", "change-visibility": "Cambia visibilità", - "max-upload-filesize": "Max dimensione di caricamento del file in byte.", - "allowed-upload-filetypes": "I tipi di file consentiti per l'upload sono:", - "max-avatar-filesize": "Max dimensione di caricamento dell'avatar in byte.", - "allowed-avatar-filetypes": "I tipi di file consentiti per l'avatar sono:", + "max-upload-filesize": "Max upload filesize in bytes:", + "allowed-upload-filetypes": "Allowed upload filetypes:", + "max-avatar-filesize": "Max avatar filesize in bytes:", + "allowed-avatar-filetypes": "Allowed avatar filetypes:", "invalid-file": "Se il nome del file non è valido, il caricamento o la ridenominazione viene annullata.", "preview-pdf-not-supported": "Il vostro dispositivo non supporta l'anteprima PDF. In alternativa provate a scaricare il file.", - "drag-board": "Muovi la bacheca", + "drag-board": "Drag board", "translation-number": "Il numero di stringhe di traduzione personalizzate è:", "delete-translation-confirm-popup": "Sei sicuro di voler eliminare questa stringa di traduzione personalizzata? Non sarà possibile ripristinarla.", "newTranslationPopup-title": "Nuova stringa di traduzione personalizzata", @@ -1256,17 +1240,8 @@ "translation": "Traduzione", "text": "Testo", "translation-text": "Testo della traduzione", - "show-subtasks-field": "Mostra campo delle sottoattività", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Converti in markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Comprimi", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ja-HI.i18n.json b/imports/i18n/data/ja-HI.i18n.json index 60edd6d3f..5da68e660 100644 --- a/imports/i18n/data/ja-HI.i18n.json +++ b/imports/i18n/data/ja-HI.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "リスト名を %s に変更しました", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "幅を設定", - "set-list-width": "幅を設定", - "set-list-width-value": "最小幅と最大幅を設定(pixel)", - "list-width-error-message": "リストの幅は100以上を指定してください", - "keyboard-shortcuts-enabled": "キーボードショートカットは有効です。クリックすると無効になります。", - "keyboard-shortcuts-disabled": "キーボードショートカットは無効です。クリックすると有効になります。", + "setListWidthPopup-title": "リストの幅を設定", + "set-list-width": "リストの幅を設定", + "set-list-width-value": "リストの幅(ピクセル)", + "list-width-error-message": "リストの幅は正の整数を入力してください", "setSwimlaneHeightPopup-title": "スイムレーンの高さを設定", "set-swimlane-height": "スイムレーンの高さを設定", "set-swimlane-height-value": "スイムレーンの高さ(ピクセル)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "全てのボード", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "リスト幅自動調整が無効です。クリックすると有効になります。", - "click-to-disable-auto-width": "リスト幅自動調整が有効です。クリックすると無効になります。", - "auto-list-width": "リスト幅自動調整", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "コメント", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "縦スクロールバーを有効にする", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "高度なフィルタでは次のような演算子を使用できます:== != <= >= && || ( )\n半角スペースは演算子の区切り文字として使用します。\n\nフィールド名や値を使用したフィルタが可能です。\n例:Field1 == Value1\n\n注意:フィールド名や値にスペースが含まれる場合、それらをシングルクォーテーションで囲む必要があります。\n例:'Field 1' == 'Value 1'\n\n単体の制御文字 (' \\\\/) は無視されますので、\\\\を使用することができます。\n例:Field1 == I\\\\'m\n\n複数の条件を組み合わせることもできます。\n例:F1 == V1 || F1 == V2\n\n基本的にすべての演算子は左から右に評価されます。\n丸カッコを使用することで順序を変更できます。\n例:F1 == V1 && ( F2 == V2 || F2 == V3 )\n\nテキストフィールドでは正規表現を使用した検索もできます。\n例:F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "アクティビティを表示", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "現在のカードに自分を追加", "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-filter-my-assigned-cards": "自分に割り当てられたカードをフィルタ", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "カードの割り当て先1-9を切り替える(ボードへの追加順)", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "完了したチェックリストを非表示", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Teams", "displayName": "Display Name", "shortName": "Short Name", - "autoAddUsersWithDomainName": "ドメイン名を持つユーザを自動的に追加", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Website", "person": "Person", "my-cards": "My Cards", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "すべてのボードでボードアクティビティを表示しない", - "now-activities-of-all-boards-are-hidden": "全ボードのすべてのアクティビティが非表示にされました", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "ミニカードの作成者", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1138,7 +1125,7 @@ "copy-swimlane": "Copy Swimlane", "copySwimlanePopup-title": "Copy Swimlane", "display-card-creator": "Display Card Creator", - "wait-spinner": "処理中スピナー", + "wait-spinner": "Wait Spinner", "Bounce": "Bounce Wait Spinner", "Cube": "Cube Wait Spinner", "Cube-Grid": "Cube-Grid Wait Spinner", @@ -1204,69 +1191,57 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "テキストの各行がチェックリスト項目の1つになります", - "newLineNewItem": "テキストの1行が1チェックリスト項目です", - "newlineBecomesNewChecklistItemOriginOrder": "テキストの各行がチェックリスト項目および元のオーダの1つになります", - "originOrder": "元のオーダ", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", "subtaskActionsPopup-title": "Subtask Actions", "attachmentActionsPopup-title": "Attachment Actions", - "attachment-move-storage-fs": "添付ファイルをファイルシステムに移動", - "attachment-move-storage-gridfs": "添付ファイルを GridFS に移動", - "attachment-move-storage-s3": "添付ファイルを S3 に移動", - "attachment-move": "添付ファイルを移動", - "move-all-attachments-to-fs": "すべての添付ファイルをファイルシステムに移動", - "move-all-attachments-to-gridfs": "すべての添付ファイルを GridFS に移動", - "move-all-attachments-to-s3": "すべての添付ファイルを S3 に移動", - "move-all-attachments-of-board-to-fs": "ボードのすべての添付ファイルをファイルシステムに移動", - "move-all-attachments-of-board-to-gridfs": "ボードのすべての添付ファイルを GridFS に移動", - "move-all-attachments-of-board-to-s3": "ボードのすべての添付ファイルを S3 に移動", - "path": "パス", - "version-name": "バージョン名", - "size": "サイズ", - "storage": "ストレージ", - "action": "操作", - "board-title": "ボードのタイトル", - "attachmentRenamePopup-title": "名前変更", - "uploading": "アップロード中", - "remaining_time": "残り時間", - "speed": "速度", - "progress": "進捗", - "password-again": "パスワード(再入力)", - "if-you-already-have-an-account": "すでにアカウントを持っている場合", - "register": "登録者", - "forgot-password": "パスワードを忘れた", - "minicardDetailsActionsPopup-title": "カード詳細", - "Mongo_sessions_count": "Mongo セッション数", - "change-visibility": "公開範囲の変更", - "max-upload-filesize": "アップロードファイルの最大バイト数:", - "allowed-upload-filetypes": "アップロードできるファイルタイプ:", - "max-avatar-filesize": "アバターの最大バイト数:", + "attachment-move-storage-fs": "Move attachment to filesystem", + "attachment-move-storage-gridfs": "Move attachment to GridFS", + "attachment-move-storage-s3": "Move attachment to S3", + "attachment-move": "Move Attachment", + "move-all-attachments-to-fs": "Move all attachments to filesystem", + "move-all-attachments-to-gridfs": "Move all attachments to GridFS", + "move-all-attachments-to-s3": "Move all attachments to S3", + "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", + "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", + "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", + "path": "Path", + "version-name": "Version-Name", + "size": "Size", + "storage": "Storage", + "action": "Action", + "board-title": "Board Title", + "attachmentRenamePopup-title": "Rename", + "uploading": "Uploading", + "remaining_time": "Remaining time", + "speed": "Speed", + "progress": "Progress", + "password-again": "Password (again)", + "if-you-already-have-an-account": "If you already have an account", + "register": "Register", + "forgot-password": "Forgot password", + "minicardDetailsActionsPopup-title": "Card Details", + "Mongo_sessions_count": "Mongo sessions count", + "change-visibility": "Change Visibility", + "max-upload-filesize": "バイト単位の最大アップロードサイズ: ", + "allowed-upload-filetypes": "アップロードできるファイルタイプ", + "max-avatar-filesize": "バイト単位の最大アバターファイルサイズ:", "allowed-avatar-filetypes": "アバターに使用できるファイルタイプ", "invalid-file": "無効なファイル名の場合アップロードまたは名前の変更は取り消されます。", "preview-pdf-not-supported": "この端末はPDFのプレビューに対応していません。他の端末でダウンロードしてください。", "drag-board": "ドラッグボード", - "translation-number": "カスタム翻訳文字列数:", - "delete-translation-confirm-popup": "本当にこのカスタム翻訳文字列を削除しますか。削除すると元に戻すことはできません。", - "newTranslationPopup-title": "新規カスタム翻訳文字列", - "editTranslationPopup-title": "カスタム翻訳文字列を編集", - "settingsTranslationPopup-title": "このカスタム翻訳文字列を削除しますか", - "translation": "翻訳", - "text": "テキスト", - "translation-text": "翻訳テキスト", - "show-subtasks-field": "サブタスクフィールドを表示", - "show-week-of-year": "年内の暦週番号(ISO 8601準拠)", - "convert-to-markdown": "マークダウンに変換", - "import-board-zip": "ボードJSONファイルを含む zip ファイルと、添付ファイルを含むボード名サブディレクトリを追加する", - "collapse": "Collapse", - "uncollapse": "展開", - "hideCheckedChecklistItems": "チェック済みチェックリスト項目を非表示", - "hideAllChecklistItems": "すべてのチェックリスト項目を非表示", - "support": "サポート", - "supportPopup-title": "サポート", - "accessibility-page-enabled": "アクセシビリティページが有効", - "accessibility-title": "アクセシビリティトピック", - "accessibility-content": "アクセシビリティコンテンツ" + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", + "text": "Text", + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ja.i18n.json b/imports/i18n/data/ja.i18n.json index bf2161a68..5cda6355d 100644 --- a/imports/i18n/data/ja.i18n.json +++ b/imports/i18n/data/ja.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%sをアーカイブしました", "activity-attached": "%s を %s に添付しました", "activity-created": "%s を作成しました", - "activity-changedListTitle": "リスト名を %s に変更しました", "activity-customfield-created": "カスタムフィールド %s を作成しました", "activity-excluded": "%s を %s から除外しました", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "カードを追加", "add-card-to-top-of-list": "カードをリストの先頭に追加", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "幅を設定", - "set-list-width": "幅を設定", - "set-list-width-value": "最小幅と最大幅を設定(pixel)", - "list-width-error-message": "リストの幅は100以上を指定してください", - "keyboard-shortcuts-enabled": "キーボードショートカットは有効です。クリックすると無効になります。", - "keyboard-shortcuts-disabled": "キーボードショートカットは無効です。クリックすると有効になります。", + "setListWidthPopup-title": "リストの幅を設定", + "set-list-width": "リストの幅を設定", + "set-list-width-value": "リストの幅(ピクセル)", + "list-width-error-message": "リストの幅は正の整数を入力してください", "setSwimlaneHeightPopup-title": "スイムレーンの高さを設定", "set-swimlane-height": "スイムレーンの高さを設定", "set-swimlane-height-value": "スイムレーンの高さ(ピクセル)", @@ -137,8 +134,8 @@ "archives": "アーカイブ", "template": "テンプレート", "templates": "テンプレート", - "template-container": "テンプレートコンテナ", - "add-template-container": "テンプレートコンテナを追加", + "template-container": "Template Container", + "add-template-container": "Add Template Container", "assign-member": "メンバーの割当", "attached": "添付されました", "attachment": "添付ファイル", @@ -146,7 +143,7 @@ "attachmentDeletePopup-title": "添付ファイルを削除しますか?", "attachments": "添付ファイル", "auto-watch": "作成されたボードを自動的にウォッチする", - "avatar-too-big": "アバターが大きすぎます(最大 __size__ )", + "avatar-too-big": "アバターが大きすぎます(最大520KB)", "back": "戻る", "board-change-color": "色の変更", "board-change-background-image": "背景画像を変更", @@ -189,8 +186,8 @@ "card-delete-notice": "削除は取り消しできません。このカードに関係するすべてのアクションがなくなります。", "card-delete-pop": "すべての内容がアクティビティから削除されます。この削除は元に戻すことができません。", "card-delete-suggest-archive": "カードをアーカイブするとボードから削除され、アクティビティに保持されます。", - "card-archive-pop": "カードをアーカイブすると、このリストに表示されなくなります。", - "card-archive-suggest-cancel": "後でアーカイブからカードを復元できます。", + "card-archive-pop": "Card will not be visible at this list after archiving card.", + "card-archive-suggest-cancel": "You can later restore card from Archive.", "card-due": "期限", "card-due-on": "期限日", "card-spent": "作業時間", @@ -217,10 +214,10 @@ "vote-against": "反対", "deleteVotePopup-title": "投票を削除しますか?", "vote-delete-pop": "投票は取り消しできません。この投票に関係するすべてのアクションがなくなります。", - "cardStartPlanningPokerPopup-title": "プランニングポーカーを始める", - "card-edit-planning-poker": "プランニングポーカーを編集する", - "editPokerEndDatePopup-title": "プランニングポーカーの投票終了日を変更", - "poker-question": "プランニングポーカー", + "cardStartPlanningPokerPopup-title": "Start a Planning Poker", + "card-edit-planning-poker": "Edit Planning Poker", + "editPokerEndDatePopup-title": "Change Planning Poker vote end date", + "poker-question": "Planning Poker", "poker-one": "1", "poker-two": "2", "poker-three": "3", @@ -232,14 +229,14 @@ "poker-oneHundred": "100", "poker-unsure": "?", "poker-finish": "Finish", - "poker-result-votes": "投票", + "poker-result-votes": "Votes", "poker-result-who": "Who", "poker-replay": "Replay", "set-estimation": "Set Estimation", - "deletePokerPopup-title": "プランニングポーカーを削除しますか?", - "poker-delete-pop": "削除は取り消しできません。このプランニングポーカーに関連するすべてのアクションが失われます。", + "deletePokerPopup-title": "Delete planning poker?", + "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", "cardDeletePopup-title": "カードを削除しますか?", - "cardArchivePopup-title": "カードをアーカイブしますか?", + "cardArchivePopup-title": "Archive Card?", "cardDetailsActionsPopup-title": "カード操作", "cardLabelsPopup-title": "ラベル", "cardMembersPopup-title": "メンバー", @@ -266,9 +263,6 @@ "checklists": "チェックリスト", "click-to-star": "ボードにスターをつける", "click-to-unstar": "ボードからスターを外す", - "click-to-enable-auto-width": "リスト幅自動調整が無効です。クリックすると有効になります。", - "click-to-disable-auto-width": "リスト幅自動調整が有効です。クリックすると無効になります。", - "auto-list-width": "リスト幅自動調整", "clipboard": "クリップボードもしくはドラッグ&ドロップ", "close": "閉じる", "close-board": "ボードを閉じる", @@ -300,24 +294,23 @@ "color-white": "白", "color-yellow": "黄", "unset-color": "設定しない", - "comments": "コメント", "comment": "コメント", "comment-placeholder": "コメントを書く", "comment-only": "コメントのみ", "comment-only-desc": "カードにのみコメント可能", - "comment-delete": "コメントを削除してもよろしいでしょうか?", - "deleteCommentPopup-title": "コメントを削除しますか?", + "comment-delete": "Are you sure you want to delete the comment?", + "deleteCommentPopup-title": "Delete comment?", "no-comments": "コメントなし", "no-comments-desc": "コメントとアクティビティの閲覧不可。", "worker": "作業者", "worker-desc": "カードの移動、自分への割り当て、コメントが可能。", "computer": "コンピューター", "confirm-subtask-delete-popup": "本当にサブタスクを削除してもよろしいでしょうか?", - "confirm-checklist-delete-popup": "チェックリストを削除してもよろしいでしょうか?", - "subtaskDeletePopup-title": "サブタスクを削除しますか?", - "checklistDeletePopup-title": "チェックリストを削除しますか?", + "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", + "subtaskDeletePopup-title": "Delete Subtask?", + "checklistDeletePopup-title": "Delete Checklist?", "copy-card-link-to-clipboard": "カードへのリンクをクリップボードにコピー", - "copy-text-to-clipboard": "テキストをクリップボードにコピー", + "copy-text-to-clipboard": "Copy text to clipboard", "linkCardPopup-title": "カードをリンク", "searchElementPopup-title": "検索", "copyCardPopup-title": "カードをコピー", @@ -337,10 +330,10 @@ "custom-field-currency-option": "通貨コード", "custom-field-date": "日付", "custom-field-dropdown": "ドロップダウンリスト", - "custom-field-dropdown-none": "(なし)", + "custom-field-dropdown-none": "(none)", "custom-field-dropdown-options": "リストの選択肢", "custom-field-dropdown-options-placeholder": "Enterキーを押して選択肢を追加します", - "custom-field-dropdown-unknown": "(不明)", + "custom-field-dropdown-unknown": "(unknown)", "custom-field-number": "数値", "custom-field-text": "テキスト", "custom-fields": "カスタムフィールド", @@ -383,7 +376,6 @@ "email-sent": "メールを送信しました", "email-verifyEmail-subject": "あなたの __siteName__ のメールアドレスを確認する", "email-verifyEmail-text": "こんにちは、__user__さん。\n\nメールアドレスを認証するために、以下のリンクをクリックしてください。\n\n__url__\n\nよろしくお願いします。", - "enable-vertical-scrollbars": "縦スクロールバーを有効にする", "enable-wip-limit": "仕掛中制限を有効化", "error-board-doesNotExist": "ボードがありません", "error-board-notAdmin": "操作にはボードの管理者権限が必要です", @@ -406,14 +398,14 @@ "export-board-excel": "ボードをExcelにエクスポート", "user-can-not-export-excel": "ユーザーはExcelにエクスポートできません", "export-board-html": "ボードをHTMLにエクスポート", - "export-card": "カードをエクスポート", - "export-card-pdf": "カードをPDFにエクスポート", - "user-can-not-export-card-to-pdf": "ユーザはカードをPDFにエクスポートできません", + "export-card": "Export card", + "export-card-pdf": "Export card to PDF", + "user-can-not-export-card-to-pdf": "User can not export card to PDF", "exportBoardPopup-title": "ボードのエクスポート", - "exportCardPopup-title": "カードをエクスポート", + "exportCardPopup-title": "Export card", "sort": "並べ替え", - "sorted": "分類された", - "remove-sort": "並べ替えを削除", + "sorted": "Sorted", + "remove-sort": "Remove sort", "sort-desc": "クリックでリストをソート", "list-sort-by": "次によりリストを並べ替え:", "list-label-modifiedAt": "最終アクセス日時", @@ -451,7 +443,7 @@ "advanced-filter-description": "高度なフィルタでは次のような演算子を使用できます:== != <= >= && || ( )\n半角スペースは演算子の区切り文字として使用します。\n\nフィールド名や値を使用したフィルタが可能です。\n例:Field1 == Value1\n\n注意:フィールド名や値にスペースが含まれる場合、それらをシングルクォーテーションで囲む必要があります。\n例:'Field 1' == 'Value 1'\n\n単体の制御文字 (' \\\\/) は無視されますので、\\\\を使用することができます。\n例:Field1 == I\\\\'m\n\n複数の条件を組み合わせることもできます。\n例:F1 == V1 || F1 == V2\n\n基本的にすべての演算子は左から右に評価されます。\n丸カッコを使用することで順序を変更できます。\n例:F1 == V1 && ( F2 == V2 || F2 == V3 )\n\nテキストフィールドでは正規表現を使用した検索もできます。\n例:F1 == /Tes.*/i", "fullname": "フルネーム", "header-logo-title": "自分のボードページに戻る。", - "show-activities": "アクティビティを表示", + "hide-system-messages": "システムメッセージを隠す", "headerBarCreateBoardPopup-title": "ボードの作成", "home": "ホーム", "import": "インポート", @@ -502,8 +494,8 @@ "set-color-list": "色を選択", "listActionPopup-title": "操作一覧", "settingsUserPopup-title": "ユーザー設定", - "settingsTeamPopup-title": "チーム設定", - "settingsOrgPopup-title": "組織設定", + "settingsTeamPopup-title": "Team Settings", + "settingsOrgPopup-title": "Organization Settings", "swimlaneActionPopup-title": "スイムレーン操作", "swimlaneAddPopup-title": "直下にスイムレーンを追加", "listImportCardPopup-title": "Trelloのカードをインポート", @@ -577,17 +569,15 @@ "search-cards": "このボード上のカード/リストタイトル、詳細、カスタムフィールドから検索", "search-example": "検索文字列を入力してエンターを押してください", "select-color": "色を選択", - "select-board": "ボードを選択", + "select-board": "Select Board", "set-wip-limit-value": "このリスト中のタスクの最大数を設定", "setWipLimitPopup-title": "仕掛中制限設定", - "shortcut-add-self": "現在のカードに自分を追加", "shortcut-assign-self": "自分をこのカードに割り当てる", "shortcut-autocomplete-emoji": "絵文字の補完", "shortcut-autocomplete-members": "メンバーの補完", "shortcut-clear-filters": "すべてのフィルターを解除する", "shortcut-close-dialog": "ダイアログを閉じる", "shortcut-filter-my-cards": "カードをフィルター", - "shortcut-filter-my-assigned-cards": "自分に割り当てられたカードをフィルタ", "shortcut-show-shortcuts": "このショートカットリストを表示する", "shortcut-toggle-filterbar": "フィルターサイドバーの切り替え", "shortcut-toggle-searchbar": "検索サイドバーの切り替え", @@ -610,9 +600,8 @@ "has-spenttime-cards": "作業時間ありのカード", "time": "時間", "title": "タイトル", - "toggle-assignees": "カードの割り当て先1-9を切り替える(ボードへの追加順)", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", - "remove-labels-multiselect": "複数選択でラベル1-9を削除します", + "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "トラッキング", "tracking-info": "これらのカードへの変更が通知されるようになります。", "type": "タイプ", @@ -629,7 +618,7 @@ "custom-login-logo-link-url": "カスタムのログインロゴイメージのリンクURL", "custom-help-link-url": "ヘルプのリンクURLを変更する", "text-below-custom-login-logo": "カスタムログインロゴイメージの下のテキスト", - "automatic-linked-url-schemes": "自動的にクリック可能になるカスタムURLスキーム。 1行につき1件のURLスキーム", + "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", "username": "ユーザー名", "import-usernames": "インポートするユーザー名", "view-it": "見る", @@ -653,10 +642,10 @@ "people": "メンバー", "registration": "登録", "disable-self-registration": "自己登録を無効化", - "disable-forgot-password": "パスワード再設定を無効化", + "disable-forgot-password": "Disable Forgot Password", "invite": "招待", "invite-people": "メンバーを招待", - "to-boards": "(複数の)ボードへ移動", + "to-boards": "ボードへ移動", "email-addresses": "Emailアドレス", "smtp-host-description": "Emailを処理するSMTPサーバーのアドレス", "smtp-port-description": "SMTPサーバーがEmail送信に使用するポート", @@ -685,7 +674,7 @@ "global-webhook": "グローバルWebフック", "new-outgoing-webhook": "発信Webフックの作成", "no-name": "(名前なし)", - "Node_version": "Node version", + "Node_version": "Nodeバージョン", "Meteor_version": "Meteor バージョン", "MongoDB_version": "MongoDB バージョン", "MongoDB_storage_engine": "MongoDB ストレージエンジン", @@ -707,16 +696,16 @@ "automatically-field-on-card": "フィールドを新しいカードに追加", "always-field-on-card": "フィールドをすべてのカードに追加", "showLabel-field-on-card": "ミニカード上のフィールドラベル表示", - "showSum-field-on-list": "リストの先頭にフィールドの合計を表示", + "showSum-field-on-list": "Show sum of fields at top of list", "yes": "はい", "no": "いいえ", "accounts": "アカウント", "accounts-allowEmailChange": "メールアドレスの変更を許可", "accounts-allowUserNameChange": "ユーザー名の変更を許可", - "tableVisibilityMode-allowPrivateOnly": "ボードの公開設定:プライベートのボードのみを許可", - "tableVisibilityMode" : "ボードの公開設定", + "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", + "tableVisibilityMode" : "Boards visibility", "createdAt": "作成日時", - "modifiedAt": "更新日時", + "modifiedAt": "Modified at", "verified": "認証状況", "active": "有効状態", "card-received": "受付", @@ -893,7 +882,7 @@ "error-undefined": "何らかの問題が発生しています", "error-ldap-login": "ログイン中にエラーが発生しました", "display-authentication-method": "認証方式を表示", - "oidc-button-text": "OIDC ボタンのテキストをカスタマイズ", + "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "デフォルトの認証方式", "duplicate-board": "ボードの複製", "org-number": "組織数:", @@ -904,7 +893,7 @@ "restore-all": "全てをリストアする", "delete-all": "全てを削除する", "loading": "ローディング中です、しばらくお待ちください。", - "previous_as": "前回は", + "previous_as": "最終日時", "act-a-dueAt": "期限の時刻が変更されました\n変更後:__timeValue__\n場所:__card__\n変更前の期限の時刻は __timeOldValue__ でした", "act-a-endAt": "終了を (__timeOldValue__)から __timeValue__ に変更しました", "act-a-startAt": "開始を (__timeOldValue__)から __timeValue__ に変更しました", @@ -922,9 +911,9 @@ "act-pastdue": "__card__ の期限日時 (__timeValue__) が過ぎています", "act-duenow": "__card__ の期限日時 (__timeValue__) になりました", "act-atUserComment": "あなたが [__board__] __list__/__card__ に追記しました", - "delete-user-confirm-popup": "本当にこのアカウントを削除しますか?削除すると元に戻すことはできません。", - "delete-team-confirm-popup": "本当にこのチームを削除しますか?削除すると元に戻すことはできません。", - "delete-org-confirm-popup": "本当にこの組織を削除しますか?削除すると元に戻すことはできません。", + "delete-user-confirm-popup": "本当にこのアカウントを削除しますか?この操作は取り消しできません。", + "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", + "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", "accounts-allowUserDelete": "ユーザー自身のアカウント削除を許可", "hide-minicard-label-text": "ミニカードのラベル名を隠す", "show-desktop-drag-handles": "デスクトップへのドラッグハンドルを表示", @@ -932,7 +921,7 @@ "cardAssigneesPopup-title": "担当者", "addmore-detail": "詳細説明の追加", "show-on-card": "カードに表示する項目", - "show-on-minicard": "ミニカードを表示", + "show-on-minicard": "Show on Minicard", "new": "新規作成", "editOrgPopup-title": "組織を編集", "newOrgPopup-title": "新規組織", @@ -966,33 +955,32 @@ "delete-linked-card-before-this-card": "カード内にある、リンクされているカードを削除しなければ、このカードは削除できません", "delete-linked-cards-before-this-list": "リスト内にある、他のカードを参照しているカードを削除しなければ、このリストは削除できません", "hide-checked-items": "チェックした項目を隠す", - "hide-finished-checklist": "完了したチェックリストを非表示", - "task": "タスク", - "create-task": "タスクを作成", + "task": "Task", + "create-task": "Create Task", "ok": "OK", "organizations": "組織", "teams": "チーム", "displayName": "表示名", "shortName": "短縮名", - "autoAddUsersWithDomainName": "ドメイン名を持つユーザを自動的に追加", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "ウェブサイト", "person": "Person", "my-cards": "自分のカード", "card": "カード", - "list": "リスト", - "board": "ボード", + "list": "List", + "board": "Board", "context-separator": "/", - "myCardsViewChange-title": "自分のカードを表示", - "myCardsViewChangePopup-title": "自分のカードを表示", + "myCardsViewChange-title": "My Cards View", + "myCardsViewChangePopup-title": "My Cards View", "myCardsViewChange-choice-boards": "ボード", - "myCardsViewChange-choice-table": "テーブル", + "myCardsViewChange-choice-table": "Table", "myCardsSortChange-title": "カードの並び替え", "myCardsSortChangePopup-title": "カードの並び替え", "myCardsSortChange-choice-board": "ボード毎", "myCardsSortChange-choice-dueat": "期限日毎", "dueCards-title": "期限切れカード", - "dueCardsViewChange-title": "期限切れカードを表示", - "dueCardsViewChangePopup-title": "期限切れカードを表示", + "dueCardsViewChange-title": "カードの表示", + "dueCardsViewChangePopup-title": "カードの表示", "dueCardsViewChange-choice-me": "自分", "dueCardsViewChange-choice-all": "全ユーザー", "dueCardsViewChange-choice-all-description": "ユーザーに権限のあるボードから、期限が切れたすべての未完了のカードを表示します。", @@ -1004,8 +992,8 @@ "label-color-not-found": "ラベル色 %s は見つかりませんでした。", "user-username-not-found": "ユーザー名「%s」は見つかりませんでした。", "comment-not-found": "コメントの文字列に「%s」が含まれるカードは見つかりませんでした。", - "org-name-not-found": "組織「%s」は見つかりませんでした。", - "team-name-not-found": "チーム「%s」は見つかりませんでした。", + "org-name-not-found": "Organization '%s' not found.", + "team-name-not-found": "Team '%s' not found.", "globalSearch-title": "すべてのボードから検索", "no-cards-found": "カードが見つかりませんでした", "one-card-found": "1件のカードが見つかりました", @@ -1025,7 +1013,7 @@ "operator-member-abbrev": "m", "operator-assignee": "担当者", "operator-assignee-abbrev": "a", - "operator-creator": "作成者", + "operator-creator": "creator", "operator-status": "ステータス", "operator-due": "期限日", "operator-created": "作成日", @@ -1034,11 +1022,11 @@ "operator-comment": "コメント", "operator-has": "所有", "operator-limit": "制限", - "operator-debug": "デバッグ", - "operator-org": "組織", - "operator-team": "チーム", + "operator-debug": "debug", + "operator-org": "org", + "operator-team": "team", "predicate-archived": "アーカイブ済み", - "predicate-open": "開く", + "predicate-open": "open", "predicate-ended": "終了", "predicate-all": "すべて", "predicate-overdue": "超過", @@ -1046,7 +1034,7 @@ "predicate-month": "月", "predicate-quarter": "半年", "predicate-year": "年", - "predicate-due": "期限", + "predicate-due": "期限日", "predicate-modified": "変更日", "predicate-created": "作成日", "predicate-attachment": "添付", @@ -1058,15 +1046,15 @@ "predicate-member": "メンバー", "predicate-public": "公開", "predicate-private": "非公開", - "predicate-selector": "選択者", + "predicate-selector": "selector", "predicate-projection": "projection", "operator-unknown-error": "%sは演算子ではありません", "operator-number-expected": "演算子 __operator__ には数値の指定が必要ですが、「__value__」が入力されました", "operator-sort-invalid": "ソート「%s」は無効です", "operator-status-invalid": "「%s」は無効なステータスです", - "operator-has-invalid": "%s は有効な存在チェックではありません", + "operator-has-invalid": "%s is not a valid existence check", "operator-limit-invalid": "%s は有効な制限ではありません。制限は正の整数である必要があります。", - "operator-debug-invalid": "%s は有効なデバッグ述語ではありません。", + "operator-debug-invalid": "%s is not a valid debug predicate", "next-page": "次のページ", "previous-page": "前のページ", "heading-notes": "注意", @@ -1119,26 +1107,25 @@ "title-alphabetically": "タイトル(アルファベット順)", "created-at-newest-first": "作成日(新しいものから)", "created-at-oldest-first": "作成日(古いものから)", - "links-heading": "リンク", - "hide-activities-of-all-boards": "すべてのボードでボードアクティビティを表示しない", - "now-activities-of-all-boards-are-hidden": "全ボードのすべてのアクティビティが非表示にされました", + "links-heading": "Links", + "hide-system-messages-of-all-users": "全ユーザーのシステムメッセージを非表示にする", + "now-system-messages-of-all-users-are-hidden": "現在全ユーザーのシステムメッセージが非表示になっています", "move-swimlane": "スイムレーンを移動する", "moveSwimlanePopup-title": "スイムレーンを移動する", "custom-field-stringtemplate": "文字列テンプレート", "custom-field-stringtemplate-format": "書式(%{value}をプレースホルダーとして使用)", "custom-field-stringtemplate-separator": "セパレーター( または   は空白として使用)", - "custom-field-stringtemplate-item-placeholder": "Enterキーを押して項目を追加", + "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "作成者", - "creator-on-minicard": "ミニカードの作成者", "filesReportTitle": "ファイルレポート", "reports": "レポート", "rulesReportTitle": "ルールレポート", - "boardsReportTitle": "ボードレポート", - "cardsReportTitle": "カードレポート", + "boardsReportTitle": "Boards Report", + "cardsReportTitle": "Cards Report", "copy-swimlane": "スイムレーンをコピーする", "copySwimlanePopup-title": "スイムレーンをコピーする", - "display-card-creator": "カード作成者を表示", - "wait-spinner": "処理中スピナー", + "display-card-creator": "Display Card Creator", + "wait-spinner": "Wait Spinner", "Bounce": "Bounce Wait Spinner", "Cube": "Cube Wait Spinner", "Cube-Grid": "Cube-Grid Wait Spinner", @@ -1147,37 +1134,37 @@ "Rotateplane": "Rotateplane Wait Spinner", "Scaleout": "Scaleout Wait Spinner", "Wave": "Wave Wait Spinner", - "maximize-card": "カードを最大化", - "minimize-card": "カードを最小化", + "maximize-card": "Maximize Card", + "minimize-card": "Minimize Card", "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", - "subject": "件名", - "details": "詳細", + "subject": "Subject", + "details": "Details", "carbon-copy": "Carbon Copy (Cc:)", - "ticket": "チケット", - "tickets": "チケット", - "ticket-number": "チケット番号", - "open": "オープン", - "pending": "中断", - "closed": "クローズ", - "resolved": "解決", - "cancelled": "取消", - "history": "履歴", - "request": "依頼", - "requests": "依頼", - "help-request": "ヘルプ依頼", + "ticket": "Ticket", + "tickets": "Tickets", + "ticket-number": "Ticket Number", + "open": "Open", + "pending": "Pending", + "closed": "Closed", + "resolved": "Resolved", + "cancelled": "Cancelled", + "history": "History", + "request": "Request", + "requests": "Requests", + "help-request": "Help Request", "editCardSortOrderPopup-title": "Change Sorting", - "cardDetailsPopup-title": "カード詳細", - "add-teams": "チームを追加", + "cardDetailsPopup-title": "Card Details", + "add-teams": "Add teams", "add-teams-label": "Added teams are displayed below:", "remove-team-from-table": "Are you sure you want to remove this team from the board ?", - "confirm-btn": "確認", + "confirm-btn": "Confirm", "remove-btn": "削除", - "filter-card-title-label": "カードタイトルでフィルタ", - "invite-people-success": "登録の招待が正常に送信されました", - "invite-people-error": "登録の招待送信中にエラーが発生しました", - "can-invite-if-same-mailDomainName": "メールドメイン名", - "to-create-teams-contact-admin": "チームを作成するには、管理者に問い合わせてください。", + "filter-card-title-label": "Filter by card title", + "invite-people-success": "Invitation to register sent with success", + "invite-people-error": "Error while sending invitation to register", + "can-invite-if-same-mailDomainName": "Email domain name", + "to-create-teams-contact-admin": "To create teams, please contact the administrator.", "Node_heap_total_heap_size": "Node heap: total heap size", "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", "Node_heap_total_physical_size": "Node heap: total physical size", @@ -1193,80 +1180,68 @@ "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", "Node_memory_usage_heap_used": "Node memory usage: actual memory used", "Node_memory_usage_external": "Node memory usage: external", - "add-organizations": "組織を追加", - "add-organizations-label": "追加された組織は以下に表示されます:", - "remove-organization-from-board": "本当にこの組織をボードから削除しますか?", - "to-create-organizations-contact-admin": "組織を作成するには、管理者に問い合わせてください。", - "custom-legal-notice-link-url": "カスタムの法的通知ページのURL", - "acceptance_of_our_legalNotice": "続行すると同意したことになります", - "legalNotice": "法的通知", - "copied": "コピーされました", - "checklistActionsPopup-title": "チェックリストの操作", - "moveChecklist": "チェックリストを移動", - "moveChecklistPopup-title": "チェックリストを移動", - "newlineBecomesNewChecklistItem": "テキストの各行がチェックリスト項目の1つになります", - "newLineNewItem": "テキストの1行が1チェックリスト項目です", - "newlineBecomesNewChecklistItemOriginOrder": "テキストの各行がチェックリスト項目および元のオーダの1つになります", - "originOrder": "元のオーダ", - "copyChecklist": "チェックリストをコピー", - "copyChecklistPopup-title": "チェックリストをコピー", + "add-organizations": "Add organizations", + "add-organizations-label": "Added organizations are displayed below:", + "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", + "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", + "custom-legal-notice-link-url": "Custom legal notice page URL", + "acceptance_of_our_legalNotice": "By continuing, you accept our", + "legalNotice": "legal notice", + "copied": "Copied!", + "checklistActionsPopup-title": "Checklist Actions", + "moveChecklist": "Move Checklist", + "moveChecklistPopup-title": "Move Checklist", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", + "copyChecklist": "Copy Checklist", + "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", - "subtaskActionsPopup-title": "サブタスクの操作", - "attachmentActionsPopup-title": "添付ファイルの操作", - "attachment-move-storage-fs": "添付ファイルをファイルシステムに移動", - "attachment-move-storage-gridfs": "添付ファイルを GridFS に移動", - "attachment-move-storage-s3": "添付ファイルを S3 に移動", - "attachment-move": "添付ファイルを移動", - "move-all-attachments-to-fs": "すべての添付ファイルをファイルシステムに移動", - "move-all-attachments-to-gridfs": "すべての添付ファイルを GridFS に移動", - "move-all-attachments-to-s3": "すべての添付ファイルを S3 に移動", - "move-all-attachments-of-board-to-fs": "ボードのすべての添付ファイルをファイルシステムに移動", - "move-all-attachments-of-board-to-gridfs": "ボードのすべての添付ファイルを GridFS に移動", - "move-all-attachments-of-board-to-s3": "ボードのすべての添付ファイルを S3 に移動", - "path": "パス", - "version-name": "バージョン名", - "size": "サイズ", - "storage": "ストレージ", + "subtaskActionsPopup-title": "Subtask Actions", + "attachmentActionsPopup-title": "Attachment Actions", + "attachment-move-storage-fs": "Move attachment to filesystem", + "attachment-move-storage-gridfs": "Move attachment to GridFS", + "attachment-move-storage-s3": "添付ファイルを S3 に移動する", + "attachment-move": "Move Attachment", + "move-all-attachments-to-fs": "Move all attachments to filesystem", + "move-all-attachments-to-gridfs": "Move all attachments to GridFS", + "move-all-attachments-to-s3": "複数の添付ファイルを S3 に移動する", + "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", + "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", + "move-all-attachments-of-board-to-s3": "ボードのすべての添付ファイルを S3 に移動する", + "path": "Path", + "version-name": "Version-Name", + "size": "Size", + "storage": "Storage", "action": "操作", - "board-title": "ボードのタイトル", + "board-title": "Board Title", "attachmentRenamePopup-title": "名前変更", - "uploading": "アップロード中", + "uploading": "アップグレード中", "remaining_time": "残り時間", "speed": "速度", "progress": "進捗", "password-again": "パスワード(再入力)", "if-you-already-have-an-account": "すでにアカウントを持っている場合", - "register": "登録者", + "register": "登録", "forgot-password": "パスワードを忘れた", - "minicardDetailsActionsPopup-title": "カード詳細", + "minicardDetailsActionsPopup-title": "Card Details", "Mongo_sessions_count": "Mongo セッション数", "change-visibility": "公開範囲の変更", - "max-upload-filesize": "アップロードファイルの最大バイト数:", - "allowed-upload-filetypes": "アップロードできるファイルタイプ:", - "max-avatar-filesize": "アバターの最大バイト数:", + "max-upload-filesize": "バイト単位の最大アップロードサイズ: ", + "allowed-upload-filetypes": "アップロードできるファイルタイプ", + "max-avatar-filesize": "バイト単位の最大アバターファイルサイズ:", "allowed-avatar-filetypes": "アバターに使用できるファイルタイプ", "invalid-file": "無効なファイル名の場合アップロードまたは名前の変更は取り消されます。", "preview-pdf-not-supported": "この端末はPDFのプレビューに対応していません。他の端末でダウンロードしてください。", "drag-board": "ドラッグボード", - "translation-number": "カスタム翻訳文字列数:", - "delete-translation-confirm-popup": "本当にこのカスタム翻訳文字列を削除しますか。削除すると元に戻すことはできません。", - "newTranslationPopup-title": "新規カスタム翻訳文字列", - "editTranslationPopup-title": "カスタム翻訳文字列を編集", - "settingsTranslationPopup-title": "このカスタム翻訳文字列を削除しますか", - "translation": "翻訳", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "テキスト", - "translation-text": "翻訳テキスト", - "show-subtasks-field": "サブタスクフィールドを表示", - "show-week-of-year": "年内の暦週番号(ISO 8601準拠)", - "convert-to-markdown": "マークダウンに変換", - "import-board-zip": "ボードJSONファイルを含む zip ファイルと、添付ファイルを含むボード名サブディレクトリを追加する", - "collapse": "折りたたむ", - "uncollapse": "展開", - "hideCheckedChecklistItems": "チェック済みチェックリスト項目を非表示", - "hideAllChecklistItems": "すべてのチェックリスト項目を非表示", - "support": "サポート", - "supportPopup-title": "サポート", - "accessibility-page-enabled": "アクセシビリティページが有効", - "accessibility-title": "アクセシビリティトピック", - "accessibility-content": "アクセシビリティコンテンツ" + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ka.i18n.json b/imports/i18n/data/ka.i18n.json index a77558487..babae59ba 100644 --- a/imports/i18n/data/ka.i18n.json +++ b/imports/i18n/data/ka.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "მიბმულია %s %s-დან", "activity-created": "შექმნილია %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "ბარათის დამატება", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "კატალოგი", "click-to-star": "დააჭირეთ დაფის ვარსკვლავით მოსანიშნად", "click-to-unstar": "დააკლიკეთ დაფიდან ვარსკვლავის მოსახსნელად.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard ან drag & drop", "close": "დახურვა", "close-board": "დაფის დახურვა", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "ყვითელი", "unset-color": "Unset", - "comments": "Comments", "comment": "კომენტარი", "comment-placeholder": "დაწერეთ კომენტარი", "comment-only": "მხოლოდ კომენტარები", @@ -383,7 +376,6 @@ "email-sent": "ელ.ფოსტა გაგზავნილია", "email-verifyEmail-subject": "შეამოწმეთ ელ.ფოსტის მისამართი __siteName-ზე__", "email-verifyEmail-text": "გამარჯობა __user__,\n\nანგარიშის ელ.ფოსტის შესამოწმებლად დააკლიკეთ ქვედა ბმულს.\n\n__url__\n\nმადლობა.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "გავააქტიუროთ WIP ლიმიტი", "error-board-doesNotExist": "მსგავსი დაფა არ არსებობს", "error-board-notAdmin": "ამის გასაკეთებლად საჭიროა იყოთ დაფის ადმინისტრატორი", @@ -451,7 +443,7 @@ "advanced-filter-description": "გაფართოებული ფილტრაცია, უფლებას გაძლევთ დაწეროთ მწკრივი რომლებიც შეიცავენ შემდეგ ოპერაციებს : == != <= >= && || ( ) space გამოიყენება როგორც გამმიჯნავი ოპერაციებს შორის. თქვენ შეგიძლიათ გაფილტროთ მომხმარებლის ველი მათი სახელებისა და ღირებულებების მიხედვით. მაგალითად: Field1 == Value1. გაითვალისწინეთ რომ თუ ველი ან ღირებულება შეიცავს space-ს თქვენ დაგჭირდებათ მათი მოთავსება ერთ ციტატაში მაგ: 'Field 1' == 'Value 1'. ერთი კონტროლის სიმბოლოებისთვის (' \\\\/) გამოტოვება, შეგიძლიათ გამოიყენოთ \\\\. მაგ: Field1 == I\\\\'m. აგრეთვე თქვენ შეგიძლიათ შეურიოთ რამოდენიმე კომბინაცია. მაგალითად: F1 == V1 || F1 == V2. როგორც წესი ყველა ოპერაცია ინტერპრეტირებულია მარცხნიდან მარჯვნივ. თქვენ შეგიძლიათ შეცვალოთ რიგითობა ფრჩხილების შეცვლით მაგალითად: F1 == V1 && ( F2 == V2 || F2 == V3 ). აგრეთვე შეგიძლიათ მოძებნოთ ტექსტის ველები რეგექსით F1 == /Tes.*/i", "fullname": "სახელი და გვარი", "header-logo-title": "დაბრუნდით უკან დაფების გვერდზე.", - "show-activities": "Show Activities", + "hide-system-messages": "დამალეთ სისტემური შეტყობინებები", "headerBarCreateBoardPopup-title": "დაფის შექმნა", "home": "სახლი", "import": "იმპორტირება", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "დააყენეთ შეზღუდვა დავალებების მაქსიმალურ რაოდენობაზე", "setWipLimitPopup-title": "დააყენეთ WIP ლიმიტი", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "მონიშნეთ საკუთარი თავი აღნიშნულ ბარათზე", "shortcut-autocomplete-emoji": "emoji-ის ავტომატური შევსება", "shortcut-autocomplete-members": "მომხმარებლების ავტომატური შევსება", "shortcut-clear-filters": "ყველა ფილტრის გასუფთავება", "shortcut-close-dialog": "დიალოგის დახურვა", "shortcut-filter-my-cards": "ჩემი ბარათების გაფილტვრა", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "ფილტრაციის გვერდითა ღილაკი", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "აქვს გახარჯული დროის ბარათები", "time": "დრო", "title": "სათაური", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "მონიტორინგი", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "ტექსტი", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/km.i18n.json b/imports/i18n/data/km.i18n.json index 85b7fe364..7ed657dea 100644 --- a/imports/i18n/data/km.i18n.json +++ b/imports/i18n/data/km.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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": "បិទផ្ទាំង", "shortcut-filter-my-cards": "តម្រងកាតរបស់ខ្ញុំ", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "មានកាតដែលបានចំណាយពេល", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ko-KR.i18n.json b/imports/i18n/data/ko-KR.i18n.json index f8aae6451..95597e08b 100644 --- a/imports/i18n/data/ko-KR.i18n.json +++ b/imports/i18n/data/ko-KR.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "목록 너비 설정", + "set-list-width": "목록 너비 설정", + "set-list-width-value": "목록 너비 (픽셀)", + "list-width-error-message": "목록 너비는 양수여야 합니다", "setSwimlaneHeightPopup-title": "Swimlane 높이 설정", "set-swimlane-height": "Swimlane 높이 설정", "set-swimlane-height-value": "Swimlane 높이 (픽셀)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "번역", "text": "Text", "translation-text": "번역 문구", + "show-at-minicard": "미니카드에 보이기", + "show-checklist-at-minicard": "미니카드에 확인목록 보이기", "show-subtasks-field": "하위할일 항목 보이기", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ko.i18n.json b/imports/i18n/data/ko.i18n.json index b87872f87..1930868fb 100644 --- a/imports/i18n/data/ko.i18n.json +++ b/imports/i18n/data/ko.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s가 저장소로 이동되었습니다.", "activity-attached": "%s를 %s에 첨부함", "activity-created": "%s 생성됨", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "생성된 사용자 정의 필드 %s", "activity-excluded": "%s를 %s에서 제외함", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "카드 추가", "add-card-to-top-of-list": "리스트 맨앞에 카드를 추가함", "add-card-to-bottom-of-list": "리스트 맨뒤에 카드를 추가함", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "목록 너비 설정", + "set-list-width": "목록 너비 설정", + "set-list-width-value": "목록 너비 (픽셀)", + "list-width-error-message": "목록 너비는 양수여야 합니다", "setSwimlaneHeightPopup-title": "Swimlane 높이 설정", "set-swimlane-height": "Swimlane 높이 설정", "set-swimlane-height-value": "Swimlane 높이 (픽셀)", @@ -266,9 +263,6 @@ "checklists": "체크리스트", "click-to-star": "보드에 별 추가.", "click-to-unstar": "보드에 별 삭제.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "클립보드 또는 드래그 앤 드롭", "close": "닫기", "close-board": "보드 닫기", @@ -300,7 +294,6 @@ "color-white": "흰색", "color-yellow": "옐로우", "unset-color": "Unset", - "comments": "Comments", "comment": "댓글", "comment-placeholder": "댓글 입력", "comment-only": "댓글만 입력 가능", @@ -383,7 +376,6 @@ "email-sent": "이메일 전송", "email-verifyEmail-subject": "이메일 인증: __siteName__", "email-verifyEmail-text": "안녕하세요. __user__님,\n\n당신의 계정과 이메일을 활성하려면 아래 링크를 클릭하십시오.\n\n__url__\n\n감사합니다.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "WIP 제한 활성화", "error-board-doesNotExist": "보드가 없습니다.", "error-board-notAdmin": "이 작업은 보드의 관리자만 실행할 수 있습니다.", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "실명", "header-logo-title": "보드 페이지로 돌아가기.", - "show-activities": "Show Activities", + "hide-system-messages": "시스템 메시지 숨기기", "headerBarCreateBoardPopup-title": "보드 생성", "home": "홈", "import": "가져오기", @@ -580,14 +572,12 @@ "select-board": "보드 선택", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "현재 카드에 자신을 지정하세요.", "shortcut-autocomplete-emoji": "이모티콘 자동완성", "shortcut-autocomplete-members": "멤버 자동완성", "shortcut-clear-filters": "모든 필터 초기화", "shortcut-close-dialog": "대화 상자 닫기", "shortcut-filter-my-cards": "내 카드 필터링", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "바로가기 목록을 가져오십시오.", "shortcut-toggle-filterbar": "토글 필터 사이드바", "shortcut-toggle-searchbar": "검색 사이드바 전환", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "시간", "title": "제목", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "카드에 대해 1-9 라벨로 전환합니다. 복수-선택은 1-9 라벨을 추가합니다", "remove-labels-multiselect": "복수-선택은 1-9 라벨을 제거합니다", "tracking": "추적", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "선택된 항목 숨기기", - "hide-finished-checklist": "Hide finished checklist", "task": "과제", "create-task": "과제 생성", "ok": "확인", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "생성 (새로운 것이 먼저)", "created-at-oldest-first": "생성 (오래된 것이 먼저)", "links-heading": "링크", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "모든 사용자의 시스템 메시지 숨기기", + "now-system-messages-of-all-users-are-hidden": "이제 모든 사용자의 시스템 메시지가 숨겨졌습니다", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "문자열 템플릿", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "구분자 (공백은 또는  사용 )", "custom-field-stringtemplate-item-placeholder": "항목을 더 추가하려면 Enter 키를 누르십시오.", "creator": "생성자", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "필터 보고서", "reports": "보고서", "rulesReportTitle": "규칙 보고서", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "확인목록 동작", "moveChecklist": "체크리스트 이동", "moveChecklistPopup-title": "체크리스트 이동", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "줄바꿈이 새 확인목록 항목이 됨", "copyChecklist": "체크리스트 복사", "copyChecklistPopup-title": "체크리스트 복사", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "번역", "text": "텍스트", "translation-text": "번역 문구", + "show-at-minicard": "미니카드에 보이기", + "show-checklist-at-minicard": "미니카드에 확인목록 보이기", "show-subtasks-field": "하위할일 항목 보이기", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "접기", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/lt.i18n.json b/imports/i18n/data/lt.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/lt.i18n.json +++ b/imports/i18n/data/lt.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/lv.i18n.json b/imports/i18n/data/lv.i18n.json index 650821321..cb97b289f 100644 --- a/imports/i18n/data/lv.i18n.json +++ b/imports/i18n/data/lv.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s pārvietoja uz arhīvu", "activity-attached": "pievienoja %s pie %s", "activity-created": "izveidoja%s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "izveidoja lauku %s", "activity-excluded": "izslēdza%s no%s", "activity-imported": "importēja %s iekš %s no %s", @@ -86,12 +85,10 @@ "add-card": "Pievienot kartiņu", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Kontrolsaraksti", "click-to-star": "Spied lai atzīmēt ar zvaigzni.", "click-to-unstar": "Spied lai noņemtu zvaigzni.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Starpliktuve vai drag & drop", "close": "Aizvērt", "close-board": "Aizvērt dēli", @@ -300,7 +294,6 @@ "color-white": "balts", "color-yellow": "dzeltens", "unset-color": "Atiestatīt", - "comments": "Comments", "comment": "Komentēt", "comment-placeholder": "Rakstīt komentāru", "comment-only": "Tikai komentēt", @@ -383,7 +376,6 @@ "email-sent": "E-pasts nosūtīts", "email-verifyEmail-subject": "Apstipriniet savu e-pasta adresi priekš __siteName__", "email-verifyEmail-text": "Sveiki, __user__,\n\nLai apstiprinātu savu e-pasta adresi, vienkārši spiediet uz saites zemāk.\n\n__url__\n\nPaldies.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Ieslēgt WIP limitu", "error-board-doesNotExist": "Šis dēlis neeksistē", "error-board-notAdmin": "Jums jābūt dēļa administratoram, lai veiktu šo darbību", @@ -451,7 +443,7 @@ "advanced-filter-description": "Papildu filtri ļauj meklēt ar šādiem operatoriem: == != <= >= && || ( ) Starp operatoriem jāatstāj atstarpe. Lai filtrētu papildlaukus, norādiet tā nosaukumu un vērtību. Piemērs: Lauks1 == Vērtība1. Piezīme: ja lauki vai vērtības satur atstarpes, ievietojiet tekstu pēdiņās. Piemērs: 'Lauks 1' == 'Vērtība 1'. Lai ievadītu kontrolsimbolus (pēdiņās un slīpsvītras), pirms tiem ievadiet \\\\. Piemērs: Lauks1 == 'Rībēj\\\\' Rīga'. Papildus var kombinēt vairākus nosacījumus. Piemērs: L1 == V1 || L1 == V2. Parasti operatori tiek interpretēti no kreisās uz labo pusi. Secību var mainīt ar iekavām. Piemērs: L1 == V1 && ( L2 == V2 || L2 == V3 ). Papildus teksta laukus var filtrēt ar RegEx: L1 == /Tes.*/i", "fullname": "Pilnais vārds un uzvārds", "header-logo-title": "Atpakaļ uz jūsu dēļiem", - "show-activities": "Show Activities", + "hide-system-messages": "Slēpt darbības", "headerBarCreateBoardPopup-title": "Izveidot dēli", "home": "Sākums", "import": "Importēt", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Iestatīt maksimālo skaitu ar kartiņām šajā sarakstā", "setWipLimitPopup-title": "Uzlikt WIP ierobežojumu", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Pievienot sevi atvērtajai kartiņai", "shortcut-autocomplete-emoji": "Emoji automātiska pabeigšana", "shortcut-autocomplete-members": "Dalībnieku automātiska pabeigšana", "shortcut-clear-filters": "Notīrīt visus filtrus", "shortcut-close-dialog": "Aizvērt vaicājumu", "shortcut-filter-my-cards": "Filtrēt manas kartiņas", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Atvērt saīšņu sarakstu", "shortcut-toggle-filterbar": "Pārslēgt filtru sānjoslu", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Kartiņas ar pavadīto laiku", "time": "Laiks", "title": "Nosaukums", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Sekošana", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Nevar dzēst šo kartiņu pirms priekšteča kartiņas dzēšnas, kurai", "delete-linked-cards-before-this-list": "Nevar dzēst sarakstu pirms saistīto kartiņu, kas norada uz šī saraksta kartiņām, dzēšanas", "hide-checked-items": "Slēpt atzīmētos elementus", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Teksts", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Sakļaut", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/mk.i18n.json b/imports/i18n/data/mk.i18n.json index 1dc8bd784..0e53be475 100644 --- a/imports/i18n/data/mk.i18n.json +++ b/imports/i18n/data/mk.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s е преместена во Архива", "activity-attached": "прикачи %s към %s", "activity-created": "създаде %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "създаде собствено поле %s", "activity-excluded": "изключи %s от %s", "activity-imported": "импортира %s в/във %s от %s", @@ -86,12 +85,10 @@ "add-card": "Додади Картичка", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Списъци със задачи", "click-to-star": "Click to star this board.", "click-to-unstar": "Натиснете, за да премахнете това табло от любими.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Клипборда или с драг & дроп", "close": "Затвори", "close-board": "Затвори Табла", @@ -300,7 +294,6 @@ "color-white": "бяло", "color-yellow": "жълто", "unset-color": "Unset", - "comments": "Comments", "comment": "Коментирај", "comment-placeholder": "Напиши коментар", "comment-only": "Само коментари", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Включи WIP лимита", "error-board-doesNotExist": "Това табло не съществува", "error-board-notAdmin": "За да направите това трябва да сте администратор на това табло", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Име", "header-logo-title": "Назад към страницата с Вашите табла.", - "show-activities": "Show Activities", + "hide-system-messages": "Скриване на системните съобщения", "headerBarCreateBoardPopup-title": "Креирај Табло", "home": "Почетна", "import": "Импорт", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Въведи WIP лимит", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Добави себе си към тази карта", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete members", "shortcut-clear-filters": "Изчистване на всички филтри", "shortcut-close-dialog": "Close Dialog", "shortcut-filter-my-cards": "Филтрирай моите карти", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Отвори/затвори сайдбара с филтри", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Има карти с изработено време", "time": "Време", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Следене", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Текст", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/mn.i18n.json b/imports/i18n/data/mn.i18n.json index ce9e320da..78ae3b428 100644 --- a/imports/i18n/data/mn.i18n.json +++ b/imports/i18n/data/mn.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Карт нэмэх", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Самбар үүсгэх", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ms-MY.i18n.json b/imports/i18n/data/ms-MY.i18n.json index 487628b10..ccbe4a65f 100644 --- a/imports/i18n/data/ms-MY.i18n.json +++ b/imports/i18n/data/ms-MY.i18n.json @@ -1,5 +1,5 @@ { - "accept": "Terima", + "accept": "Accept", "act-activity-notify": "Activity Notification", "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "Namakan semula senarai kepada %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Tetapkan Lebar", - "set-list-width": "Tetapkan Lebar", - "set-list-width-value": "Tetapkan lebar minimum dan maksimum (piksel)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -105,20 +102,20 @@ "convertChecklistItemToCardPopup-title": "Convert to Card", "add-cover": "Add cover image to minicard", "add-label": "Add Label", - "add-list": "Tambah Senarai", + "add-list": "Add List", "add-after-list": "Add After List", - "add-members": "Tambah Ahli", - "added": "Ditambah", - "addMemberPopup-title": "Ahli-ahli", - "memberPopup-title": "Tetapan Ahli", - "admin": "Pentadbir", + "add-members": "Add Members", + "added": "Added", + "addMemberPopup-title": "Members", + "memberPopup-title": "Member Settings", + "admin": "Admin", "admin-desc": "Can view and edit cards, remove members, and change settings for the board.", - "admin-announcement": "Pengumuman", + "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", - "admin-announcement-title": "Pengumuman dari Pentadbir", - "all-boards": "Semua Papan", - "and-n-other-card": "Dan __count__ kad lain", - "and-n-other-card_plural": "Dan __count__ kad-kad lain", + "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", "app-try-reconnect": "Try to reconnect.", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Tunjukkan Aktiviti", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,26 +955,25 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", "organizations": "Organizations", "teams": "Teams", - "displayName": "Nama Paparan", - "shortName": "Nama Ringkas", + "displayName": "Display Name", + "shortName": "Short Name", "autoAddUsersWithDomainName": "Automatically add users with the domain name", - "website": "Laman Sesawang", + "website": "Website", "person": "Person", - "my-cards": "Kad Saya", - "card": "Kad", - "list": "Senarai", - "board": "Papan", + "my-cards": "My Cards", + "card": "Card", + "list": "List", + "board": "Board", "context-separator": "/", "myCardsViewChange-title": "My Cards View", "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "Papan", - "myCardsViewChange-choice-table": "Jadual", + "myCardsViewChange-choice-boards": "Boards", + "myCardsViewChange-choice-table": "Table", "myCardsSortChange-title": "My Cards Sort", "myCardsSortChangePopup-title": "My Cards Sort", "myCardsSortChange-choice-board": "By Board", @@ -993,8 +981,8 @@ "dueCards-title": "Due Cards", "dueCardsViewChange-title": "Due Cards View", "dueCardsViewChangePopup-title": "Due Cards View", - "dueCardsViewChange-choice-me": "Saya", - "dueCardsViewChange-choice-all": "Semua Pengguna", + "dueCardsViewChange-choice-me": "Me", + "dueCardsViewChange-choice-all": "All Users", "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", "broken-cards": "Broken Cards", "board-title-not-found": "Board '%s' not found.", @@ -1004,27 +992,27 @@ "label-color-not-found": "Label color %s not found.", "user-username-not-found": "Username '%s' not found.", "comment-not-found": "Card with comment containing text '%s' not found.", - "org-name-not-found": "Organisasi '%s' tidak ditemui.", - "team-name-not-found": "Pasukan '%s' tidak ditemui.", - "globalSearch-title": "Cari di Semua Papan", - "no-cards-found": "Tiada Kad Ditemui", - "one-card-found": "Satu Kad Ditemui", - "n-cards-found": "%s Kad Ditemui", + "org-name-not-found": "Organization '%s' not found.", + "team-name-not-found": "Team '%s' not found.", + "globalSearch-title": "Search All Boards", + "no-cards-found": "No Cards Found", + "one-card-found": "One Card Found", + "n-cards-found": "%s Cards Found", "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "papan", - "operator-board-abbrev": "p", + "operator-board": "board", + "operator-board-abbrev": "b", "operator-swimlane": "swimlane", "operator-swimlane-abbrev": "s", - "operator-list": "senarai", - "operator-list-abbrev": "s", + "operator-list": "list", + "operator-list-abbrev": "l", "operator-label": "label", "operator-label-abbrev": "#", - "operator-user": "pengguna", + "operator-user": "user", "operator-user-abbrev": "@", - "operator-member": "ahli", - "operator-member-abbrev": "a", - "operator-assignee": "pemberi tugas", - "operator-assignee-abbrev": "pt", + "operator-member": "member", + "operator-member-abbrev": "m", + "operator-assignee": "assignee", + "operator-assignee-abbrev": "a", "operator-creator": "creator", "operator-status": "status", "operator-due": "due", @@ -1033,31 +1021,31 @@ "operator-sort": "sort", "operator-comment": "comment", "operator-has": "has", - "operator-limit": "had", + "operator-limit": "limit", "operator-debug": "debug", "operator-org": "org", "operator-team": "team", "predicate-archived": "archived", "predicate-open": "open", "predicate-ended": "ended", - "predicate-all": "semua", + "predicate-all": "all", "predicate-overdue": "overdue", - "predicate-week": "minggu", - "predicate-month": "bulan", - "predicate-quarter": "suku", - "predicate-year": "tahun", + "predicate-week": "week", + "predicate-month": "month", + "predicate-quarter": "quarter", + "predicate-year": "year", "predicate-due": "due", "predicate-modified": "modified", "predicate-created": "created", "predicate-attachment": "attachment", - "predicate-description": "huraian", + "predicate-description": "description", "predicate-checklist": "checklist", - "predicate-start": "mula", - "predicate-end": "akhir", + "predicate-start": "start", + "predicate-end": "end", "predicate-assignee": "assignee", "predicate-member": "member", - "predicate-public": "umum", - "predicate-private": "peribadi", + "predicate-public": "public", + "predicate-private": "private", "predicate-selector": "selector", "predicate-projection": "projection", "operator-unknown-error": "%s is not an operator", @@ -1067,10 +1055,10 @@ "operator-has-invalid": "%s is not a valid existence check", "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "Halaman Seterusnya", - "previous-page": "Halaman Sebelumnya", - "heading-notes": "Nota-nota", - "globalSearch-instructions-heading": "Cari arahan", + "next-page": "Next Page", + "previous-page": "Previous Page", + "heading-notes": "Notes", + "globalSearch-instructions-heading": "Search Instructions", "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", "globalSearch-instructions-operators": "Available operators:", "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", @@ -1106,7 +1094,7 @@ "globalSearch-instructions-notes-5": "By default archived cards are not searched.", "link-to-search": "Link to this search", "excel-font": "Arial", - "number": "Nombor", + "number": "Number", "label-colors": "Label Colors", "label-names": "Label Names", "archived-at": "archived at", @@ -1120,16 +1108,15 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", - "creator": "Pencipta", - "creator-on-minicard": "Pencipta pada kad mini", + "creator": "Creator", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1152,27 +1139,27 @@ "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", "subject": "Subject", - "details": "Maklumat", + "details": "Details", "carbon-copy": "Carbon Copy (Cc:)", - "ticket": "Tiket", - "tickets": "Tiket-tiket", - "ticket-number": "Nombor Tiket", - "open": "Dibuka", + "ticket": "Ticket", + "tickets": "Tickets", + "ticket-number": "Ticket Number", + "open": "Open", "pending": "Pending", - "closed": "Ditutup", - "resolved": "Selesai", - "cancelled": "Batalkan", - "history": "Sejarah", + "closed": "Closed", + "resolved": "Resolved", + "cancelled": "Cancelled", + "history": "History", "request": "Request", "requests": "Requests", "help-request": "Help Request", "editCardSortOrderPopup-title": "Change Sorting", - "cardDetailsPopup-title": "Maklumat Kad", - "add-teams": "Tambahkan Kumpulan", + "cardDetailsPopup-title": "Card Details", + "add-teams": "Add teams", "add-teams-label": "Added teams are displayed below:", "remove-team-from-table": "Are you sure you want to remove this team from the board ?", - "confirm-btn": "Sahkan", - "remove-btn": "Hapus", + "confirm-btn": "Confirm", + "remove-btn": "Remove", "filter-card-title-label": "Filter by card title", "invite-people-success": "Invitation to register sent with success", "invite-people-error": "Error while sending invitation to register", @@ -1200,14 +1187,11 @@ "custom-legal-notice-link-url": "Custom legal notice page URL", "acceptance_of_our_legalNotice": "By continuing, you accept our", "legalNotice": "legal notice", - "copied": "Disalin!", + "copied": "Copied!", "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "aturan asal", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1223,21 +1207,21 @@ "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", - "path": "Haluan", - "version-name": "Versi-Nama", - "size": "Saiz", - "storage": "Simpanan", - "action": "Tindakan", - "board-title": "Tajuk Papan", - "attachmentRenamePopup-title": "Namakan Semula", - "uploading": "Memuat Naik", - "remaining_time": "Masa yang tersisa", + "path": "Path", + "version-name": "Version-Name", + "size": "Size", + "storage": "Storage", + "action": "Action", + "board-title": "Board Title", + "attachmentRenamePopup-title": "Rename", + "uploading": "Uploading", + "remaining_time": "Remaining time", "speed": "Speed", - "progress": "Perkembangan", - "password-again": "Kata laluan (semula)", - "if-you-already-have-an-account": "Jika anda sudah mempunyai akaun", - "register": "Daftar", - "forgot-password": "Lupa kata laluan", + "progress": "Progress", + "password-again": "Password (again)", + "if-you-already-have-an-account": "If you already have an account", + "register": "Register", + "forgot-password": "Forgot password", "minicardDetailsActionsPopup-title": "Card Details", "Mongo_sessions_count": "Mongo sessions count", "change-visibility": "Change Visibility", @@ -1253,20 +1237,11 @@ "newTranslationPopup-title": "New custom translation string", "editTranslationPopup-title": "Edit custom translation string", "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Terjemahan", - "text": "Teks", - "translation-text": "Teks terjemahan", + "translation": "Translation", + "text": "Text", + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ms.i18n.json b/imports/i18n/data/ms.i18n.json index 26ff502f0..b98977fae 100644 --- a/imports/i18n/data/ms.i18n.json +++ b/imports/i18n/data/ms.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%spindah kepada Arkib", "activity-attached": "lampirkan %skepada %s", "activity-created": "cipta %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Senarai semak", "click-to-star": "Klik untuk beri bintang", "click-to-unstar": "Klik untuk hapus bintang", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "papanklip atau seret-buang", "close": "Tutup", "close-board": "Tutup Papan", @@ -300,7 +294,6 @@ "color-white": "putih", "color-yellow": "kuning", "unset-color": "tiada tetapan", - "comments": "Comments", "comment": "Komen", "comment-placeholder": "Tulis Komen", "comment-only": "hanya komen", @@ -383,7 +376,6 @@ "email-sent": "Emel dihantar", "email-verifyEmail-subject": "Sila sahkan emel anda di __siteName__", "email-verifyEmail-text": "Salam Sejahtera __user__,\n\nUntuk mengesahkan akaun email anda, hanya perlu klik pautan di bawah.\n\n__url__\n\nTerima kasih.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Hidupkan Had WIP", "error-board-doesNotExist": "Papan tidak wujud", "error-board-notAdmin": "Anda perlu menjadi Admin Papan untuk tindakan itu", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Nama Penuh", "header-logo-title": "Kembali kepada laman Papan", - "show-activities": "Show Activities", + "hide-system-messages": "Sembunyikan Makluman Sistem", "headerBarCreateBoardPopup-title": "Cipta Papan", "home": "Utama", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Pilih Papan", "set-wip-limit-value": "Set had maksimum untuk bilangan tugas pada senarai ini", "setWipLimitPopup-title": "Set had WIP", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Tugaskan diri sendiri pada kad ini.", "shortcut-autocomplete-emoji": "Emoji autolengkap", "shortcut-autocomplete-members": "Ahli autolengkap", "shortcut-clear-filters": "Kosongkan semua tapisan", "shortcut-close-dialog": "Tutup dialog", "shortcut-filter-my-cards": "Tapis kad saya", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Papar senarai pintasan ini", "shortcut-toggle-filterbar": "Togol palang-tepi penapis", "shortcut-toggle-searchbar": "Togol palang-tepi carian", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Ada kad luang masa", "time": "Masa", "title": "Tajuk", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Togol label 1-9 untuk kad. Pelbagai-pilihan tambah label 1-9", "remove-labels-multiselect": "Pelbagai-pilihan buang labem 1-9", "tracking": "Jejak", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Tarikh dicipta (dari yang terbaru)", "created-at-oldest-first": "Tarikh dicipta (dari yang terawal)", "links-heading": "Pautan", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Sembunyikan pesanan sistem untuk semua pengguna", + "now-system-messages-of-all-users-are-hidden": "Sekarang, pesanan sistem untuk semua pengguna disembunyikan.", "move-swimlane": "Pindah aliranrenang", "moveSwimlanePopup-title": "Pindah aliranrenang", "custom-field-stringtemplate": "Templat rentetan", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Pemisah (guna atau   untuk senggang)", "custom-field-stringtemplate-item-placeholder": "Tekan 'enter' untuk tambah lagi item", "creator": "Pencipta", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Laporan Fail", "reports": "Laporan", "rulesReportTitle": "Laporan Peraturan", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Teks", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Buka", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/nb.i18n.json b/imports/i18n/data/nb.i18n.json index e65a1a5df..303c7f8ba 100644 --- a/imports/i18n/data/nb.i18n.json +++ b/imports/i18n/data/nb.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s flyttet til Arkivet", "activity-attached": "la %s til %s", "activity-created": "opprettet %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "Opprettet tilpasset felt%s", "activity-excluded": "ekskludert %s fra %s", "activity-imported": "importert %s til %s fra %s", @@ -86,12 +85,10 @@ "add-card": "Legg til Kort", "add-card-to-top-of-list": "Legg til Kort på Toppen av Listen", "add-card-to-bottom-of-list": "Legg til Kort på Bunnen av Listen", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Sjekklister", "click-to-star": "Favorittmerke Tavlen", "click-to-unstar": "Fjern favorittmerke Tavlen", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Utklippstavle eller Dra og Slipp", "close": "Lukk", "close-board": "Lukk Tavle", @@ -300,7 +294,6 @@ "color-white": "hvit", "color-yellow": "gul", "unset-color": "Slå av", - "comments": "Comments", "comment": "Lagre", "comment-placeholder": "Skriv kommentar", "comment-only": "Kun kommentar", @@ -383,7 +376,6 @@ "email-sent": "E-post sendt", "email-verifyEmail-subject": "Verifiser din e-postadresse på __siteName__", "email-verifyEmail-text": "Hei __user__,\n\nFor å verifisere e-postsdressen din, klikk på lenken under.\n\n__url__\n\nTakk.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Aktiver WIP-begrensning", "error-board-doesNotExist": "Denne tavlen finnes ikke", "error-board-notAdmin": "Du må være administrator for denne tavlen for å gjøre dette", @@ -451,7 +443,7 @@ "advanced-filter-description": "Avansert filter tillater skriving av søkestrenger med følgende operatorer:\n== != <= >= && || ( ) der et mellomrom benyttes som separatorer mellom operatorer.\nDu kan filtrere på alle tilpassede felt ved å skrive navn og verdier, for eksempel: Felt1 == Verdi1. \nMerknad: Dersom felt eller verdier inneholder mellomrom må disse inkluderes innenfor fnuffer, for eksempel; 'Felt 1' == 'Verdi 1'.\nFor å utelate enkelte karakterer (' \\\\/), kan du benytte \\\\. For eksempel: Field1 == I\\\\'m.\nI tillegg kan du kombinere forskjellige operatorer, for eksempel: F1 == V1 || F1 == V2.\nNormalt tolkes alle operatorene fra venstre til høyre. Du kan endre dette ved bruk av paranteser, for eksempel: F1 == V1 && ( F2 == V2 || F2 == V3 ). Videre kan du søke etter tekstfelt ved bruk av Regex, for eksempel: F1 == /Tes.*/i", "fullname": "Fullt navn", "header-logo-title": "Tilbake til dine tavler", - "show-activities": "Show Activities", + "hide-system-messages": "Skjul systemmeldinger", "headerBarCreateBoardPopup-title": "Opprett Tavle", "home": "Hjem", "import": "Importer", @@ -580,14 +572,12 @@ "select-board": "Velg Tavle", "set-wip-limit-value": "Sett maksimalt antall oppgaver i denne listen", "setWipLimitPopup-title": "Sett WIP-begrensning", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Tildel deg selv til dette kortet", "shortcut-autocomplete-emoji": "Autokompletter emoji", "shortcut-autocomplete-members": "Autokompletter medlemmer", "shortcut-clear-filters": "Fjern alle filtre", "shortcut-close-dialog": "Lukk dialogen", "shortcut-filter-my-cards": "Filtrer mine kort", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Ta frem denne snarveilisten", "shortcut-toggle-filterbar": "Aktiver sidefelt for filter", "shortcut-toggle-searchbar": "Aktiver sidefelt for søk", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Kort med forbrukt tid", "time": "Tid", "title": "Tittel", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Sporing", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Du kan ikke slette kortet før du har slettet tillinket kort som har", "delete-linked-cards-before-this-list": "Du kan ikke slette listen før du har slettet kort som er linket til kort i denne listen", "hide-checked-items": "Skjul utførte oppgaver", - "hide-finished-checklist": "Hide finished checklist", "task": "Oppgave", "create-task": "Opprett Oppgave", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Opprettet på (Nyeste Først)", "created-at-oldest-first": "Opprettet på (Eldste Først)", "links-heading": "Lenker", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Skjul systemmeldinger for alle brukere", + "now-system-messages-of-all-users-are-hidden": "Systemmeldinger er nå skjult for alle brukere", "move-swimlane": "Flytt Svømmebane", "moveSwimlanePopup-title": "Flytt Svømmebane", "custom-field-stringtemplate": "Mal Tekststreng", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Tekstseparator (bruk eller   som separator)", "custom-field-stringtemplate-item-placeholder": "Trykk Enter for å legge til flere objekt", "creator": "Oppretter", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Rapportering Filer", "reports": "Rapportering", "rulesReportTitle": "Rapportering Regler", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Sjekkliste aksjoner", "moveChecklist": "Flytt sjekkliste", "moveChecklistPopup-title": "Flytt sjekkliste", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Ny linje gir nytt sjekklisteobjekt", "copyChecklist": "Kopier sjekkliste", "copyChecklistPopup-title": "Kopier sjekkliste", "card-show-lists": "Vis liste over kort", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Tekst", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Slå sammen", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/nl-NL.i18n.json b/imports/i18n/data/nl-NL.i18n.json index 8d31397ed..23ca1be9c 100644 --- a/imports/i18n/data/nl-NL.i18n.json +++ b/imports/i18n/data/nl-NL.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s verplaatst naar Archief", "activity-attached": "%s bijgevoegd aan %s", "activity-created": "%s aangemaakt", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "maatwerkveld aangemaakt %s", "activity-excluded": "%s uitgesloten van %s", "activity-imported": "%s geïmporteerd in %s van %s", @@ -86,12 +85,10 @@ "add-card": "Kaart Toevoegen", "add-card-to-top-of-list": "Kaart Boven Aan de Lijst Toevoegen", "add-card-to-bottom-of-list": "Kaart Onder Aan de Lijst Toevoegen", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Klik om het bord als favoriet in te stellen", "click-to-unstar": "Klik om het bord uit favorieten weg te halen", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Vanuit clipboard of sleep het bestand hierheen", "close": "Sluiten", "close-board": "Sluit bord", @@ -300,7 +294,6 @@ "color-white": "wit", "color-yellow": "geel", "unset-color": "Ongedefinieerd", - "comments": "Comments", "comment": "Aantekening", "comment-placeholder": "Schrijf aantekening", "comment-only": "Alleen aantekeningen maken", @@ -383,7 +376,6 @@ "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 klikken.\n\n__url__\n\nBedankt.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "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.", @@ -451,7 +443,7 @@ "advanced-filter-description": "Met het Geavanceerd Filter kun je een tekst schrijven die de volgende operatoren mag bevatten: == != <= >= && || ( ) Een Spatie wordt als scheiding gebruikt tussen de verschillende operatoren. Je kunt filteren op alle Maatwerkvelden door hun namen en waarden in te tikken. Bijvoorbeeld: Veld1 == Waarde1. Let op: Als velden of waarden spaties bevatten dan moet je die tussen enkele aanhalingstekens zetten. Bijvoorbeeld: 'Veld 1' == 'Waarde 1'. Om controle karakters (' \\\\/) over te slaan gebruik je \\\\. Bijvoorbeeld: Veld1 == I\\\\'m. Je kunt ook meerdere condities combineren. Bijvoorbeeld: F1 == V1 || F1 == V2. Normalerwijze worden alle operatoren van links naar rechts verwerkt. Dit kun je veranderen door ronde haken te gebruiken. Bijvoorbeeld: F1 == V1 && ( F2 == V2 || F2 == V3 ). Je kunt ook met regex in tekstvelden zoeken. Bijvoorbeeld: F1 == /Tes.*/i", "fullname": "Volledige naam", "header-logo-title": "Ga terug naar jouw borden pagina.", - "show-activities": "Show Activities", + "hide-system-messages": "Verberg systeemberichten", "headerBarCreateBoardPopup-title": "Bord aanmaken", "home": "Voorpagina", "import": "Importeer", @@ -580,14 +572,12 @@ "select-board": "Selecteer Bord", "set-wip-limit-value": "Zet een limiet voor het maximaal aantal taken in deze lijst", "setWipLimitPopup-title": "Zet een WIP limiet", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Voeg jezelf toe aan huidige kaart", "shortcut-autocomplete-emoji": "Emojis automatisch aanvullen", "shortcut-autocomplete-members": "Leden automatisch aanvullen", "shortcut-clear-filters": "Wis alle filters", "shortcut-close-dialog": "Sluit dialoog", "shortcut-filter-my-cards": "Filter mijn kaarten", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Haal lijst met snelkoppelingen tevoorschijn", "shortcut-toggle-filterbar": "Schakel Filter Zijbalk in/uit", "shortcut-toggle-searchbar": "Schakel Zoek Zijbalk in/uit", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Heeft tijd besteed aan kaarten", "time": "Tijd", "title": "Titel", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Schakel labels 1-9 in/uit voor kaart. Multi-selectie voegt labels 1-9 toe.", "remove-labels-multiselect": "Multi-selectie verwijderd labels 1-9", "tracking": "Volgen", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Je kunt deze kaart niet verwijderen voordat de gekoppelde kaart is verwijderd", "delete-linked-cards-before-this-list": "Je kunt deze lijst niet verwijderen voordat de gekoppelde kaarten verwijderd zijn die verwijzen naar kaarten in deze lijst", "hide-checked-items": "Verberg aangevinkte items", - "hide-finished-checklist": "Hide finished checklist", "task": "Taak", "create-task": "Taak aanmaken", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Aangemaakt op (Nieuwste Eerst)", "created-at-oldest-first": "Aangemaakt op (Oudste Eerst)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Verberg systeemberichten voor alle gebruikers", + "now-system-messages-of-all-users-are-hidden": "Systeemberichten zijn nu verborgen voor alle gebruikers", "move-swimlane": "Verplaats Swimlane", "moveSwimlanePopup-title": "Verplaats Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Scheidingsteken (gebruik of   voor een spatie)", "custom-field-stringtemplate-item-placeholder": "Druk op Enter om meer items toe te voegen", "creator": "Aangemaakt door", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Bestanden Rapportage", "reports": "Rapportages", "rulesReportTitle": "Regels Rapportage", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist acties", "moveChecklist": "Verplaats Checklist", "moveChecklistPopup-title": "Verplaats Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Nieuwe regel wordt nieuw checklist item", "copyChecklist": "Kopieer Checklist", "copyChecklistPopup-title": "Kopieer Checklist", "card-show-lists": "Kaart Toon Lijsten", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Tekst", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Klap in", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/nl.i18n.json b/imports/i18n/data/nl.i18n.json index b3a46543a..d9c3c3b10 100644 --- a/imports/i18n/data/nl.i18n.json +++ b/imports/i18n/data/nl.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s verplaatst naar Archief", "activity-attached": "%s bijgevoegd aan %s", "activity-created": "%s aangemaakt", - "activity-changedListTitle": "lijst hernoemd naar %s", "activity-customfield-created": "maatwerkveld aangemaakt %s", "activity-excluded": "%s uitgesloten van %s", "activity-imported": "%s geïmporteerd in %s van %s", @@ -86,12 +85,10 @@ "add-card": "Kaart Toevoegen", "add-card-to-top-of-list": "Kaart Boven Aan de Lijst Toevoegen", "add-card-to-bottom-of-list": "Kaart Onder Aan de Lijst Toevoegen", - "setListWidthPopup-title": "Stel Breedte in", - "set-list-width": "Stel Breedte in", - "set-list-width-value": "Stel Min. & Max. Breedtes in (pixels)", - "list-width-error-message": "Lijstbreedte moet minimaal 100 zijn", - "keyboard-shortcuts-enabled": "Sneltoetsen ingeschakeld. Klik om uit te schakelen.", - "keyboard-shortcuts-disabled": "Sneltoetsen uitgeschakeld. Klik om in te schakelen.", + "setListWidthPopup-title": "Stel Lijstbreedte in", + "set-list-width": "Stel Lijstbreedte in", + "set-list-width-value": "Lijstbreedte (pixels)", + "list-width-error-message": "Lijstbreedte moet positief geheel getal zijn", "setSwimlaneHeightPopup-title": "Stel Swimlane-hoogte in", "set-swimlane-height": "Stel Swimlane-hoogte in", "set-swimlane-height-value": "Swimlane-hoogte (pixels)", @@ -178,7 +175,7 @@ "board-view": "Bord overzicht", "board-view-cal": "Kalender", "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Inklappen", + "board-view-collapse": "Klap in", "board-view-gantt": "Gantt", "board-view-lists": "Lijsten", "bucket-example": "Zoals bijvoorbeeld een \"Bucket List\"", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Klik om het bord als favoriet in te stellen", "click-to-unstar": "Klik om het bord uit favorieten weg te halen", - "click-to-enable-auto-width": "Automatische lijstbreedte uitgeschakeld. Klik om in te schakelen.", - "click-to-disable-auto-width": "Automatische lijstbreedte ingeschakeld. Klik om uit te schakelen.", - "auto-list-width": "Automatische lijstbreedte", "clipboard": "Afbeelding Kopiëren & Plakken", "close": "Sluiten", "close-board": "Sluit bord", @@ -300,7 +294,6 @@ "color-white": "wit", "color-yellow": "geel", "unset-color": "Ongedefinieerd", - "comments": "Aantekeningen", "comment": "Aantekening Opslaan", "comment-placeholder": "Schrijf aantekening", "comment-only": "Alleen aantekeningen maken", @@ -383,7 +376,6 @@ "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 klikken.\n\n__url__\n\nBedankt.", - "enable-vertical-scrollbars": "Schakel verticale scrollbars in", "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.", @@ -451,7 +443,7 @@ "advanced-filter-description": "Met het Geavanceerd Filter kun je een tekst schrijven die de volgende operatoren mag bevatten: == != <= >= && || ( ) Een Spatie wordt als scheiding gebruikt tussen de verschillende operatoren. Je kunt filteren op alle Maatwerkvelden door hun namen en waarden in te tikken. Bijvoorbeeld: Veld1 == Waarde1. Let op: Als velden of waarden spaties bevatten dan moet je die tussen enkele aanhalingstekens zetten. Bijvoorbeeld: 'Veld 1' == 'Waarde 1'. Om controle karakters (' \\\\/) over te slaan gebruik je \\\\. Bijvoorbeeld: Veld1 == I\\\\'m. Je kunt ook meerdere condities combineren. Bijvoorbeeld: F1 == V1 || F1 == V2. Normalerwijze worden alle operatoren van links naar rechts verwerkt. Dit kun je veranderen door ronde haken te gebruiken. Bijvoorbeeld: F1 == V1 && ( F2 == V2 || F2 == V3 ). Je kunt ook met regex in tekstvelden zoeken. Bijvoorbeeld: F1 == /Tes.*/i", "fullname": "Volledige naam", "header-logo-title": "Ga terug naar jouw borden pagina.", - "show-activities": "Toon Activiteiten", + "hide-system-messages": "Verberg systeemberichten", "headerBarCreateBoardPopup-title": "Bord aanmaken", "home": "Voorpagina", "import": "Importeer", @@ -580,14 +572,12 @@ "select-board": "Selecteer Bord", "set-wip-limit-value": "Zet een limiet voor het maximaal aantal taken in deze lijst", "setWipLimitPopup-title": "Zet een WIP limiet", - "shortcut-add-self": "Voeg jezelf toe aan huidige kaart", "shortcut-assign-self": "Voeg jezelf toe aan huidige kaart", "shortcut-autocomplete-emoji": "Emojis automatisch aanvullen", "shortcut-autocomplete-members": "Leden automatisch aanvullen", "shortcut-clear-filters": "Wis alle filters", "shortcut-close-dialog": "Sluit dialoog", "shortcut-filter-my-cards": "Filter mijn kaarten", - "shortcut-filter-my-assigned-cards": "Filter op aan mij toegewezen kaarten", "shortcut-show-shortcuts": "Haal lijst met snelkoppelingen tevoorschijn", "shortcut-toggle-filterbar": "Schakel Filter Zijbalk in/uit", "shortcut-toggle-searchbar": "Schakel Zoek Zijbalk in/uit", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Heeft tijd besteed aan kaarten", "time": "Tijd", "title": "Titel", - "toggle-assignees": "Schakel toegewezen personen 1-9 in/uit voor kaart (Op volgorde van toevoegen aan bord).", "toggle-labels": "Schakel labels 1-9 in/uit voor kaart. Multi-selectie voegt labels 1-9 toe.", "remove-labels-multiselect": "Multi-selectie verwijderd labels 1-9", "tracking": "Volgen", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Je kunt deze kaart niet verwijderen voordat de gelinkte kaart is verwijderd", "delete-linked-cards-before-this-list": "Je kunt deze lijst niet verwijderen voordat de gelinkte kaarten verwijderd zijn die verwijzen naar kaarten in deze lijst", "hide-checked-items": "Verberg aangevinkte items", - "hide-finished-checklist": "Verberg afgewerkte checklist", "task": "Taak", "create-task": "Taak aanmaken", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Teams", "displayName": "Schermnaam", "shortName": "Korte naam", - "autoAddUsersWithDomainName": "Voeg automatisch gebruikers toe met de domeinnaam", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Website", "person": "Persoon", "my-cards": "Mijn kaarten", @@ -1025,7 +1013,7 @@ "operator-member-abbrev": "m", "operator-assignee": "toegewezen aan", "operator-assignee-abbrev": "a", - "operator-creator": "gemaakt door", + "operator-creator": "aangemaakt door", "operator-status": "status", "operator-due": "verval", "operator-created": "aangemaakt", @@ -1083,7 +1071,7 @@ "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - afkorting voor `gebruiker:<username>`", "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - kaarten waar *<username>* een *lid* is", "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - kaarten waar *<username>* een *actiehouder* is", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - kaarten die door *<username>* gemaakt zijn", + "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - kaarten die door *<username>* aangemaakt zijn", "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - kaarten behorend bij een bord van organisatie *<name>*", "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - kaarten behorend bij een bord van team *<name>*", "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - kaarten die achterstallig zijn *<n>* dagen vanaf nu. `__operator_due__:__predicate_overdue__ lists alle kaarten nu hun geplande datum.", @@ -1120,16 +1108,15 @@ "created-at-newest-first": "Aangemaakt op (Nieuwste Eerst)", "created-at-oldest-first": "Aangemaakt op (Oudste Eerst)", "links-heading": "Links", - "hide-activities-of-all-boards": "Verberg de bord-activietein op alle borden", - "now-activities-of-all-boards-are-hidden": "Nu zijn alle activiteiten op alle borden verbrorgen", + "hide-system-messages-of-all-users": "Verberg systeemberichten voor alle gebruikers", + "now-system-messages-of-all-users-are-hidden": "Systeemberichten zijn nu verborgen voor alle gebruikers", "move-swimlane": "Verplaats Swimlane", "moveSwimlanePopup-title": "Verplaats Swimlane", "custom-field-stringtemplate": "String Template", "custom-field-stringtemplate-format": "Format (gebruik %{waarde} als tijdelijke aanduiding)", "custom-field-stringtemplate-separator": "Scheidingsteken (gebruik of   voor een spatie)", "custom-field-stringtemplate-item-placeholder": "Druk op Enter om meer items toe te voegen", - "creator": "Gemaakt door", - "creator-on-minicard": "Maker op minikaart", + "creator": "Aangemaakt door", "filesReportTitle": "Bestanden Rapportage", "reports": "Rapportages", "rulesReportTitle": "Regels Rapportage", @@ -1137,7 +1124,7 @@ "cardsReportTitle": "Kaarten Rapportage", "copy-swimlane": "Kopieer Swimlane", "copySwimlanePopup-title": "Kopieer Swimlane", - "display-card-creator": "Toon Maker Kaart", + "display-card-creator": "Toon Aanmaker Kaart", "wait-spinner": "Wacht Spinner", "Bounce": "Stuiterende Wacht Spinner", "Cube": "Kubus Wacht Spinner", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist acties", "moveChecklist": "Verplaats Checklist", "moveChecklistPopup-title": "Verplaats Checklist", - "newlineBecomesNewChecklistItem": "Elke regel tekst wordt een checklist item", - "newLineNewItem": "Eén regel tekst = één checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Elke regel tekst wordt één van de checklist items, op volgorde van invoeren", - "originOrder": "volgorde van invoeren", + "newlineBecomesNewChecklistItem": "Nieuwe regel wordt nieuw checklist item", "copyChecklist": "Kopieer Checklist", "copyChecklistPopup-title": "Kopieer Checklist", "card-show-lists": "Kaart Toon Lijsten", @@ -1256,17 +1240,8 @@ "translation": "Vertaling", "text": "Tekst", "translation-text": "Te vertalen tekst", + "show-at-minicard": "Toon op minikaart", + "show-checklist-at-minicard": "Toon checklist op minikaart", "show-subtasks-field": "Toon subtakenveld", - "show-week-of-year": "Toon weeknummers (ISO 8601)", - "convert-to-markdown": "Converteer naar markdown", - "import-board-zip": "Voeg .zip bestand toe met bord JSON bestanden, en bordnaam subdirectories met bijlagen.", - "collapse": "Inklappen", - "uncollapse": "Uitklappen", - "hideCheckedChecklistItems": "Verberg aangevinkte checklist items", - "hideAllChecklistItems": "Verberg alle checklist items", - "support": "Ondersteuning", - "supportPopup-title": "Ondersteuning", - "accessibility-page-enabled": "Toegankelijkheidspagina ingeschakeld", - "accessibility-title": "Toegankelijkheid onderwerp", - "accessibility-content": "Toegankelijkheid inhoud" + "convert-to-markdown": "Converteer naar markdown" } diff --git a/imports/i18n/data/oc.i18n.json b/imports/i18n/data/oc.i18n.json index cedf7a7d2..43246322f 100644 --- a/imports/i18n/data/oc.i18n.json +++ b/imports/i18n/data/oc.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s desplaçat cap a Archius", "activity-attached": "as ligat %s a %s", "activity-created": "as creat %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "as creat lo camp personalizat %s", "activity-excluded": "as exclús %s de %s", "activity-imported": "as importat %s cap a %s dempuèi %s", @@ -86,12 +85,10 @@ "add-card": "Apondre una carta", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Apondre lo tablèu als favorits", "click-to-unstar": "Quitar lo tablèu dels favorits", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Copiar o far limpar", "close": "Tampar", "close-board": "Tampar lo tablèu", @@ -300,7 +294,6 @@ "color-white": "blanc", "color-yellow": "jaune", "unset-color": "pas reglat", - "comments": "Comments", "comment": "Comentari", "comment-placeholder": "Escrire un comentari", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "email-sent": "Mail mandat", "email-verifyEmail-subject": "Vos cal verificar vòstra adreça corrièl del sit __siteName__", "email-verifyEmail-text": "Adieu __user__,\n\nPer verificar vòstra adreça corrièl, vos cal clicar sul ligam :\n\n__url__\n\nMercé.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Activar la WIP limit", "error-board-doesNotExist": "Aqueste tablèu existís pas", "error-board-notAdmin": "Devètz èsser un administrator del tablèu per far aquò", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Nom complet", "header-logo-title": "Retorn a vòstra pagina de tablèus", - "show-activities": "Show Activities", + "hide-system-messages": "Amagar los messatges sistèm", "headerBarCreateBoardPopup-title": "Crear un tablèu", "home": "Acuèlh", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Assign yourself to current card", "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Autocomplete members", "shortcut-clear-filters": "Clear all filters", "shortcut-close-dialog": "Tampar lo dialòg", "shortcut-filter-my-cards": "Filter my cards", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Temps", "title": "Títol", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Tèxte", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/or_IN.i18n.json b/imports/i18n/data/or_IN.i18n.json deleted file mode 100644 index 78b62d375..000000000 --- a/imports/i18n/data/or_IN.i18n.json +++ /dev/null @@ -1,1272 +0,0 @@ -{ - "accept": "Accept", - "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "created board __board__", - "act-createSwimlane": "created swimlane __swimlane__ to board __board__", - "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-createCustomField": "created custom field __customField__ at board __board__", - "act-deleteCustomField": "deleted custom field __customField__ at board __board__", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createList": "added list __list__ to board __board__", - "act-addBoardMember": "added member __member__ to board __board__", - "act-archivedBoard": "Board __board__ moved to Archive", - "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", - "act-importBoard": "imported board __board__", - "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", - "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", - "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-removeBoardMember": "removed member __member__ from board __board__", - "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-withBoardTitle": "__board__", - "act-withCardTitle": "[__board__] __card__", - "actions": "Actions", - "activities": "Activities", - "activity": "Activity", - "activity-added": "added %s to %s", - "activity-archived": "%s moved to Archive", - "activity-attached": "attached %s to %s", - "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", - "activity-customfield-created": "created custom field %s", - "activity-excluded": "excluded %s from %s", - "activity-imported": "imported %s into %s from %s", - "activity-imported-board": "imported %s from %s", - "activity-joined": "joined %s", - "activity-moved": "moved %s from %s to %s", - "activity-on": "on %s", - "activity-removed": "removed %s from %s", - "activity-sent": "sent %s to %s", - "activity-unjoined": "unjoined %s", - "activity-subtask-added": "added subtask to %s", - "activity-checked-item": "checked %s in checklist %s of %s", - "activity-unchecked-item": "unchecked %s in checklist %s of %s", - "activity-checklist-added": "added checklist to %s", - "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist %s of %s", - "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", - "activity-checklist-item-added": "added checklist item to '%s' in %s", - "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", - "add": "Add", - "activity-checked-item-card": "checked %s in checklist %s", - "activity-unchecked-item-card": "unchecked %s in checklist %s", - "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "activity-checklist-uncompleted-card": "uncompleted the checklist %s", - "activity-editComment": "edited comment %s", - "activity-deleteComment": "deleted comment %s", - "activity-receivedDate": "edited received date to %s of %s", - "activity-startDate": "edited start date to %s of %s", - "activity-dueDate": "edited due date to %s of %s", - "activity-endDate": "edited end date to %s of %s", - "add-attachment": "Add Attachment", - "add-board": "Add Board", - "add-template": "Add Template", - "add-card": "Add Card", - "add-card-to-top-of-list": "Add Card to Top of List", - "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Set Swimlane Height", - "set-swimlane-height": "Set Swimlane Height", - "set-swimlane-height-value": "Swimlane Height (pixels)", - "swimlane-height-error-message": "Swimlane height must be a positive integer", - "add-swimlane": "Add Swimlane", - "add-subtask": "Add Subtask", - "add-checklist": "Add Checklist", - "add-checklist-item": "Add an item to checklist", - "close-add-checklist-item": "Close add an item to checklist form", - "close-edit-checklist-item": "Close edit an item to checklist form", - "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "Add cover image to minicard", - "add-label": "Add Label", - "add-list": "Add List", - "add-after-list": "Add After List", - "add-members": "Add Members", - "added": "Added", - "addMemberPopup-title": "Members", - "memberPopup-title": "Member Settings", - "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", - "app-try-reconnect": "Try to reconnect.", - "archive": "Move to Archive", - "archive-all": "Move All to Archive", - "archive-board": "Move Board to Archive", - "archive-card": "Move Card to Archive", - "archive-list": "Move List to Archive", - "archive-swimlane": "Move Swimlane to Archive", - "archive-selection": "Move selection to Archive", - "archiveBoardPopup-title": "Move Board to Archive?", - "archived-items": "Archive", - "archived-boards": "Boards in Archive", - "restore-board": "Restore Board", - "no-archived-boards": "No Boards in Archive.", - "archives": "Archive", - "template": "Template", - "templates": "Templates", - "template-container": "Template Container", - "add-template-container": "Add Template Container", - "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 (__size__ max)", - "back": "Back", - "board-change-color": "Change color", - "board-change-background-image": "Change Background Image", - "board-background-image-url": "Background Image URL", - "add-background-image": "Add Background Image", - "remove-background-image": "Remove Background Image", - "show-at-all-boards-page" : "Show at All Boards page", - "board-info-on-my-boards" : "All Boards Settings", - "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", - "boardInfoOnMyBoards-title": "All Boards Settings", - "show-card-counter-per-list": "Show card count per list", - "show-board_members-avatar": "Show Board members avatars", - "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>.", - "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", - "boardChangeColorPopup-title": "Change Board Background", - "boardChangeBackgroundImagePopup-title": "Change Background Image", - "allBoardsChangeColorPopup-title": "Change color", - "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", - "boardChangeTitlePopup-title": "Rename Board", - "boardChangeVisibilityPopup-title": "Change Visibility", - "boardChangeWatchPopup-title": "Change Watch", - "boardMenuPopup-title": "Board Settings", - "allBoardsMenuPopup-title": "Settings", - "boardChangeViewPopup-title": "Board View", - "boards": "Boards", - "board-view": "Board View", - "board-view-cal": "Calendar", - "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Collapse", - "board-view-gantt": "Gantt", - "board-view-lists": "Lists", - "bucket-example": "Like “Bucket List” for example", - "cancel": "Cancel", - "card-archived": "This card is moved to Archive.", - "board-archived": "This board is moved to Archive.", - "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 move a card to Archive to remove it from the board and preserve the activity.", - "card-archive-pop": "Card will not be visible at this list after archiving card.", - "card-archive-suggest-cancel": "You can later restore card from Archive.", - "card-due": "Due", - "card-due-on": "Due on", - "card-spent": "Spent Time", - "card-edit-attachments": "Edit attachments", - "card-edit-custom-fields": "Edit custom fields", - "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", - "cardCustomField-datePopup-title": "Change date", - "cardCustomFieldsPopup-title": "Edit custom fields", - "cardStartVotingPopup-title": "Start a vote", - "positiveVoteMembersPopup-title": "Proponents", - "negativeVoteMembersPopup-title": "Opponents", - "card-edit-voting": "Edit voting", - "editVoteEndDatePopup-title": "Change vote end date", - "allowNonBoardMembers": "Allow all logged in users", - "vote-question": "Voting question", - "vote-public": "Show who voted what", - "vote-for-it": "for it", - "vote-against": "against", - "deleteVotePopup-title": "Delete vote?", - "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", - "cardStartPlanningPokerPopup-title": "Start a Planning Poker", - "card-edit-planning-poker": "Edit Planning Poker", - "editPokerEndDatePopup-title": "Change Planning Poker vote end date", - "poker-question": "Planning Poker", - "poker-one": "1", - "poker-two": "2", - "poker-three": "3", - "poker-five": "5", - "poker-eight": "8", - "poker-thirteen": "13", - "poker-twenty": "20", - "poker-forty": "40", - "poker-oneHundred": "100", - "poker-unsure": "?", - "poker-finish": "Finish", - "poker-result-votes": "Votes", - "poker-result-who": "Who", - "poker-replay": "Replay", - "set-estimation": "Set Estimation", - "deletePokerPopup-title": "Delete planning poker?", - "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", - "cardDeletePopup-title": "Delete Card?", - "cardArchivePopup-title": "Archive Card?", - "cardDetailsActionsPopup-title": "Card Actions", - "cardLabelsPopup-title": "Labels", - "cardMembersPopup-title": "Members", - "cardMorePopup-title": "More", - "cardTemplatePopup-title": "Create template", - "cards": "Cards", - "cards-count": "Cards", - "cards-count-one": "Card", - "casSignIn": "Sign In with CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", - "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", - "subtasks": "Subtasks", - "checklists": "Checklists", - "click-to-star": "Click to star this board.", - "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", - "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 “Archive” button from the home header.", - "close-card": "Close Card", - "color-black": "black", - "color-blue": "blue", - "color-crimson": "crimson", - "color-darkgreen": "darkgreen", - "color-gold": "gold", - "color-gray": "gray", - "color-green": "green", - "color-indigo": "indigo", - "color-lime": "lime", - "color-magenta": "magenta", - "color-mistyrose": "mistyrose", - "color-navy": "navy", - "color-orange": "orange", - "color-paleturquoise": "paleturquoise", - "color-peachpuff": "peachpuff", - "color-pink": "pink", - "color-plum": "plum", - "color-purple": "purple", - "color-red": "red", - "color-saddlebrown": "saddlebrown", - "color-silver": "silver", - "color-sky": "sky", - "color-slateblue": "slateblue", - "color-white": "white", - "color-yellow": "yellow", - "unset-color": "Unset", - "comments": "Comments", - "comment": "Comment", - "comment-placeholder": "Write Comment", - "comment-only": "Comment only", - "comment-only-desc": "Can comment on cards only.", - "comment-delete": "Are you sure you want to delete the comment?", - "deleteCommentPopup-title": "Delete comment?", - "no-comments": "No comments", - "no-comments-desc": "Can not see comments and activities.", - "worker": "Worker", - "worker-desc": "Can only move cards, assign itself to card and comment.", - "computer": "Computer", - "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", - "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", - "subtaskDeletePopup-title": "Delete Subtask?", - "checklistDeletePopup-title": "Delete Checklist?", - "copy-card-link-to-clipboard": "Copy card link to clipboard", - "copy-text-to-clipboard": "Copy text to clipboard", - "linkCardPopup-title": "Link Card", - "searchElementPopup-title": "Search", - "copyCardPopup-title": "Copy Card", - "copyManyCardsPopup-title": "Copy Template to Many Cards", - "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", - "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", - "create": "Create", - "createBoardPopup-title": "Create Board", - "chooseBoardSourcePopup-title": "Import board", - "createLabelPopup-title": "Create Label", - "createCustomField": "Create Field", - "createCustomFieldPopup-title": "Create Field", - "current": "current", - "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", - "custom-field-checkbox": "Checkbox", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", - "custom-field-date": "Date", - "custom-field-dropdown": "Dropdown List", - "custom-field-dropdown-none": "(none)", - "custom-field-dropdown-options": "List Options", - "custom-field-dropdown-options-placeholder": "Press enter to add more options", - "custom-field-dropdown-unknown": "(unknown)", - "custom-field-number": "Number", - "custom-field-text": "Text", - "custom-fields": "Custom Fields", - "date": "Date", - "decline": "Decline", - "default-avatar": "Default avatar", - "delete": "Delete", - "deleteCustomFieldPopup-title": "Delete Custom Field?", - "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", - "editCustomFieldPopup-title": "Edit Field", - "addReactionPopup-title": "Add reaction", - "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-vertical-scrollbars": "Enable vertical scrollbars", - "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-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) 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-orgname-taken": "This organization name is already taken", - "error-teamname-taken": "This team name is already taken", - "error-email-taken": "Email has already been taken", - "export-board": "Export board", - "export-board-json": "Export board to JSON", - "export-board-csv": "Export board to CSV", - "export-board-tsv": "Export board to TSV", - "export-board-excel": "Export board to Excel", - "user-can-not-export-excel": "User can not export Excel", - "export-board-html": "Export board to HTML", - "export-card": "Export card", - "export-card-pdf": "Export card to PDF", - "user-can-not-export-card-to-pdf": "User can not export card to PDF", - "exportBoardPopup-title": "Export board", - "exportCardPopup-title": "Export card", - "sort": "Sort", - "sorted": "Sorted", - "remove-sort": "Remove sort", - "sort-desc": "Click to Sort List", - "list-sort-by": "Sort the List By:", - "list-label-modifiedAt": "Last Access Time", - "list-label-title": "Name of the List", - "list-label-sort": "Your Manual Order", - "list-label-short-modifiedAt": "(L)", - "list-label-short-title": "(N)", - "list-label-short-sort": "(M)", - "filter": "Filter", - "filter-cards": "Filter Cards or Lists", - "filter-dates-label": "Filter by date", - "filter-no-due-date": "No due date", - "filter-overdue": "Overdue", - "filter-due-today": "Due today", - "filter-due-this-week": "Due this week", - "filter-due-next-week": "Due next week", - "filter-due-tomorrow": "Due tomorrow", - "list-filter-label": "Filter List by Title", - "filter-clear": "Clear filter", - "filter-labels-label": "Filter by label", - "filter-no-label": "No label", - "filter-member-label": "Filter by member", - "filter-no-member": "No member", - "filter-assignee-label": "Filter by assignee", - "filter-no-assignee": "No assignee", - "filter-custom-fields-label": "Filter by Custom Fields", - "filter-no-custom-fields": "No Custom Fields", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", - "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", - "other-filters-label": "Other Filters", - "advanced-filter-label": "Advanced Filter", - "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", - "fullname": "Full Name", - "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", - "headerBarCreateBoardPopup-title": "Create Board", - "home": "Home", - "import": "Import", - "impersonate-user": "Impersonate user", - "link": "Link", - "import-board": "import board", - "import-board-c": "Import board", - "import-board-title-trello": "Import board from Trello", - "import-board-title-wekan": "Import board from previous export", - "import-board-title-csv": "Import board from CSV/TSV", - "from-trello": "From Trello", - "from-wekan": "From previous export", - "from-csv": "From CSV/TSV", - "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", - "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", - "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", - "import-json-placeholder": "Paste your valid JSON data here", - "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", - "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", - "import-show-user-mapping": "Review members mapping", - "import-user-select": "Pick your existing user you want to use as this member", - "importMapMembersAddPopup-title": "Select member", - "info": "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": "Move all cards in this list to Archive", - "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", - "list-move-cards": "Move all cards in this list", - "list-select-cards": "Select all cards in this list", - "set-color-list": "Set Color", - "listActionPopup-title": "List Actions", - "settingsUserPopup-title": "User Settings", - "settingsTeamPopup-title": "Team Settings", - "settingsOrgPopup-title": "Organization Settings", - "swimlaneActionPopup-title": "Swimlane Actions", - "swimlaneAddPopup-title": "Add a Swimlane below", - "listImportCardPopup-title": "Import a Trello card", - "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", - "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 move a list to Archive to remove it from the board and preserve the activity.", - "lists": "Lists", - "swimlanes": "Swimlanes", - "log-out": "Log Out", - "log-in": "Log In", - "loginPopup-title": "Log In", - "memberMenuPopup-title": "Member Settings", - "members": "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-label": "Set label for selection", - "multi-selection-member": "Set member for 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 cards in Archive.", - "no-archived-lists": "No lists in Archive.", - "no-archived-swimlanes": "No swimlanes in Archive.", - "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 creator 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 image from minicard", - "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", - "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", - "rescue-card-description-dialogue": "Overwrite current card description with your changes?", - "save": "Save", - "search": "Search", - "rules": "Rules", - "search-cards": "Search from card/list titles, descriptions and custom fields on this board", - "search-example": "Write text you search and press Enter", - "select-color": "Select Color", - "select-board": "Select Board", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", - "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-filter-my-assigned-cards": "Filter my assigned cards", - "shortcut-show-shortcuts": "Bring up this shortcuts list", - "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-searchbar": "Toggle Search 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", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", - "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", - "remove-labels-multiselect": "Multi-Selection removes labels 1-9", - "tracking": "Tracking", - "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", - "type": "Type", - "unassign-member": "Unassign member", - "unsaved-description": "You have an unsaved description.", - "unwatch": "Unwatch", - "upload": "Upload", - "upload-avatar": "Upload an avatar", - "uploaded-avatar": "Uploaded an avatar", - "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", - "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", - "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", - "custom-login-logo-image-url": "Custom Login Logo Image URL", - "custom-login-logo-link-url": "Custom Login Logo Link URL", - "custom-help-link-url": "Custom Help Link URL", - "text-below-custom-login-logo": "Text below Custom Login Logo", - "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", - "username": "Username", - "import-usernames": "Import Usernames", - "view-it": "View it", - "warn-list-archived": "warning: this card is in an list at Archive", - "watch": "Watch", - "watching": "Watching", - "watching-info": "You will be notified of any change in this board", - "welcome-board": "Welcome Board", - "welcome-swimlane": "Milestone 1", - "welcome-list1": "Basics", - "welcome-list2": "Advanced", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", - "what-to-do": "What do you want to do?", - "wipLimitErrorPopup-title": "Invalid WIP Limit", - "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", - "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", - "admin-panel": "Admin Panel", - "settings": "Settings", - "people": "People", - "registration": "Registration", - "disable-self-registration": "Disable Self-Registration", - "disable-forgot-password": "Disable Forgot Password", - "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", - "email-smtp-test-subject": "SMTP Test Email", - "email-smtp-test-text": "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.", - "webhook-title": "Webhook Name", - "webhook-token": "Token (Optional for Authentication)", - "outgoing-webhooks": "Outgoing Webhooks", - "bidirectional-webhooks": "Two-Way Webhooks", - "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "Card Title Filter", - "disable-webhook": "Disable This Webhook", - "global-webhook": "Global Webhooks", - "new-outgoing-webhook": "New Outgoing Webhook", - "no-name": "(Unknown)", - "Node_version": "Node version", - "Meteor_version": "Meteor version", - "MongoDB_version": "MongoDB version", - "MongoDB_storage_engine": "MongoDB storage engine", - "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", - "OS_Arch": "OS Arch", - "OS_Cpus": "OS CPU Count", - "OS_Freemem": "OS Free Memory", - "OS_Loadavg": "OS Load Average", - "OS_Platform": "OS Platform", - "OS_Release": "OS Release", - "OS_Totalmem": "OS Total Memory", - "OS_Type": "OS Type", - "OS_Uptime": "OS Uptime", - "days": "days", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "show-field-on-card": "Show this field on card", - "automatically-field-on-card": "Add field to new cards", - "always-field-on-card": "Add field to all cards", - "showLabel-field-on-card": "Show field label on minicard", - "showSum-field-on-list": "Show sum of fields at top of list", - "yes": "Yes", - "no": "No", - "accounts": "Accounts", - "accounts-allowEmailChange": "Allow Email Change", - "accounts-allowUserNameChange": "Allow Username Change", - "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", - "tableVisibilityMode" : "Boards visibility", - "createdAt": "Created at", - "modifiedAt": "Modified at", - "verified": "Verified", - "active": "Active", - "card-received": "Received", - "card-received-on": "Received on", - "card-end": "End", - "card-end-on": "Ends on", - "editCardReceivedDatePopup-title": "Change received date", - "editCardEndDatePopup-title": "Change end date", - "setCardColorPopup-title": "Set color", - "setCardActionsColorPopup-title": "Choose a color", - "setSwimlaneColorPopup-title": "Choose a color", - "setListColorPopup-title": "Choose a color", - "assigned-by": "Assigned By", - "requested-by": "Requested By", - "card-sorting-by-number": "Card sorting by number", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "defaultdefault": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "card-settings": "Card Settings", - "minicard-settings": "Minicard Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "boardCardSettingsPopup-title": "Card Settings", - "boardMinicardSettingsPopup-title": "Minicard Settings", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", - "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "Cover image on minicard", - "badge-attachment-on-minicard": "Count of attachments on minicard", - "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent", - "activity-added-label": "added label '%s' to %s", - "activity-removed-label": "removed label '%s' from %s", - "activity-delete-attach": "deleted an attachment from %s", - "activity-added-label-card": "added label '%s'", - "activity-removed-label-card": "removed label '%s'", - "activity-delete-attach-card": "deleted an attachment", - "activity-set-customfield": "set custom field '%s' to '%s' in %s", - "activity-unset-customfield": "unset custom field '%s' in %s", - "r-rule": "Rule", - "r-add-trigger": "Add trigger", - "r-add-action": "Add action", - "r-board-rules": "Board rules", - "r-add-rule": "Add rule", - "r-view-rule": "View rule", - "r-delete-rule": "Delete rule", - "r-new-rule-name": "New rule title", - "r-no-rules": "No rules", - "r-trigger": "Trigger", - "r-action": "Action", - "r-when-a-card": "When a card", - "r-is": "is", - "r-is-moved": "is moved", - "r-added-to": "Added to", - "r-removed-from": "Removed from", - "r-the-board": "the board", - "r-list": "list", - "set-filter": "Set Filter", - "r-moved-to": "Moved to", - "r-moved-from": "Moved from", - "r-archived": "Moved to Archive", - "r-unarchived": "Restored from Archive", - "r-a-card": "a card", - "r-when-a-label-is": "When a label is", - "r-when-the-label": "When the label", - "r-list-name": "list name", - "r-when-a-member": "When a member is", - "r-when-the-member": "When the member", - "r-name": "name", - "r-when-a-attach": "When an attachment", - "r-when-a-checklist": "When a checklist is", - "r-when-the-checklist": "When the checklist", - "r-completed": "Completed", - "r-made-incomplete": "Made incomplete", - "r-when-a-item": "When a checklist item is", - "r-when-the-item": "When the checklist item", - "r-checked": "Checked", - "r-unchecked": "Unchecked", - "r-move-card-to": "Move card to", - "r-top-of": "Top of", - "r-bottom-of": "Bottom of", - "r-its-list": "its list", - "r-archive": "Move to Archive", - "r-unarchive": "Restore from Archive", - "r-card": "card", - "r-add": "Add", - "r-remove": "Remove", - "r-label": "label", - "r-member": "member", - "r-remove-all": "Remove all members from the card", - "r-set-color": "Set color to", - "r-checklist": "checklist", - "r-check-all": "Check all", - "r-uncheck-all": "Uncheck all", - "r-items-check": "items of checklist", - "r-check": "Check", - "r-uncheck": "Uncheck", - "r-item": "item", - "r-of-checklist": "of checklist", - "r-send-email": "Send an email", - "r-to": "to", - "r-of": "of", - "r-subject": "subject", - "r-rule-details": "Rule details", - "r-d-move-to-top-gen": "Move card to top of its list", - "r-d-move-to-top-spec": "Move card to top of list", - "r-d-move-to-bottom-gen": "Move card to bottom of its list", - "r-d-move-to-bottom-spec": "Move card to bottom of list", - "r-d-send-email": "Send email", - "r-d-send-email-to": "to", - "r-d-send-email-subject": "subject", - "r-d-send-email-message": "message", - "r-d-archive": "Move card to Archive", - "r-d-unarchive": "Restore card from Archive", - "r-d-add-label": "Add label", - "r-d-remove-label": "Remove label", - "r-create-card": "Create new card", - "r-in-list": "in list", - "r-in-swimlane": "in swimlane", - "r-d-add-member": "Add member", - "r-d-remove-member": "Remove member", - "r-d-remove-all-member": "Remove all member", - "r-d-check-all": "Check all items of a list", - "r-d-uncheck-all": "Uncheck all items of a list", - "r-d-check-one": "Check item", - "r-d-uncheck-one": "Uncheck item", - "r-d-check-of-list": "of checklist", - "r-d-add-checklist": "Add checklist", - "r-d-remove-checklist": "Remove checklist", - "r-by": "by", - "r-add-checklist": "Add checklist", - "r-with-items": "with items", - "r-items-list": "item1,item2,item3", - "r-add-swimlane": "Add swimlane", - "r-swimlane-name": "swimlane name", - "r-board-note": "Note: leave a field empty to match every possible value. ", - "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", - "r-when-a-card-is-moved": "When a card is moved to another list", - "r-set": "Set", - "r-update": "Update", - "r-datefield": "date field", - "r-df-start-at": "start", - "r-df-due-at": "due", - "r-df-end-at": "end", - "r-df-received-at": "received", - "r-to-current-datetime": "to current date/time", - "r-remove-value-from": "Remove value from", - "r-link-card": "Link card to", - "ldap": "LDAP", - "oauth2": "OAuth2", - "cas": "CAS", - "authentication-method": "Authentication method", - "authentication-type": "Authentication type", - "custom-product-name": "Custom Product Name", - "layout": "Layout", - "hide-logo": "Hide Logo", - "hide-card-counter-list": "Hide card counter list on All Boards", - "hide-board-member-list": "Hide board member list on All Boards", - "add-custom-html-after-body-start": "Add Custom HTML after <body> start", - "add-custom-html-before-body-end": "Add Custom HTML before </body> end", - "error-undefined": "Something went wrong", - "error-ldap-login": "An error occurred while trying to login", - "display-authentication-method": "Display Authentication Method", - "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Board", - "org-number": "The number of organizations is: ", - "team-number": "The number of teams is: ", - "people-number": "The number of people is: ", - "swimlaneDeletePopup-title": "Delete Swimlane ?", - "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", - "restore-all": "Restore all", - "delete-all": "Delete all", - "loading": "Loading, please wait.", - "previous_as": "last time was", - "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", - "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", - "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", - "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", - "a-dueAt": "modified due time to be", - "a-endAt": "modified ending time to be", - "a-startAt": "modified starting time to be", - "a-receivedAt": "modified received time to be", - "almostdue": "current due time %s is approaching", - "pastdue": "current due time %s is past", - "duenow": "current due time %s is today", - "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", - "act-withDue": "__list__/__card__ due reminders [__board__]", - "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", - "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", - "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", - "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", - "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.", - "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", - "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", - "accounts-allowUserDelete": "Allow users to self delete their account", - "hide-minicard-label-text": "Hide minicard label text", - "show-desktop-drag-handles": "Show desktop drag handles", - "assignee": "Assignee", - "cardAssigneesPopup-title": "Assignee", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card", - "show-on-minicard": "Show on Minicard", - "new": "New", - "editOrgPopup-title": "Edit Organization", - "newOrgPopup-title": "New Organization", - "editTeamPopup-title": "Edit Team", - "newTeamPopup-title": "New Team", - "editUserPopup-title": "Edit User", - "newUserPopup-title": "New User", - "notifications": "Notifications", - "help": "Help", - "view-all": "View All", - "filter-by-unread": "Filter by Unread", - "mark-all-as-read": "Mark all as read", - "remove-all-read": "Remove all read", - "allow-rename": "Allow Rename", - "allowRenamePopup-title": "Allow Rename", - "start-day-of-week": "Set day of the week start", - "monday": "Monday", - "tuesday": "Tuesday", - "wednesday": "Wednesday", - "thursday": "Thursday", - "friday": "Friday", - "saturday": "Saturday", - "sunday": "Sunday", - "status": "Status", - "swimlane": "Swimlane", - "owner": "Owner", - "last-modified-at": "Last modified at", - "last-activity": "Last activity", - "voting": "Voting", - "archived": "Archived", - "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", - "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", - "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", - "task": "Task", - "create-task": "Create Task", - "ok": "OK", - "organizations": "Organizations", - "teams": "Teams", - "displayName": "Display Name", - "shortName": "Short Name", - "autoAddUsersWithDomainName": "Automatically add users with the domain name", - "website": "Website", - "person": "Person", - "my-cards": "My Cards", - "card": "Card", - "list": "List", - "board": "Board", - "context-separator": "/", - "myCardsViewChange-title": "My Cards View", - "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "Boards", - "myCardsViewChange-choice-table": "Table", - "myCardsSortChange-title": "My Cards Sort", - "myCardsSortChangePopup-title": "My Cards Sort", - "myCardsSortChange-choice-board": "By Board", - "myCardsSortChange-choice-dueat": "By Due Date", - "dueCards-title": "Due Cards", - "dueCardsViewChange-title": "Due Cards View", - "dueCardsViewChangePopup-title": "Due Cards View", - "dueCardsViewChange-choice-me": "Me", - "dueCardsViewChange-choice-all": "All Users", - "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", - "broken-cards": "Broken Cards", - "board-title-not-found": "Board '%s' not found.", - "swimlane-title-not-found": "Swimlane '%s' not found.", - "list-title-not-found": "List '%s' not found.", - "label-not-found": "Label '%s' not found.", - "label-color-not-found": "Label color %s not found.", - "user-username-not-found": "Username '%s' not found.", - "comment-not-found": "Card with comment containing text '%s' not found.", - "org-name-not-found": "Organization '%s' not found.", - "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "Search All Boards", - "no-cards-found": "No Cards Found", - "one-card-found": "One Card Found", - "n-cards-found": "%s Cards Found", - "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "board", - "operator-board-abbrev": "b", - "operator-swimlane": "swimlane", - "operator-swimlane-abbrev": "s", - "operator-list": "list", - "operator-list-abbrev": "l", - "operator-label": "label", - "operator-label-abbrev": "#", - "operator-user": "user", - "operator-user-abbrev": "@", - "operator-member": "member", - "operator-member-abbrev": "m", - "operator-assignee": "assignee", - "operator-assignee-abbrev": "a", - "operator-creator": "creator", - "operator-status": "status", - "operator-due": "due", - "operator-created": "created", - "operator-modified": "modified", - "operator-sort": "sort", - "operator-comment": "comment", - "operator-has": "has", - "operator-limit": "limit", - "operator-debug": "debug", - "operator-org": "org", - "operator-team": "team", - "predicate-archived": "archived", - "predicate-open": "open", - "predicate-ended": "ended", - "predicate-all": "all", - "predicate-overdue": "overdue", - "predicate-week": "week", - "predicate-month": "month", - "predicate-quarter": "quarter", - "predicate-year": "year", - "predicate-due": "due", - "predicate-modified": "modified", - "predicate-created": "created", - "predicate-attachment": "attachment", - "predicate-description": "description", - "predicate-checklist": "checklist", - "predicate-start": "start", - "predicate-end": "end", - "predicate-assignee": "assignee", - "predicate-member": "member", - "predicate-public": "public", - "predicate-private": "private", - "predicate-selector": "selector", - "predicate-projection": "projection", - "operator-unknown-error": "%s is not an operator", - "operator-number-expected": "operator __operator__ expected a number, got '__value__'", - "operator-sort-invalid": "sort of '%s' is invalid", - "operator-status-invalid": "'%s' is not a valid status", - "operator-has-invalid": "%s is not a valid existence check", - "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", - "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "Next Page", - "previous-page": "Previous Page", - "heading-notes": "Notes", - "globalSearch-instructions-heading": "Search Instructions", - "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", - "globalSearch-instructions-operators": "Available operators:", - "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", - "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", - "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", - "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", - "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", - "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", - "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", - "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", - "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", - "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", - "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", - "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", - "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", - "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", - "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", - "globalSearch-instructions-notes-1": "Multiple operators may be specified.", - "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", - "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", - "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", - "globalSearch-instructions-notes-4": "Text searches are case insensitive.", - "globalSearch-instructions-notes-5": "By default archived cards are not searched.", - "link-to-search": "Link to this search", - "excel-font": "Arial", - "number": "Number", - "label-colors": "Label Colors", - "label-names": "Label Names", - "archived-at": "archived at", - "sort-cards": "Sort Cards", - "sort-is-on": "Sort is on", - "cardsSortPopup-title": "Sort Cards", - "due-date": "Due Date", - "server-error": "Server Error", - "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", - "title-alphabetically": "Title (Alphabetically)", - "created-at-newest-first": "Created At (Newest First)", - "created-at-oldest-first": "Created At (Oldest First)", - "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", - "move-swimlane": "Move Swimlane", - "moveSwimlanePopup-title": "Move Swimlane", - "custom-field-stringtemplate": "String Template", - "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", - "custom-field-stringtemplate-separator": "Separator (use or   for a space)", - "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", - "creator": "Creator", - "creator-on-minicard": "Creator on minicard", - "filesReportTitle": "Files Report", - "reports": "Reports", - "rulesReportTitle": "Rules Report", - "boardsReportTitle": "Boards Report", - "cardsReportTitle": "Cards Report", - "copy-swimlane": "Copy Swimlane", - "copySwimlanePopup-title": "Copy Swimlane", - "display-card-creator": "Display Card Creator", - "wait-spinner": "Wait Spinner", - "Bounce": "Bounce Wait Spinner", - "Cube": "Cube Wait Spinner", - "Cube-Grid": "Cube-Grid Wait Spinner", - "Dot": "Dot Wait Spinner", - "Double-Bounce": "Double Bounce Wait Spinner", - "Rotateplane": "Rotateplane Wait Spinner", - "Scaleout": "Scaleout Wait Spinner", - "Wave": "Wave Wait Spinner", - "maximize-card": "Maximize Card", - "minimize-card": "Minimize Card", - "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", - "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", - "subject": "Subject", - "details": "Details", - "carbon-copy": "Carbon Copy (Cc:)", - "ticket": "Ticket", - "tickets": "Tickets", - "ticket-number": "Ticket Number", - "open": "Open", - "pending": "Pending", - "closed": "Closed", - "resolved": "Resolved", - "cancelled": "Cancelled", - "history": "History", - "request": "Request", - "requests": "Requests", - "help-request": "Help Request", - "editCardSortOrderPopup-title": "Change Sorting", - "cardDetailsPopup-title": "Card Details", - "add-teams": "Add teams", - "add-teams-label": "Added teams are displayed below:", - "remove-team-from-table": "Are you sure you want to remove this team from the board ?", - "confirm-btn": "Confirm", - "remove-btn": "Remove", - "filter-card-title-label": "Filter by card title", - "invite-people-success": "Invitation to register sent with success", - "invite-people-error": "Error while sending invitation to register", - "can-invite-if-same-mailDomainName": "Email domain name", - "to-create-teams-contact-admin": "To create teams, please contact the administrator.", - "Node_heap_total_heap_size": "Node heap: total heap size", - "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", - "Node_heap_total_physical_size": "Node heap: total physical size", - "Node_heap_total_available_size": "Node heap: total available size", - "Node_heap_used_heap_size": "Node heap: used heap size", - "Node_heap_heap_size_limit": "Node heap: heap size limit", - "Node_heap_malloced_memory": "Node heap: malloced memory", - "Node_heap_peak_malloced_memory": "Node heap: peak malloced memory", - "Node_heap_does_zap_garbage": "Node heap: does zap garbage", - "Node_heap_number_of_native_contexts": "Node heap: number of native contexts", - "Node_heap_number_of_detached_contexts": "Node heap: number of detached contexts", - "Node_memory_usage_rss": "Node memory usage: resident set size", - "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", - "Node_memory_usage_heap_used": "Node memory usage: actual memory used", - "Node_memory_usage_external": "Node memory usage: external", - "add-organizations": "Add organizations", - "add-organizations-label": "Added organizations are displayed below:", - "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", - "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", - "custom-legal-notice-link-url": "Custom legal notice page URL", - "acceptance_of_our_legalNotice": "By continuing, you accept our", - "legalNotice": "legal notice", - "copied": "Copied!", - "checklistActionsPopup-title": "Checklist Actions", - "moveChecklist": "Move Checklist", - "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", - "copyChecklist": "Copy Checklist", - "copyChecklistPopup-title": "Copy Checklist", - "card-show-lists": "Card Show Lists", - "subtaskActionsPopup-title": "Subtask Actions", - "attachmentActionsPopup-title": "Attachment Actions", - "attachment-move-storage-fs": "Move attachment to filesystem", - "attachment-move-storage-gridfs": "Move attachment to GridFS", - "attachment-move-storage-s3": "Move attachment to S3", - "attachment-move": "Move Attachment", - "move-all-attachments-to-fs": "Move all attachments to filesystem", - "move-all-attachments-to-gridfs": "Move all attachments to GridFS", - "move-all-attachments-to-s3": "Move all attachments to S3", - "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", - "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", - "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", - "path": "Path", - "version-name": "Version-Name", - "size": "Size", - "storage": "Storage", - "action": "Action", - "board-title": "Board Title", - "attachmentRenamePopup-title": "Rename", - "uploading": "Uploading", - "remaining_time": "Remaining time", - "speed": "Speed", - "progress": "Progress", - "password-again": "Password (again)", - "if-you-already-have-an-account": "If you already have an account", - "register": "Register", - "forgot-password": "Forgot password", - "minicardDetailsActionsPopup-title": "Card Details", - "Mongo_sessions_count": "Mongo sessions count", - "change-visibility": "Change Visibility", - "max-upload-filesize": "Max upload filesize in bytes:", - "allowed-upload-filetypes": "Allowed upload filetypes:", - "max-avatar-filesize": "Max avatar filesize in bytes:", - "allowed-avatar-filetypes": "Allowed avatar filetypes:", - "invalid-file": "If filename is invalid, upload or rename is cancelled.", - "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", - "drag-board": "Drag board", - "translation-number": "The number of custom translation strings is:", - "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", - "newTranslationPopup-title": "New custom translation string", - "editTranslationPopup-title": "Edit custom translation string", - "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Translation", - "text": "Text", - "translation-text": "Translation text", - "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" -} diff --git a/imports/i18n/data/pa.i18n.json b/imports/i18n/data/pa.i18n.json index 821c0ba00..ccbe4a65f 100644 --- a/imports/i18n/data/pa.i18n.json +++ b/imports/i18n/data/pa.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/pl-PL.i18n.json b/imports/i18n/data/pl-PL.i18n.json index 68bae41a4..3a94bd258 100644 --- a/imports/i18n/data/pl-PL.i18n.json +++ b/imports/i18n/data/pl-PL.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s została przeniesiona do Archiwum", "activity-attached": "dodał załącznik %s do %s", "activity-created": "utworzył(a) %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "utworzył(a) niestandardowe pole %s", "activity-excluded": "odłączył %s od %s", "activity-imported": "zaimportowano %s to %s z %s", @@ -86,12 +85,10 @@ "add-card": "Dodaj kartę", "add-card-to-top-of-list": "Dodaj kartę na początku listy", "add-card-to-bottom-of-list": "Dodaj kartę na końcu listy", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Czeklisty", "click-to-star": "Kliknij by odznaczyć tę tablicę.", "click-to-unstar": "Kliknij by usunąć odznaczenie tej tablicy.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Schowka lub poprzez przeciągnij & upuść", "close": "Zamknij", "close-board": "Zamknij tablicę", @@ -300,7 +294,6 @@ "color-white": "biała", "color-yellow": "żółta", "unset-color": "Nieustawiony", - "comments": "Comments", "comment": "Komentarz", "comment-placeholder": "Dodaj komentarz", "comment-only": "Tylko komentowanie", @@ -383,7 +376,6 @@ "email-sent": "Email wysłany", "email-verifyEmail-subject": "Zweryfikuj swój adres email na __siteName__", "email-verifyEmail-text": "Witaj __user__,\nAby zweryfikować adres email, kliknij w link poniżej.\n__url__\nDzięki.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Włącz limit kart na liście", "error-board-doesNotExist": "Ta tablica nie istnieje", "error-board-notAdmin": "Musisz być administratorem tej tablicy żeby to zrobić", @@ -451,7 +443,7 @@ "advanced-filter-description": "Zaawansowane filtry pozwalają na wykorzystanie ciągu znaków wraz z następującymi operatorami: == != <= >= && || (). Spacja jest używana jako separator pomiędzy operatorami. Możesz przefiltrowywać wszystkie niestandardowe pola wpisując ich nazwy lub wartości, na przykład: Pole1 == Wartość1.\nUwaga: Jeśli pola lub wartości zawierają spację, musisz je zawrzeć w pojedynczym cudzysłowie, na przykład: 'Pole 1' == 'Wartość 1'. Dla pojedynczych znaków, które powinny być pominięte, należy użyć \\\\, na przykład Pole1 == I\\\\'m. Możesz także wykorzystywać mieszane warunki, na przykład P1 == W1 || P1 == W2. Standardowo wszystkie operatory są interpretowane od lewej do prawej. Możesz także zmienić kolejność interpretacji wykorzystując nawiasy, na przykład P1 == W1 && (P2 == W2 || P2 == W3). Możesz także wyszukiwać tekstowo wykorzystując wyrażenia regularne, na przykład: P1 == /Tes.*/i", "fullname": "Pełna nazwa", "header-logo-title": "Wróć do swojej strony z tablicami.", - "show-activities": "Show Activities", + "hide-system-messages": "Ukryj wiadomości systemowe", "headerBarCreateBoardPopup-title": "Utwórz tablicę", "home": "Strona główna", "import": "Importuj", @@ -580,14 +572,12 @@ "select-board": "Wybierz tablicę", "set-wip-limit-value": "Ustaw maksymalny limit kart na tej liście", "setWipLimitPopup-title": "Ustaw limit kart na liście", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Przypisz siebie do obecnej karty", "shortcut-autocomplete-emoji": "Autouzupełnianie emoji", "shortcut-autocomplete-members": "Autouzupełnianie użytkowników", "shortcut-clear-filters": "Usuń wszystkie filtry", "shortcut-close-dialog": "Zamknij okno", "shortcut-filter-my-cards": "Filtruj moje karty", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Przypnij do listy skrótów", "shortcut-toggle-filterbar": "Przełącz boczny pasek filtru", "shortcut-toggle-searchbar": "Pokaż/Ukryj panel wyszukiwania", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Ma karty z wykazanym czasem pracy", "time": "Czas", "title": "Tytuł", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Śledź", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Nie możesz usunąć tej karty, dopóki nie usuniesz podpiętej karty, w której są", "delete-linked-cards-before-this-list": "Nie możesz usunąć tej karty, dopóki nie usuniesz podpiętych kart, które wskazują na karty w tej liście", "hide-checked-items": "Ukryj ukończone", - "hide-finished-checklist": "Hide finished checklist", "task": "Zadanie", "create-task": "Utwórz zadanie", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "daty utworzenia (najpierw najnowsze)", "created-at-oldest-first": "daty utworzenia (najpierw najstarsze)", "links-heading": "Linki", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Ukryj powiadomienia systemowe wszystkich użytkowników", + "now-system-messages-of-all-users-are-hidden": "Odtąd powiadomienia systemowe wszystkich użytkowników będą ukryte", "move-swimlane": "Przenieś ścieżkę", "moveSwimlanePopup-title": "Przenieś ścieżkę", "custom-field-stringtemplate": "Wzór ciągu znaków", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (użyj lub   jako odstępu)", "custom-field-stringtemplate-item-placeholder": "Wciśnij Enter, aby dodać więcej elementów", "creator": "Twórca", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Wykaz plików", "reports": "Wykazy", "rulesReportTitle": "Wykaz reguł", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Tekst", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Zwiń", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/pl.i18n.json b/imports/i18n/data/pl.i18n.json index d14c356fd..412a5a915 100644 --- a/imports/i18n/data/pl.i18n.json +++ b/imports/i18n/data/pl.i18n.json @@ -1,6 +1,6 @@ { "accept": "Akceptuj", - "act-activity-notify": "Powiadomienie o aktywności", + "act-activity-notify": "Powiadomienia o aktywności", "act-addAttachment": "dodał załącznik __attachment__ do karty __card__ na liście __list__ na ścieżce __swimlane__ na tablicy __board__", "act-deleteAttachment": "usunął załącznik __attachment__ z karty __card__ na liście __list__ na ścieżce __swimlane__ na tablicy __board__", "act-addSubtask": "dodał podzadanie __subtask__ na karcie __card__ na liście __list__ na ścieżce __swimlane__ na tablicy __board__", @@ -49,7 +49,6 @@ "activity-archived": "%s została przeniesiona do Archiwum", "activity-attached": "dodał załącznik %s do %s", "activity-created": "utworzył(a) %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "utworzył(a) niestandardowe pole %s", "activity-excluded": "odłączył %s od %s", "activity-imported": "zaimportowano %s to %s z %s", @@ -86,16 +85,14 @@ "add-card": "Dodaj kartę", "add-card-to-top-of-list": "Dodaj kartę na początku listy", "add-card-to-bottom-of-list": "Dodaj kartę na końcu listy", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Ustaw wysokość ścieżki", - "set-swimlane-height": "Ustaw wysokość ścieżki", - "set-swimlane-height-value": "Wysokość ścieżki (w pikselach)", - "swimlane-height-error-message": "Wysokość ścieżki musi mieć wartość dodatnią", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", "add-swimlane": "Dodaj ścieżkę", "add-subtask": "Dodaj podzadanie", "add-checklist": "Dodaj czeklistę", @@ -266,9 +263,6 @@ "checklists": "Czeklisty", "click-to-star": "Kliknij by odznaczyć tę tablicę.", "click-to-unstar": "Kliknij by usunąć odznaczenie tej tablicy.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Schowka lub poprzez przeciągnij & upuść", "close": "Zamknij", "close-board": "Zamknij tablicę", @@ -300,7 +294,6 @@ "color-white": "biała", "color-yellow": "żółta", "unset-color": "Nieustawiony", - "comments": "Komentarze", "comment": "Komentarz", "comment-placeholder": "Dodaj komentarz", "comment-only": "Tylko komentowanie", @@ -383,7 +376,6 @@ "email-sent": "Email wysłany", "email-verifyEmail-subject": "Zweryfikuj swój adres email na __siteName__", "email-verifyEmail-text": "Witaj __user__,\nAby zweryfikować adres email, kliknij w link poniżej.\n__url__\nDzięki.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Włącz limit kart na liście", "error-board-doesNotExist": "Ta tablica nie istnieje", "error-board-notAdmin": "Musisz być administratorem tej tablicy żeby to zrobić", @@ -451,7 +443,7 @@ "advanced-filter-description": "Zaawansowane filtry pozwalają na wykorzystanie ciągu znaków wraz z następującymi operatorami: == != <= >= && || (). Spacja jest używana jako separator pomiędzy operatorami. Możesz przefiltrowywać wszystkie niestandardowe pola wpisując ich nazwy lub wartości, na przykład: Pole1 == Wartość1.\nUwaga: Jeśli pola lub wartości zawierają spację, musisz je zawrzeć w pojedynczym cudzysłowie, na przykład: 'Pole 1' == 'Wartość 1'. Dla pojedynczych znaków, które powinny być pominięte, należy użyć \\\\, na przykład Pole1 == I\\\\'m. Możesz także wykorzystywać mieszane warunki, na przykład P1 == W1 || P1 == W2. Standardowo wszystkie operatory są interpretowane od lewej do prawej. Możesz także zmienić kolejność interpretacji wykorzystując nawiasy, na przykład P1 == W1 && (P2 == W2 || P2 == W3). Możesz także wyszukiwać tekstowo wykorzystując wyrażenia regularne, na przykład: P1 == /Tes.*/i", "fullname": "Pełna nazwa", "header-logo-title": "Wróć do swojej strony z tablicami.", - "show-activities": "Pokaż aktywności", + "hide-system-messages": "Ukryj wiadomości systemowe", "headerBarCreateBoardPopup-title": "Utwórz tablicę", "home": "Strona główna", "import": "Importuj", @@ -580,14 +572,12 @@ "select-board": "Wybierz tablicę", "set-wip-limit-value": "Ustaw maksymalny limit kart na tej liście", "setWipLimitPopup-title": "Ustaw limit kart na liście", - "shortcut-add-self": "Dodaj siebie do obecnej karty", "shortcut-assign-self": "Przypisz siebie do obecnej karty", "shortcut-autocomplete-emoji": "Autouzupełnianie emoji", "shortcut-autocomplete-members": "Autouzupełnianie użytkowników", "shortcut-clear-filters": "Usuń wszystkie filtry", "shortcut-close-dialog": "Zamknij okno", "shortcut-filter-my-cards": "Filtruj moje karty", - "shortcut-filter-my-assigned-cards": "Filtruj przypisane karty", "shortcut-show-shortcuts": "Przypnij do listy skrótów", "shortcut-toggle-filterbar": "Przełącz boczny pasek filtru", "shortcut-toggle-searchbar": "Pokaż/Ukryj panel wyszukiwania", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Ma karty z wykazanym czasem pracy", "time": "Czas", "title": "Tytuł", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Śledź", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Nie możesz usunąć tej karty, dopóki nie usuniesz podpiętej karty, w której są", "delete-linked-cards-before-this-list": "Nie możesz usunąć tej karty, dopóki nie usuniesz podpiętych kart, które wskazują na karty w tej liście", "hide-checked-items": "Ukryj ukończone", - "hide-finished-checklist": "Ukryj ukończoną listę", "task": "Zadanie", "create-task": "Utwórz zadanie", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Zespoły", "displayName": "Nazwa wyświetlana", "shortName": "Nazwa skrócona", - "autoAddUsersWithDomainName": "Automatycznie dodawaj użytkowników z nazwą domeny", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Strona internetowa", "person": "Osoba", "my-cards": "Moje karty", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "daty utworzenia (najpierw najnowsze)", "created-at-oldest-first": "daty utworzenia (najpierw najstarsze)", "links-heading": "Linki", - "hide-activities-of-all-boards": "Nie pokazuj aktywności na wszystkich tablicach", - "now-activities-of-all-boards-are-hidden": "Teraz wszystkie aktywności wszystkich tablic są ukryte", + "hide-system-messages-of-all-users": "Ukryj powiadomienia systemowe wszystkich użytkowników", + "now-system-messages-of-all-users-are-hidden": "Odtąd powiadomienia systemowe wszystkich użytkowników będą ukryte", "move-swimlane": "Przenieś ścieżkę", "moveSwimlanePopup-title": "Przenieś ścieżkę", "custom-field-stringtemplate": "Wzór ciągu znaków", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (użyj lub   jako odstępu)", "custom-field-stringtemplate-item-placeholder": "Wciśnij Enter, aby dodać więcej elementów", "creator": "Twórca", - "creator-on-minicard": "Twórca minikarty", "filesReportTitle": "Wykaz plików", "reports": "Wykazy", "rulesReportTitle": "Wykaz reguł", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Każdy wiersz tekstu staje się jednym z elementów listy kontrolnej", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "pierwotna kolejność", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1246,27 +1230,18 @@ "max-avatar-filesize": "Maksymalny rozmiar pliku awatara w bajtach:", "allowed-avatar-filetypes": "Dozwolone typy plików awatara:", "invalid-file": "Jeżeli nazwa pliku jest nieprawidłowa, przesyłanie lub zmiana nazwy zostanie anulowane.", - "preview-pdf-not-supported": "Twoje urządzenie nie pozwala na podgląd PDF. Spróbuj go pobrać.", - "drag-board": "Przeciągnij tablicę", - "translation-number": "Liczba przetłumaczonych haseł to:", - "delete-translation-confirm-popup": "Czy na pewno chcesz skasować tłumaczone hasło? Nie można tego cofnąć.", - "newTranslationPopup-title": "Nowe hasło do przetłumaczenia", - "editTranslationPopup-title": "Zmiań tłumaczone hasło", - "settingsTranslationPopup-title": "Skasować tłumaczenie hasła?", - "translation": "Tłumaczenie", + "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", + "drag-board": "Drag board", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "Tekst", - "translation-text": "Tekst tłumaczenia", - "show-subtasks-field": "Pokaż pole podzadania", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Zamień na markdown", - "import-board-zip": "Dodaj plik .zip z tablicą plików JSON, nazwą tablicy i podkatalogami z załącznikami", - "collapse": "Zwiń", - "uncollapse": "Rozwiń", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/pt-BR.i18n.json b/imports/i18n/data/pt-BR.i18n.json index a6b55afc6..452891d45 100644 --- a/imports/i18n/data/pt-BR.i18n.json +++ b/imports/i18n/data/pt-BR.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s foi Arquivado", "activity-attached": "anexou %s a %s", "activity-created": "criou %s", - "activity-changedListTitle": "lista renomeada para %s", "activity-customfield-created": "criado campo customizado %s", "activity-excluded": "excluiu %s de %s", "activity-imported": "importado %s em %s de %s", @@ -86,12 +85,10 @@ "add-card": "Adicionar Cartão", "add-card-to-top-of-list": "Adicionar Cartão no Topo da Lista", "add-card-to-bottom-of-list": "Adicionar Cartão no Final da Lista", - "setListWidthPopup-title": "Definir Largura", - "set-list-width": "Definir Largura", - "set-list-width-value": "Definir Largura Mínima e Máxima (pixeis)", - "list-width-error-message": "Largura de lista deve ser um número inteiro maior que 100", - "keyboard-shortcuts-enabled": "Atalhos de teclado habilitado. Clique para desabilitar.", - "keyboard-shortcuts-disabled": "Atalhos de teclado desabilitados. Clique para habilitar.", + "setListWidthPopup-title": "Definir Largura da Lista", + "set-list-width": "Definir Largura da Lista", + "set-list-width-value": "Largura da Lista (pixels)", + "list-width-error-message": "Largura da Lista deve ser um inteiro positivo", "setSwimlaneHeightPopup-title": "Definir Altura da Raia", "set-swimlane-height": "Definir Altura da Raia", "set-swimlane-height-value": "Altura da Raia (pixels)", @@ -266,9 +263,6 @@ "checklists": "Listas de verificação", "click-to-star": "Marcar quadro como favorito.", "click-to-unstar": "Remover quadro dos favoritos.", - "click-to-enable-auto-width": "Largura da lista automática desabilitada. Clique para habilitar.", - "click-to-disable-auto-width": "Largura de lista automática habilitada. Clique para desabilitar.", - "auto-list-width": "Largura de lista automática", "clipboard": "Área de Transferência ou arraste e solte", "close": "Fechar", "close-board": "Fechar Quadro", @@ -300,7 +294,6 @@ "color-white": "branco", "color-yellow": "amarelo", "unset-color": "Remover", - "comments": "Comentários", "comment": "Comentário", "comment-placeholder": "Escrever Comentário", "comment-only": "Somente comentários", @@ -383,7 +376,6 @@ "email-sent": "E-mail enviado", "email-verifyEmail-subject": "Verifique seu endereço de e-mail em __siteName__", "email-verifyEmail-text": "Olá __user__\nPara verificar sua conta de e-mail, clique no link abaixo.\n__url__\nObrigado.", - "enable-vertical-scrollbars": "Habilitar rolagem de tela vertical", "enable-wip-limit": "Ativar Limite WIP", "error-board-doesNotExist": "Este quadro não existe", "error-board-notAdmin": "Você precisa ser administrador desse quadro para fazer isto", @@ -451,7 +443,7 @@ "advanced-filter-description": "Filtros avançados permitem escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || (). Um espaco é utilizado como separador entre os operadores. Você pode filtrar para todos os campos personalizados escrevendo os nomes e valores. Exemplo: Campo1 == Valor1. Nota^Se o campo ou valor tiver espaços você precisa encapsular eles em citações sozinhas. Exemplo: Campo1 == Eu\\\\sou. Também você pode combinar múltiplas condições. Exemplo: C1 == V1 || C1 == V2. Normalmente todos os operadores são interpretados da esquerda para direita. Você pode alterar a ordem colocando parênteses - como ma expressão matemática. Exemplo: C1 == V1 && (C2 == V2 || C2 == V3). Você tamb~em pode pesquisar campos de texto usando regex: C1 == /Tes.*/i", "fullname": "Nome Completo", "header-logo-title": "Voltar para a lista de quadros.", - "show-activities": "Mostrar Atividades", + "hide-system-messages": "Esconder mensagens de sistema", "headerBarCreateBoardPopup-title": "Criar Quadro", "home": "Início", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Selecionar Quadro", "set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista", "setWipLimitPopup-title": "Definir Limite WIP", - "shortcut-add-self": "Adicionar-me ao cartão atual", "shortcut-assign-self": "Atribuir a si o cartão atual", "shortcut-autocomplete-emoji": "Autocompletar emoji", "shortcut-autocomplete-members": "Preenchimento automático de membros", "shortcut-clear-filters": "Limpar todos filtros", "shortcut-close-dialog": "Fechar dialogo", "shortcut-filter-my-cards": "Filtrar meus cartões", - "shortcut-filter-my-assigned-cards": "Filtrar meus cartões atribuídos", "shortcut-show-shortcuts": "Mostrar lista de atalhos", "shortcut-toggle-filterbar": "Alternar barra de filtro", "shortcut-toggle-searchbar": "Alternar barra de busca", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Gastou cartões de tempo", "time": "Tempo", "title": "Título", - "toggle-assignees": "Alternar administradores 1-9 para cartão (Por ordem de adição no quadro)", "toggle-labels": "Alternar etiquetas 1-9 para cartão. Multi-seleção adiciona etiquetas 1-9", "remove-labels-multiselect": "Multi-seleção remove etiquetas 1-9", "tracking": "Rastreamento", @@ -706,7 +695,7 @@ "show-field-on-card": "Mostrar este campo no cartão", "automatically-field-on-card": "Adicionar campo aos novos cartões", "always-field-on-card": "Adicionar campo a todos os cartões", - "showLabel-field-on-card": "Mostrar etiqueta do campo no mini cartão", + "showLabel-field-on-card": "Mostrar etiqueta do campo no minicartão", "showSum-field-on-list": "Mostrar soma dos campos no topo da lista", "yes": "Sim", "no": "Não", @@ -748,7 +737,7 @@ "boardMinicardSettingsPopup-title": "Configurações do Mini cartão", "deposit-subtasks-board": "Inserir subtarefas a este quadro:", "deposit-subtasks-list": "Listas de subtarefas inseridas aqui:", - "show-parent-in-minicard": "Mostrar pai no mini cartão:", + "show-parent-in-minicard": "Mostrar Pai do mini cartão:", "description-on-minicard": "Descrição no mini cartão", "cover-attachment-on-minicard": "Imagem de capa no mini cartão", "badge-attachment-on-minicard": "Contador de anexos no mini cartão", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Você não pode excluir este cartão antes de excluir primeiro o cartão vinculado que possui", "delete-linked-cards-before-this-list": "Você não pode excluir esta lista antes de excluir primeiro os cartões vinculados que estão apontando para os cartões nesta lista", "hide-checked-items": "Esconder itens marcados", - "hide-finished-checklist": "Esconder lista de verificação concluída", "task": "Tarefa", "create-task": "Criar Tarefa", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Times", "displayName": "Nome em exibição", "shortName": "Nome curto", - "autoAddUsersWithDomainName": "Adicionar usuários com o nome de domínio automaticamente", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Website", "person": "Pessoa", "my-cards": "Meus Cartões", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Criado em (o mais recente primeiro)", "created-at-oldest-first": "Criado em (o mais antigo primeiro)", "links-heading": "Links", - "hide-activities-of-all-boards": "Não mostrar as atividades do quadro em todos os quadros", - "now-activities-of-all-boards-are-hidden": "Agora todas as atividades de todos os quadros estão escondidas", + "hide-system-messages-of-all-users": "Esconder mensagens do sistema para todos os usuários", + "now-system-messages-of-all-users-are-hidden": "Agora as mensagens do sistema para todos os usuários estão escondidas", "move-swimlane": "Mover Raia", "moveSwimlanePopup-title": "Mover Raia", "custom-field-stringtemplate": "Template de String", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separador (use ou   para um espaço)", "custom-field-stringtemplate-item-placeholder": "Pressione enter para adicionar mais itens", "creator": "Criador", - "creator-on-minicard": "Criador no mini cartão", "filesReportTitle": "Relatório de Arquivos", "reports": "Relatórios", "rulesReportTitle": "Relatório de regras", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Ações da Lista de verificação", "moveChecklist": "Mover Lista de verificação", "moveChecklistPopup-title": "Mover Lista de verificação", - "newlineBecomesNewChecklistItem": "Cada linha de texto se tornará um item da lista de verificação", - "newLineNewItem": "Uma linha de texto = um item da lista de verificação", - "newlineBecomesNewChecklistItemOriginOrder": "Cada linha de texto se tornará um item da lista de verificação em ordem original", - "originOrder": "ordem original", + "newlineBecomesNewChecklistItem": "Uma nova linha se torna um novo item da lista de verificação", "copyChecklist": "Copiar Lista de verificação", "copyChecklistPopup-title": "Copiar Lista de verificação", "card-show-lists": "Cartão mostra listas", @@ -1256,17 +1240,8 @@ "translation": "Tradução", "text": "Texto", "translation-text": "Texto de tradução", + "show-at-minicard": "Mostrar no mini cartão", + "show-checklist-at-minicard": "Mostrar lista de verificação no mini cartão", "show-subtasks-field": "Mostrar campo subtarefas", - "show-week-of-year": "Mostrar semana do ano (ISO8601)", - "convert-to-markdown": "Converter para markdown", - "import-board-zip": "Adicione o arquivo .zip que contém arquivos JSON do quadro e subdiretórios de nomes do quadro com anexos", - "collapse": "Expandir", - "uncollapse": "Compactar", - "hideCheckedChecklistItems": "Esconder itens concluídos da lista de verificação", - "hideAllChecklistItems": "Esconder todos os itens da lista de verificação", - "support": "Suporte", - "supportPopup-title": "Suporte", - "accessibility-page-enabled": "Página de acessibilidade habilitada", - "accessibility-title": "Tópico de acessibilidade", - "accessibility-content": "Conteúdo de acessibilidade" + "convert-to-markdown": "Converter para markdown" } diff --git a/imports/i18n/data/pt.i18n.json b/imports/i18n/data/pt.i18n.json index 5676223d3..aa5e0f275 100644 --- a/imports/i18n/data/pt.i18n.json +++ b/imports/i18n/data/pt.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s foi movido para o Arquivo", "activity-attached": "anexou %s a %s", "activity-created": "criou %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "criado o campo personalizado %s", "activity-excluded": "excluiu %s de %s", "activity-imported": "importou %s para %s de %s", @@ -86,12 +85,10 @@ "add-card": "Adicionar Cartão", "add-card-to-top-of-list": "Adicionar Cartão no Topo da Lista", "add-card-to-bottom-of-list": "Adicionar Cartão no Fundo da Lista", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Listas de verificação", "click-to-star": "Clique para marcar este quadro como favorito.", "click-to-unstar": "Clique para remover este quadro dos favoritos.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Área de Transferência ou arraste e solte", "close": "Fechar", "close-board": "Fechar o Quadro", @@ -300,7 +294,6 @@ "color-white": "branco", "color-yellow": "amarelo", "unset-color": "Remover", - "comments": "Comments", "comment": "Comentar", "comment-placeholder": "Escrever o Comentário", "comment-only": "Apenas comentários", @@ -383,7 +376,6 @@ "email-sent": "E-mail enviado", "email-verifyEmail-subject": "Verifique o seu endereço de e-mail em __siteName__", "email-verifyEmail-text": "Olá __user__\nPara verificar a sua conta de e-mail, clique na ligação abaixo.\n__url__\nObrigado.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Ativar Limite WIP", "error-board-doesNotExist": "Este quadro não existe", "error-board-notAdmin": "Precisa de ser administrador deste quadro para fazer isso", @@ -451,7 +443,7 @@ "advanced-filter-description": "Filtro Avançado permite escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || ( ). Um espaço é usado como separador entre Operadores. Pode filtrar em todos os Campos Personalizados escreventos os seus nomes e valores. Por Exemplo: Campo1 == Valor1. Nota: Se os campos ou valores contiverem espaços, tem de os encapsular em apóstrofes. Por Exemplo: 'Campo 1' == 'Valor 1'. Para que caracteres de controlo únicos (' \\\\/) sejam ignorados, pode usar \\\\. Por exemplo: Campo1 == I\\\\'m. Pode também combinar múltiplas condições. Por Exemplo: F1 == V1 || F1 == V2. Normalmente todos os operadores são interpretados da esquerda para a direita. Pode alterar a ordem inserindo parênteses. Por Exemplo: F1 == V1 && ( F2 == V2 || F2 == V3 ). Pode também procurar em campos de texto utilizando uma expressão regular: F1 == /Tes.*/i", "fullname": "Nome Completo", "header-logo-title": "Voltar para a sua lista de quadros.", - "show-activities": "Show Activities", + "hide-system-messages": "Esconder mensagens de sistema", "headerBarCreateBoardPopup-title": "Criar Quadro", "home": "Início", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Selecione Quadro", "set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista", "setWipLimitPopup-title": "Definir Limite WIP", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Atribuir a si o cartão actual", "shortcut-autocomplete-emoji": "Autocompletar emoji", "shortcut-autocomplete-members": "Autocompletar membros", "shortcut-clear-filters": "Limpar todos os filtros", "shortcut-close-dialog": "Fechar Caixa de Dialogo", "shortcut-filter-my-cards": "Filtrar os meus cartões", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Mostrar esta lista de atalhos", "shortcut-toggle-filterbar": "Alternar a Barra Lateral de Filtros", "shortcut-toggle-searchbar": "Alternar a Barra Lateral de Pesquisa", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Tem cartões com tempo gasto", "time": "Tempo", "title": "Título", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "A seguir", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Não pode apagar este cartão sem primeiro apagar o cartão ligado que tem", "delete-linked-cards-before-this-list": "Não pode apagar esta lista sem primeiro apagar cartões ligados que apontam para cartões nesta lista", "hide-checked-items": "Ocultar items marcados", - "hide-finished-checklist": "Hide finished checklist", "task": "Tarefa", "create-task": "Criar Tarefa", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Criado Em (Recentes Primeiro)", "created-at-oldest-first": "Criado Em (Antigos Primeiro)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Omitir mensagens de sistema de todos os utilizadores", + "now-system-messages-of-all-users-are-hidden": "Todas as mensagens de sistema são omitidas a todos os utilizadores", "move-swimlane": "Mover Pista", "moveSwimlanePopup-title": "Mover Pista", "custom-field-stringtemplate": "Texto Modelo", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separador (use ou   para um espaço)", "custom-field-stringtemplate-item-placeholder": "Pressione enter para adicionar mais itens", "creator": "Criador", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Relatório de Ficheiros", "reports": "Relatórios", "rulesReportTitle": "Relatório de Regras", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Texto", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Colapsar", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/pt_PT.i18n.json b/imports/i18n/data/pt_PT.i18n.json index 9f6833efb..f7e981001 100644 --- a/imports/i18n/data/pt_PT.i18n.json +++ b/imports/i18n/data/pt_PT.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s foi movido para o Arquivo", "activity-attached": "anexou %s a %s", "activity-created": "criou %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "criado o campo personalizado %s", "activity-excluded": "excluiu %s de %s", "activity-imported": "importou %s para %s de %s", @@ -86,12 +85,10 @@ "add-card": "Adicionar Cartão", "add-card-to-top-of-list": "Adicionar Cartão no Topo da Lista", "add-card-to-bottom-of-list": "Adicionar Cartão no Fundo da Lista", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Listas de verificação", "click-to-star": "Clique para marcar este quadro como favorito.", "click-to-unstar": "Clique para remover este quadro dos favoritos.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Área de Transferência ou arraste e solte", "close": "Fechar", "close-board": "Fechar o Quadro", @@ -300,7 +294,6 @@ "color-white": "branco", "color-yellow": "amarelo", "unset-color": "Remover", - "comments": "Comments", "comment": "Comentar", "comment-placeholder": "Escrever o Comentário", "comment-only": "Apenas comentários", @@ -383,7 +376,6 @@ "email-sent": "E-mail enviado", "email-verifyEmail-subject": "Verifique o seu endereço de e-mail em __siteName__", "email-verifyEmail-text": "Olá __user__\nPara verificar a sua conta de e-mail, clique na ligação abaixo.\n__url__\nObrigado.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Ativar Limite WIP", "error-board-doesNotExist": "Este quadro não existe", "error-board-notAdmin": "Precisa de ser administrador deste quadro para fazer isso", @@ -451,7 +443,7 @@ "advanced-filter-description": "Filtro Avançado permite escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || ( ). Um espaço é usado como separador entre Operadores. Pode filtrar em todos os Campos Personalizados escreventos os seus nomes e valores. Por Exemplo: Campo1 == Valor1. Nota: Se os campos ou valores contiverem espaços, tem de os encapsular em apóstrofes. Por Exemplo: 'Campo 1' == 'Valor 1'. Para que caracteres de controlo únicos (' \\\\/) sejam ignorados, pode usar \\\\. Por exemplo: Campo1 == I\\\\'m. Pode também combinar múltiplas condições. Por Exemplo: F1 == V1 || F1 == V2. Normalmente todos os operadores são interpretados da esquerda para a direita. Pode alterar a ordem inserindo parênteses. Por Exemplo: F1 == V1 && ( F2 == V2 || F2 == V3 ). Pode também procurar em campos de texto utilizando uma expressão regular: F1 == /Tes.*/i", "fullname": "Nome Completo", "header-logo-title": "Voltar para a sua lista de quadros.", - "show-activities": "Show Activities", + "hide-system-messages": "Esconder mensagens de sistema", "headerBarCreateBoardPopup-title": "Criar Quadro", "home": "Início", "import": "Importar", @@ -580,14 +572,12 @@ "select-board": "Selecione Quadro", "set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista", "setWipLimitPopup-title": "Definir Limite WIP", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Atribuir a si o cartão actual", "shortcut-autocomplete-emoji": "Autocompletar emoji", "shortcut-autocomplete-members": "Autocompletar membros", "shortcut-clear-filters": "Limpar todos os filtros", "shortcut-close-dialog": "Fechar Caixa de Dialogo", "shortcut-filter-my-cards": "Filtrar os meus cartões", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Mostrar esta lista de atalhos", "shortcut-toggle-filterbar": "Alternar a Barra Lateral de Filtros", "shortcut-toggle-searchbar": "Alternar a Barra Lateral de Pesquisa", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Tem cartões com tempo gasto", "time": "Tempo", "title": "Título", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "A seguir", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Não pode apagar este cartão sem primeiro apagar o cartão ligado que tem", "delete-linked-cards-before-this-list": "Não pode apagar esta lista sem primeiro apagar cartões ligados que apontam para cartões nesta lista", "hide-checked-items": "Ocultar items marcados", - "hide-finished-checklist": "Hide finished checklist", "task": "Tarefa", "create-task": "Criar Tarefa", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Criado Em (Recentes Primeiro)", "created-at-oldest-first": "Criado Em (Antigos Primeiro)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Omitir mensagens de sistema de todos os utilizadores", + "now-system-messages-of-all-users-are-hidden": "Todas as mensagens de sistema são omitidas a todos os utilizadores", "move-swimlane": "Mover Pista", "moveSwimlanePopup-title": "Mover Pista", "custom-field-stringtemplate": "Texto Modelo", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separador (use ou   para um espaço)", "custom-field-stringtemplate-item-placeholder": "Pressione enter para adicionar mais itens", "creator": "Criador", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Relatório de Ficheiros", "reports": "Relatórios", "rulesReportTitle": "Relatório de Regras", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Texto", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Colapsar", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ro-RO.i18n.json b/imports/i18n/data/ro-RO.i18n.json index 53e48ec08..1740a92ca 100644 --- a/imports/i18n/data/ro-RO.i18n.json +++ b/imports/i18n/data/ro-RO.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "s-a atașat %s la %s", "activity-created": "s-a creat %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "s-a exclus %s din %s", "activity-imported": "s-a importat %s în %s din %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Închide", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Titlu", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ro.i18n.json b/imports/i18n/data/ro.i18n.json index a0e0666e1..ccbe4a65f 100644 --- a/imports/i18n/data/ro.i18n.json +++ b/imports/i18n/data/ro.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "Toate tablele", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ru-UA.i18n.json b/imports/i18n/data/ru-UA.i18n.json index 78b62d375..98ae98357 100644 --- a/imports/i18n/data/ru-UA.i18n.json +++ b/imports/i18n/data/ru-UA.i18n.json @@ -1,154 +1,151 @@ { - "accept": "Accept", - "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "created board __board__", - "act-createSwimlane": "created swimlane __swimlane__ to board __board__", - "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-createCustomField": "created custom field __customField__ at board __board__", - "act-deleteCustomField": "deleted custom field __customField__ at board __board__", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createList": "added list __list__ to board __board__", - "act-addBoardMember": "added member __member__ to board __board__", - "act-archivedBoard": "Board __board__ moved to Archive", - "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", - "act-importBoard": "imported board __board__", - "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", - "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", - "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-removeBoardMember": "removed member __member__ from board __board__", - "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "accept": "Принять", + "act-activity-notify": "Уведомление о действиях участников", + "act-addAttachment": "прикрепил вложение __attachment__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-deleteAttachment": "удалил вложение __attachment__ из карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-addSubtask": "добавил подзадачу __subtask__ для карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-addLabel": "добавил метку __label__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-addedLabel": "добавил метку __label__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-removeLabel": "Снята метка __label__ с карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-removedLabel": "Снята метка __label__ с карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-addChecklist": "добавил контрольный список __checklist__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-addChecklistItem": "добавил пункт __checklistItem__ в контрольный список __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-removeChecklist": "удалил контрольный список __checklist__ из карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-removeChecklistItem": "удалил пункт __checklistItem__ из контрольного списка __checkList__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-checkedItem": "отметил __checklistItem__ в контрольном списке __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-uncheckedItem": "снял __checklistItem__ в контрольном списке __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-completeChecklist": "завершил контрольный список __checklist__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-uncompleteChecklist": "вновь открыл контрольный список __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-addComment": "написал в карточке __card__: __comment__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-editComment": "изменил комментарий в карточке __card__: __comment__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-deleteComment": "удалил комментарий из карточки __card__: __comment__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-createBoard": "создал доску __board__", + "act-createSwimlane": "создал дорожку __swimlane__ на доске __board__", + "act-createCard": "создал карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-createCustomField": "создал новое поле __customField__ на доске __board__", + "act-deleteCustomField": "удалил поле __customField__ с доски __board__", + "act-setCustomField": "изменил значение поля __customField__: __customFieldValue__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-createList": "добавил список __list__ на доску __board__", + "act-addBoardMember": "добавил участника __member__ на доску __board__", + "act-archivedBoard": "Доска __board__ перемещена в Архив", + "act-archivedCard": "Карточка __card__ из списка __list__ с дорожки __swimlane__ доски __board__ перемещена в Архив", + "act-archivedList": "Список __list__ на дорожке __swimlane__ доски __board__ перемещен в Архив", + "act-archivedSwimlane": "Дорожка __swimlane__ на доске __board__ перемещена в Архив", + "act-importBoard": "импортировал доску __board__", + "act-importCard": "импортировал карточку __card__ в список __list__ на дорожку __swimlane__ доски __board__", + "act-importList": "импортировал список __list__ на дорожку __swimlane__ доски __board__", + "act-joinMember": "добавил участника __member__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "act-moveCard": "переместил карточку __card__ на доске __board__ из списка __oldList__ с дорожки __oldSwimlane__ в список __list__ на дорожку __swimlane__", + "act-moveCardToOtherBoard": "переместил карточку __card__ из списка __oldList__ с дорожки __oldSwimlane__ доски __oldBoard__ в список __list__ на дорожку __swimlane__ доски __board__", + "act-removeBoardMember": "удалил участника __member__ с доски __board__", + "act-restoredCard": "восстановил карточку __card__ в список __list__ на дорожку __swimlane__ доски __board__", + "act-unjoinMember": "удалил участника __member__ из карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__", "act-withBoardTitle": "__board__", "act-withCardTitle": "[__board__] __card__", - "actions": "Actions", - "activities": "Activities", - "activity": "Activity", - "activity-added": "added %s to %s", - "activity-archived": "%s moved to Archive", - "activity-attached": "attached %s to %s", - "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", - "activity-customfield-created": "created custom field %s", - "activity-excluded": "excluded %s from %s", - "activity-imported": "imported %s into %s from %s", - "activity-imported-board": "imported %s from %s", - "activity-joined": "joined %s", - "activity-moved": "moved %s from %s to %s", - "activity-on": "on %s", - "activity-removed": "removed %s from %s", - "activity-sent": "sent %s to %s", - "activity-unjoined": "unjoined %s", - "activity-subtask-added": "added subtask to %s", - "activity-checked-item": "checked %s in checklist %s of %s", - "activity-unchecked-item": "unchecked %s in checklist %s of %s", - "activity-checklist-added": "added checklist to %s", - "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist %s of %s", - "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", - "activity-checklist-item-added": "added checklist item to '%s' in %s", - "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", - "add": "Add", - "activity-checked-item-card": "checked %s in checklist %s", - "activity-unchecked-item-card": "unchecked %s in checklist %s", - "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "activity-checklist-uncompleted-card": "uncompleted the checklist %s", - "activity-editComment": "edited comment %s", - "activity-deleteComment": "deleted comment %s", - "activity-receivedDate": "edited received date to %s of %s", - "activity-startDate": "edited start date to %s of %s", - "activity-dueDate": "edited due date to %s of %s", - "activity-endDate": "edited end date to %s of %s", - "add-attachment": "Add Attachment", - "add-board": "Add Board", - "add-template": "Add Template", - "add-card": "Add Card", - "add-card-to-top-of-list": "Add Card to Top of List", - "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "actions": "Действия", + "activities": "История действий", + "activity": "Действия участников", + "activity-added": "добавил %s на %s", + "activity-archived": "%s теперь в Архиве", + "activity-attached": "прикрепил %s к %s", + "activity-created": "создал %s", + "activity-customfield-created": "создал настраиваемое поле %s", + "activity-excluded": "исключил %s из %s", + "activity-imported": "импортировал %s в %s из %s", + "activity-imported-board": "импортировал %s из %s", + "activity-joined": "присоединился к %s", + "activity-moved": "переместил %s из %s в %s", + "activity-on": "%s", + "activity-removed": "удалил %s из %s", + "activity-sent": "отправил %s в %s", + "activity-unjoined": "вышел из %s", + "activity-subtask-added": "добавил подзадачу в %s", + "activity-checked-item": "отметил %s в контрольном списке %s в %s", + "activity-unchecked-item": "снял %s в контрольном списке %s в %s", + "activity-checklist-added": "добавил контрольный список в %s", + "activity-checklist-removed": "удалил контрольный список из %s", + "activity-checklist-completed": "завершил контрольный список %s в %s", + "activity-checklist-uncompleted": "вновь открыл контрольный список %s в %s", + "activity-checklist-item-added": "добавил пункт в контрольный список '%s' в карточке %s", + "activity-checklist-item-removed": "удалил пункт из контрольного списка '%s' в карточке %s", + "add": "Создать", + "activity-checked-item-card": "отметил %s в контрольном списке %s", + "activity-unchecked-item-card": "снял %s в контрольном списке %s", + "activity-checklist-completed-card": "завершил контрольный список __checklist__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__", + "activity-checklist-uncompleted-card": "вновь открыл контрольный список %s", + "activity-editComment": "отредактировал комментарий %s", + "activity-deleteComment": "удалил комментарий %s", + "activity-receivedDate": "отредактировал дату получения на %sс %s", + "activity-startDate": "отредактировал дату начала на %sс %s", + "activity-dueDate": "отредактировал срок исполнения на %s с %s", + "activity-endDate": "отредактировал дату завершения на %s с %s", + "add-attachment": "Добавить вложение", + "add-board": "Добавить доску", + "add-template": "Добавить шаблон", + "add-card": "Добавить карточку", + "add-card-to-top-of-list": "Добавить карточку в начало списка", + "add-card-to-bottom-of-list": "Добавить карточку в конец списка", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", "swimlane-height-error-message": "Swimlane height must be a positive integer", - "add-swimlane": "Add Swimlane", - "add-subtask": "Add Subtask", - "add-checklist": "Add Checklist", - "add-checklist-item": "Add an item to checklist", + "add-swimlane": "Добавить дорожку", + "add-subtask": "Добавить подзадачу", + "add-checklist": "Добавить контрольный список", + "add-checklist-item": "Добавить пункт в контрольный список", "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", - "convertChecklistItemToCardPopup-title": "Convert to Card", + "convertChecklistItemToCardPopup-title": "Преобразовать в Карточку", "add-cover": "Add cover image to minicard", - "add-label": "Add Label", - "add-list": "Add List", + "add-label": "Добавить метку", + "add-list": "Добавить простой список", "add-after-list": "Add After List", - "add-members": "Add Members", - "added": "Added", - "addMemberPopup-title": "Members", - "memberPopup-title": "Member Settings", - "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", + "add-members": "Добавить участника", + "added": "Добавлено", + "addMemberPopup-title": "Участники", + "memberPopup-title": "Настройки участника", + "admin": "Администратор", + "admin-desc": "Может просматривать и редактировать карточки, удалять участников и управлять настройками доски.", + "admin-announcement": "Объявление", + "admin-announcement-active": "Действующее общесистемное объявление", + "admin-announcement-title": "Объявление от Администратора", + "all-boards": "Все доски", + "and-n-other-card": "И __count__ другая карточка", + "and-n-other-card_plural": "И __count__ другие карточки", + "apply": "Применить", + "app-is-offline": "Идет загрузка, подождите. Обновление страницы приведет к потере данных. Если загрузка не происходит, проверьте работоспособность сервера.", "app-try-reconnect": "Try to reconnect.", - "archive": "Move to Archive", - "archive-all": "Move All to Archive", - "archive-board": "Move Board to Archive", - "archive-card": "Move Card to Archive", - "archive-list": "Move List to Archive", - "archive-swimlane": "Move Swimlane to Archive", - "archive-selection": "Move selection to Archive", - "archiveBoardPopup-title": "Move Board to Archive?", - "archived-items": "Archive", - "archived-boards": "Boards in Archive", - "restore-board": "Restore Board", - "no-archived-boards": "No Boards in Archive.", - "archives": "Archive", - "template": "Template", - "templates": "Templates", - "template-container": "Template Container", - "add-template-container": "Add Template Container", - "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", + "archive": "Переместить в архив", + "archive-all": "Переместить всё в архив", + "archive-board": "Переместить доску в архив", + "archive-card": "Переместить карточку в архив", + "archive-list": "Переместить список в архив", + "archive-swimlane": "Переместить дорожку в архив", + "archive-selection": "Переместить выбранное в архив", + "archiveBoardPopup-title": "Переместить доску в архив?", + "archived-items": "Архив", + "archived-boards": "Доски в архиве", + "restore-board": "Востановить доску", + "no-archived-boards": "Нет досок в архиве.", + "archives": "Архив", + "template": "Шаблон", + "templates": "Шаблоны", + "template-container": "Шаблон Контейнера", + "add-template-container": "Добавить Шаблон Контейнера", + "assign-member": "Назначить участника", + "attached": "прикреплено", + "attachment": "Вложение", + "attachment-delete-pop": "Если удалить вложение, его нельзя будет восстановить.", + "attachmentDeletePopup-title": "Удалить вложение?", + "attachments": "Вложения", + "auto-watch": "Автоматически следить за созданными досками", "avatar-too-big": "The avatar is too large (__size__ max)", - "back": "Back", - "board-change-color": "Change color", + "back": "Назад", + "board-change-color": "Изменить цвет", "board-change-background-image": "Change Background Image", "board-background-image-url": "Background Image URL", "add-background-image": "Add Background Image", @@ -159,68 +156,68 @@ "boardInfoOnMyBoards-title": "All Boards Settings", "show-card-counter-per-list": "Show card count per list", "show-board_members-avatar": "Show Board members avatars", - "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>.", - "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", - "boardChangeColorPopup-title": "Change Board Background", + "board-nb-stars": "%s избранное", + "board-not-found": "Доска не найдена", + "board-private-info": "Это доска будет <strong>частной</strong>.", + "board-public-info": "Эта доска будет <strong>доступной всем</strong>.", + "board-drag-drop-reorder-or-click-open": "Перетаскивайте, чтобы упорядочить значки доски. Нажмите значок доски чтобы открыть доску.", + "boardChangeColorPopup-title": "Изменить фон доски", "boardChangeBackgroundImagePopup-title": "Change Background Image", - "allBoardsChangeColorPopup-title": "Change color", + "allBoardsChangeColorPopup-title": "Изменить цвет", "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", - "boardChangeTitlePopup-title": "Rename Board", - "boardChangeVisibilityPopup-title": "Change Visibility", - "boardChangeWatchPopup-title": "Change Watch", - "boardMenuPopup-title": "Board Settings", - "allBoardsMenuPopup-title": "Settings", - "boardChangeViewPopup-title": "Board View", - "boards": "Boards", - "board-view": "Board View", - "board-view-cal": "Calendar", - "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Collapse", - "board-view-gantt": "Gantt", - "board-view-lists": "Lists", - "bucket-example": "Like “Bucket List” for example", - "cancel": "Cancel", - "card-archived": "This card is moved to Archive.", - "board-archived": "This board is moved to Archive.", - "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 move a card to Archive to remove it from the board and preserve the activity.", + "boardChangeTitlePopup-title": "Переименовать доску", + "boardChangeVisibilityPopup-title": "Изменить настройки видимости", + "boardChangeWatchPopup-title": "Режимы оповещения", + "boardMenuPopup-title": "Настройки доски", + "allBoardsMenuPopup-title": "Настройки", + "boardChangeViewPopup-title": "Вид доски", + "boards": "Доски", + "board-view": "Вид доски", + "board-view-cal": "Календарь", + "board-view-swimlanes": "Дорожки", + "board-view-collapse": "Свернуть", + "board-view-gantt": "Диаграмма Ганта", + "board-view-lists": "Списки", + "bucket-example": "Например “Список дел”", + "cancel": "Отмена", + "card-archived": "Эта карточка перемещена в архив", + "board-archived": "Эта доска перемещена в архив.", + "card-comments-title": "Комментарии (%s)", + "card-delete-notice": "Это действие невозможно будет отменить. Все изменения, которые вы вносили в карточку будут потеряны.", + "card-delete-pop": "Все действия будут удалены из ленты активности участников, и вы не сможете заново открыть карточку. Действие необратимо", + "card-delete-suggest-archive": "Вы можете переместить карточку в архив, чтобы убрать ее с доски, сохранив всю историю действий участников.", "card-archive-pop": "Card will not be visible at this list after archiving card.", "card-archive-suggest-cancel": "You can later restore card from Archive.", - "card-due": "Due", - "card-due-on": "Due on", - "card-spent": "Spent Time", - "card-edit-attachments": "Edit attachments", - "card-edit-custom-fields": "Edit custom fields", - "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", - "cardCustomField-datePopup-title": "Change date", - "cardCustomFieldsPopup-title": "Edit custom fields", - "cardStartVotingPopup-title": "Start a vote", - "positiveVoteMembersPopup-title": "Proponents", - "negativeVoteMembersPopup-title": "Opponents", - "card-edit-voting": "Edit voting", - "editVoteEndDatePopup-title": "Change vote end date", - "allowNonBoardMembers": "Allow all logged in users", - "vote-question": "Voting question", - "vote-public": "Show who voted what", - "vote-for-it": "for it", - "vote-against": "against", - "deleteVotePopup-title": "Delete vote?", - "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", - "cardStartPlanningPokerPopup-title": "Start a Planning Poker", - "card-edit-planning-poker": "Edit Planning Poker", - "editPokerEndDatePopup-title": "Change Planning Poker vote end date", - "poker-question": "Planning Poker", + "card-due": "Выполнить к", + "card-due-on": "Выполнить до", + "card-spent": "Затраченное время", + "card-edit-attachments": "Изменить вложения", + "card-edit-custom-fields": "Редактировать настраиваемые поля", + "card-edit-labels": "Изменить метку", + "card-edit-members": "Изменить участников", + "card-labels-title": "Изменить метки для этой карточки.", + "card-members-title": "Добавить или удалить с карточки участников доски.", + "card-start": "В работе с", + "card-start-on": "Начнётся с", + "cardAttachmentsPopup-title": "Прикрепить из", + "cardCustomField-datePopup-title": "Изменить дату", + "cardCustomFieldsPopup-title": "Редактировать настраиваемые поля", + "cardStartVotingPopup-title": "Голосовать", + "positiveVoteMembersPopup-title": "Сторонники", + "negativeVoteMembersPopup-title": "Противники", + "card-edit-voting": "Редактировать голосование", + "editVoteEndDatePopup-title": "Изменить дату окончания голосования", + "allowNonBoardMembers": "Разрешить всем авторизованным пользователям", + "vote-question": "Вопрос для голосования", + "vote-public": "Показать кто как голосовал", + "vote-for-it": "за", + "vote-against": "против", + "deleteVotePopup-title": "Удалить голосование?", + "vote-delete-pop": "Это действие невозможно будет отменить. Все связанные с голосованием действия будут потеряны.", + "cardStartPlanningPokerPopup-title": "Начать покер планирования", + "card-edit-planning-poker": "Редактировать покер планирования.", + "editPokerEndDatePopup-title": "Изменить дату окончания голосования покера планирования.", + "poker-question": "Покер планирования", "poker-one": "1", "poker-two": "2", "poker-three": "3", @@ -231,926 +228,916 @@ "poker-forty": "40", "poker-oneHundred": "100", "poker-unsure": "?", - "poker-finish": "Finish", - "poker-result-votes": "Votes", - "poker-result-who": "Who", - "poker-replay": "Replay", - "set-estimation": "Set Estimation", - "deletePokerPopup-title": "Delete planning poker?", - "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", - "cardDeletePopup-title": "Delete Card?", + "poker-finish": "Закончить", + "poker-result-votes": "Голоса", + "poker-result-who": "Кто", + "poker-replay": "Переиграть", + "set-estimation": "Задать оценку", + "deletePokerPopup-title": "Удалить покер планирования?", + "poker-delete-pop": "Удаление необратимо. Вы потеряете действия ассоциированные с этим покером планирования.", + "cardDeletePopup-title": "Удалить карточку?", "cardArchivePopup-title": "Archive Card?", - "cardDetailsActionsPopup-title": "Card Actions", - "cardLabelsPopup-title": "Labels", - "cardMembersPopup-title": "Members", - "cardMorePopup-title": "More", - "cardTemplatePopup-title": "Create template", - "cards": "Cards", - "cards-count": "Cards", - "cards-count-one": "Card", - "casSignIn": "Sign In with CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", - "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", - "subtasks": "Subtasks", - "checklists": "Checklists", - "click-to-star": "Click to star this board.", - "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", - "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 “Archive” button from the home header.", - "close-card": "Close Card", - "color-black": "black", - "color-blue": "blue", - "color-crimson": "crimson", - "color-darkgreen": "darkgreen", - "color-gold": "gold", - "color-gray": "gray", - "color-green": "green", - "color-indigo": "indigo", - "color-lime": "lime", - "color-magenta": "magenta", - "color-mistyrose": "mistyrose", - "color-navy": "navy", - "color-orange": "orange", - "color-paleturquoise": "paleturquoise", - "color-peachpuff": "peachpuff", - "color-pink": "pink", - "color-plum": "plum", - "color-purple": "purple", - "color-red": "red", - "color-saddlebrown": "saddlebrown", - "color-silver": "silver", - "color-sky": "sky", - "color-slateblue": "slateblue", - "color-white": "white", - "color-yellow": "yellow", - "unset-color": "Unset", - "comments": "Comments", - "comment": "Comment", - "comment-placeholder": "Write Comment", - "comment-only": "Comment only", - "comment-only-desc": "Can comment on cards only.", - "comment-delete": "Are you sure you want to delete the comment?", - "deleteCommentPopup-title": "Delete comment?", - "no-comments": "No comments", - "no-comments-desc": "Can not see comments and activities.", - "worker": "Worker", - "worker-desc": "Can only move cards, assign itself to card and comment.", - "computer": "Computer", - "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", + "cardDetailsActionsPopup-title": "Действия в карточке", + "cardLabelsPopup-title": "Метки", + "cardMembersPopup-title": "Участники", + "cardMorePopup-title": "Поделиться", + "cardTemplatePopup-title": "Создать шаблон", + "cards": "Карточки", + "cards-count": "Карточки", + "cards-count-one": "Карточка", + "casSignIn": "Войти через CAS", + "cardType-card": "Карточка", + "cardType-linkedCard": "Связанная карточка", + "cardType-linkedBoard": "Связанная доска", + "change": "Изменить", + "change-avatar": "Изменить аватар", + "change-password": "Изменить пароль", + "change-permissions": "Изменить права доступа", + "change-settings": "Изменить Настройки", + "changeAvatarPopup-title": "Изменить аватар", + "changeLanguagePopup-title": "Сменить язык", + "changePasswordPopup-title": "Изменить пароль", + "changePermissionsPopup-title": "Изменить настройки доступа", + "changeSettingsPopup-title": "Изменить Настройки", + "subtasks": "Подзадачи", + "checklists": "Контрольные списки", + "click-to-star": "Добавить в «Избранное»", + "click-to-unstar": "Удалить из «Избранного»", + "clipboard": "Буфер обмена или drag & drop", + "close": "Закрыть", + "close-board": "Закрыть доску", + "close-board-pop": "Вы сможете восстановить доску, нажав \"Архив\" в заголовке домашней страницы.", + "close-card": "Закрыть карточку", + "color-black": "черный", + "color-blue": "синий", + "color-crimson": "малиновый", + "color-darkgreen": "темно-зеленый", + "color-gold": "золотой", + "color-gray": "серый", + "color-green": "зеленый", + "color-indigo": "индиго", + "color-lime": "лимоновый", + "color-magenta": "маджента", + "color-mistyrose": "тускло-розовый", + "color-navy": "темно-синий", + "color-orange": "оранжевый", + "color-paleturquoise": "бледно-бирюзовый", + "color-peachpuff": "персиковый", + "color-pink": "розовый", + "color-plum": "сливовый", + "color-purple": "фиолетовый", + "color-red": "красный", + "color-saddlebrown": "кожано-коричневый", + "color-silver": "серебристый", + "color-sky": "голубой", + "color-slateblue": "серо-голубой", + "color-white": "белый", + "color-yellow": "желтый", + "unset-color": "Убрать", + "comment": "Добавить комментарий", + "comment-placeholder": "Написать комментарий", + "comment-only": "Только комментирование", + "comment-only-desc": "Может комментировать только карточки.", + "comment-delete": "Вы уверены, что хотите удалить этот комментарий?", + "deleteCommentPopup-title": "Удалить комментарий?", + "no-comments": "Без комментариев", + "no-comments-desc": "Не видит комментарии и историю действий.", + "worker": "Исполнитель", + "worker-desc": "Может перемещать карточки, отмечаться как исполнитель и оставлять комментарии", + "computer": "Загрузить с компьютера", + "confirm-subtask-delete-popup": "Вы уверены, что хотите удалить подзадачу?", "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", "subtaskDeletePopup-title": "Delete Subtask?", "checklistDeletePopup-title": "Delete Checklist?", - "copy-card-link-to-clipboard": "Copy card link to clipboard", + "copy-card-link-to-clipboard": "Копировать ссылку на карточку в буфер обмена", "copy-text-to-clipboard": "Copy text to clipboard", - "linkCardPopup-title": "Link Card", - "searchElementPopup-title": "Search", - "copyCardPopup-title": "Copy Card", + "linkCardPopup-title": "Карточка-ссылка", + "searchElementPopup-title": "Поиск", + "copyCardPopup-title": "Копировать карточку", "copyManyCardsPopup-title": "Copy Template to Many Cards", - "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", - "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", - "create": "Create", - "createBoardPopup-title": "Create Board", - "chooseBoardSourcePopup-title": "Import board", - "createLabelPopup-title": "Create Label", - "createCustomField": "Create Field", - "createCustomFieldPopup-title": "Create Field", - "current": "current", - "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", - "custom-field-checkbox": "Checkbox", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", - "custom-field-date": "Date", - "custom-field-dropdown": "Dropdown List", - "custom-field-dropdown-none": "(none)", - "custom-field-dropdown-options": "List Options", - "custom-field-dropdown-options-placeholder": "Press enter to add more options", - "custom-field-dropdown-unknown": "(unknown)", - "custom-field-number": "Number", - "custom-field-text": "Text", - "custom-fields": "Custom Fields", - "date": "Date", - "decline": "Decline", - "default-avatar": "Default avatar", - "delete": "Delete", - "deleteCustomFieldPopup-title": "Delete Custom Field?", - "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", - "editCustomFieldPopup-title": "Edit Field", - "addReactionPopup-title": "Add reaction", - "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-vertical-scrollbars": "Enable vertical scrollbars", - "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", + "copyManyCardsPopup-instructions": "Названия и описания целевых карт в формате JSON", + "copyManyCardsPopup-format": "[ {\"title\": \"Название первой карточки\", \"description\":\"Описание первой карточки\"}, {\"title\":\"Название второй карточки\",\"description\":\"Описание второй карточки\"},{\"title\":\"Название последней карточки\",\"description\":\"Описание последней карточки\"} ]", + "create": "Создать", + "createBoardPopup-title": "Создать доску", + "chooseBoardSourcePopup-title": "Импортировать доску", + "createLabelPopup-title": "Создать метку", + "createCustomField": "Создать поле", + "createCustomFieldPopup-title": "Создать поле", + "current": "текущий", + "custom-field-delete-pop": "Отменить нельзя. Это удалит настраиваемое поле со всех карт и уничтожит его историю.", + "custom-field-checkbox": "Галочка", + "custom-field-currency": "Валюта", + "custom-field-currency-option": "Код валюты", + "custom-field-date": "Дата", + "custom-field-dropdown": "Выпадающий список", + "custom-field-dropdown-none": "(нет)", + "custom-field-dropdown-options": "Параметры списка", + "custom-field-dropdown-options-placeholder": "Нажмите «Ввод», чтобы добавить дополнительные параметры.", + "custom-field-dropdown-unknown": "(неизвестно)", + "custom-field-number": "Номер", + "custom-field-text": "Текст", + "custom-fields": "Настраиваемые поля", + "date": "Дата", + "decline": "Отклонить", + "default-avatar": "Аватар по умолчанию", + "delete": "Удалить", + "deleteCustomFieldPopup-title": "Удалить настраиваемые поля?", + "deleteLabelPopup-title": "Удалить метку?", + "description": "Описание", + "disambiguateMultiLabelPopup-title": "Разрешить конфликт меток", + "disambiguateMultiMemberPopup-title": "Разрешить конфликт участников", + "discard": "Отказать", + "done": "Готово", + "download": "Скачать", + "edit": "Редактировать", + "edit-avatar": "Изменить аватар", + "edit-profile": "Изменить профиль", + "edit-wip-limit": "Изменить лимит на кол-во задач", + "soft-wip-limit": "Мягкий лимит", + "editCardStartDatePopup-title": "Изменить дату начала", + "editCardDueDatePopup-title": "Изменить дату выполнения", + "editCustomFieldPopup-title": "Редактировать поле", + "addReactionPopup-title": "Добавить реакцию", + "editCardSpentTimePopup-title": "Изменить затраченное время", + "editLabelPopup-title": "Изменить метки", + "editNotificationPopup-title": "Редактировать уведомления", + "editProfilePopup-title": "Изменить профиль", + "email": "Эл.почта", + "email-enrollAccount-subject": "Аккаунт создан для вас здесь __url__", + "email-enrollAccount-text": "Привет __user__,\n\nДля того, чтобы начать использовать сервис, просто нажми на ссылку ниже.\n\n__url__\n\nСпасибо.", + "email-fail": "Отправка письма на EMail не удалась", + "email-fail-text": "Ошибка при попытке отправить письмо", + "email-invalid": "Неверный адрес электронной почты", + "email-invite": "Пригласить по электронной почте", + "email-invite-subject": "__inviter__ прислал вам приглашение", + "email-invite-text": "Дорогой __user__,\n\n__inviter__ пригласил вас присоединиться к доске \"__board__\" для сотрудничества.\n\nПожалуйста проследуйте по ссылке ниже:\n\n__url__\n\nСпасибо.", + "email-resetPassword-subject": "Перейдите по ссылке, чтобы сбросить пароль __url__", + "email-resetPassword-text": "Привет __user__,\n\nДля сброса пароля перейдите по ссылке ниже.\n\n__url__\n\nThanks.", + "email-sent": "Письмо отправлено", + "email-verifyEmail-subject": "Подтвердите вашу эл.почту перейдя по ссылке __url__", + "email-verifyEmail-text": "Привет __user__,\n\nДля подтверждения вашей электронной почты перейдите по ссылке ниже.\n\n__url__\n\nСпасибо.", + "enable-wip-limit": "Включить лимит на кол-во задач", + "error-board-doesNotExist": "Доска не найдена", + "error-board-notAdmin": "Вы должны обладать правами администратора этой доски, чтобы сделать это", + "error-board-notAMember": "Вы должны быть участником доски, чтобы сделать это", + "error-json-malformed": "Ваше текст не является правильным JSON", + "error-json-schema": "Содержимое вашего JSON не содержит информацию в корректном формате", "error-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) 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-orgname-taken": "This organization name is already taken", - "error-teamname-taken": "This team name is already taken", - "error-email-taken": "Email has already been taken", - "export-board": "Export board", - "export-board-json": "Export board to JSON", - "export-board-csv": "Export board to CSV", - "export-board-tsv": "Export board to TSV", - "export-board-excel": "Export board to Excel", - "user-can-not-export-excel": "User can not export Excel", - "export-board-html": "Export board to HTML", - "export-card": "Export card", - "export-card-pdf": "Export card to PDF", - "user-can-not-export-card-to-pdf": "User can not export card to PDF", - "exportBoardPopup-title": "Export board", - "exportCardPopup-title": "Export card", - "sort": "Sort", + "error-list-doesNotExist": "Список не найден", + "error-user-doesNotExist": "Пользователь не найден", + "error-user-notAllowSelf": "Вы не можете пригласить себя", + "error-user-notCreated": "Пользователь не создан", + "error-username-taken": "Это имя пользователя уже занято", + "error-orgname-taken": "Это название организации уже занято", + "error-teamname-taken": "Это название команды уже занято", + "error-email-taken": "Этот адрес уже занят", + "export-board": "Экспортировать доску", + "export-board-json": "Экспортировать доску в JSON", + "export-board-csv": "Экспортировать доску в CSV", + "export-board-tsv": "Экспортировать доску в TSV", + "export-board-excel": "Экспортировать доску в Excel", + "user-can-not-export-excel": "Пользователь не может экспортировать в Excel", + "export-board-html": "Экспортировать доску в HTML", + "export-card": "Экспорт карточки", + "export-card-pdf": "Экспорт карточки в PDF", + "user-can-not-export-card-to-pdf": "Пользователь не может экспортировать карточку в PDF", + "exportBoardPopup-title": "Экспортировать доску", + "exportCardPopup-title": "Экспорт карточки", + "sort": "Сортировать", "sorted": "Sorted", "remove-sort": "Remove sort", - "sort-desc": "Click to Sort List", - "list-sort-by": "Sort the List By:", - "list-label-modifiedAt": "Last Access Time", - "list-label-title": "Name of the List", - "list-label-sort": "Your Manual Order", + "sort-desc": "Нажмите, чтобы отсортировать список", + "list-sort-by": "Сортировать список по:", + "list-label-modifiedAt": "Время последнего доступа", + "list-label-title": "Название списка", + "list-label-sort": "Установленный вами порядок", "list-label-short-modifiedAt": "(L)", "list-label-short-title": "(N)", "list-label-short-sort": "(M)", - "filter": "Filter", - "filter-cards": "Filter Cards or Lists", - "filter-dates-label": "Filter by date", - "filter-no-due-date": "No due date", - "filter-overdue": "Overdue", - "filter-due-today": "Due today", - "filter-due-this-week": "Due this week", + "filter": "Фильтр", + "filter-cards": "Фильтр Карточек или Списков", + "filter-dates-label": "Фильтр по дате", + "filter-no-due-date": "Без срока выполнения", + "filter-overdue": "Просрочено", + "filter-due-today": "Крайний срок - сегодня", + "filter-due-this-week": "Крайний срок - эта неделя", "filter-due-next-week": "Due next week", - "filter-due-tomorrow": "Due tomorrow", - "list-filter-label": "Filter List by Title", - "filter-clear": "Clear filter", - "filter-labels-label": "Filter by label", - "filter-no-label": "No label", - "filter-member-label": "Filter by member", - "filter-no-member": "No member", - "filter-assignee-label": "Filter by assignee", - "filter-no-assignee": "No assignee", - "filter-custom-fields-label": "Filter by Custom Fields", - "filter-no-custom-fields": "No Custom Fields", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", - "filter-on": "Filter is on", - "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.", + "filter-due-tomorrow": "Крайний срок - завтра", + "list-filter-label": "Фильтровать Список по Названию", + "filter-clear": "Очистить фильтр", + "filter-labels-label": "Фильтр по метке", + "filter-no-label": "Нет метки", + "filter-member-label": "Фильтр по участнику", + "filter-no-member": "Нет участников", + "filter-assignee-label": "Фильтр по исполнителю", + "filter-no-assignee": "Не применимо", + "filter-custom-fields-label": "Фильтр по пользовательскому полю", + "filter-no-custom-fields": "Нет настраиваемых полей", + "filter-show-archive": "Показать архивные списки", + "filter-hide-empty": "Скрыть пустые списки", + "filter-on": "Включен фильтр", + "filter-on-desc": "Показываются карточки, соответствующие настройкам фильтра. Нажмите для редактирования.", "filter-to-selection": "Filter to selection", - "other-filters-label": "Other Filters", - "advanced-filter-label": "Advanced Filter", - "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", - "fullname": "Full Name", - "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", - "headerBarCreateBoardPopup-title": "Create Board", - "home": "Home", - "import": "Import", - "impersonate-user": "Impersonate user", - "link": "Link", - "import-board": "import board", - "import-board-c": "Import board", - "import-board-title-trello": "Import board from Trello", - "import-board-title-wekan": "Import board from previous export", - "import-board-title-csv": "Import board from CSV/TSV", - "from-trello": "From Trello", - "from-wekan": "From previous export", - "from-csv": "From CSV/TSV", - "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", - "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", - "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", - "import-json-placeholder": "Paste your valid JSON data here", - "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", - "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", - "import-show-user-mapping": "Review members mapping", - "import-user-select": "Pick your existing user you want to use as this member", - "importMapMembersAddPopup-title": "Select member", - "info": "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": "Move all cards in this list to Archive", - "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", - "list-move-cards": "Move all cards in this list", - "list-select-cards": "Select all cards in this list", - "set-color-list": "Set Color", - "listActionPopup-title": "List Actions", - "settingsUserPopup-title": "User Settings", - "settingsTeamPopup-title": "Team Settings", - "settingsOrgPopup-title": "Organization Settings", - "swimlaneActionPopup-title": "Swimlane Actions", - "swimlaneAddPopup-title": "Add a Swimlane below", - "listImportCardPopup-title": "Import a Trello card", - "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", - "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 move a list to Archive to remove it from the board and preserve the activity.", - "lists": "Lists", - "swimlanes": "Swimlanes", - "log-out": "Log Out", - "log-in": "Log In", - "loginPopup-title": "Log In", - "memberMenuPopup-title": "Member Settings", - "members": "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-label": "Set label for selection", - "multi-selection-member": "Set member for 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 cards in Archive.", - "no-archived-lists": "No lists in Archive.", - "no-archived-swimlanes": "No swimlanes in Archive.", - "no-results": "No results", - "normal": "Normal", - "normal-desc": "Can view and edit cards. Can't change settings.", - "not-accepted-yet": "Invitation not accepted yet", + "other-filters-label": "Другие фильтры", + "advanced-filter-label": "Расширенный фильтр", + "advanced-filter-description": "Расширенный фильтр позволяет написать строку, содержащую следующие операторы: == != <= >= && || ( ) Пробел используется как разделитель между операторами. Можно фильтровать все настраиваемые поля, вводя их имена и значения. Например: Поле1 == Значение1. Примечание. Если поля или значения содержат пробелы, нужно взять их в одинарные кавычки. Например: 'Поле 1' == 'Значение 1'. Для одиночных управляющих символов (' \\\\/), которые нужно пропустить, следует использовать \\\\. Например: Field1 = I\\\\'m. Также можно комбинировать несколько условий. Например: F1 == V1 || F1 == V2. Обычно все операторы интерпретируются слева направо, но можно изменить порядок, разместив скобки. Например: F1 == V1 && (F2 == V2 || F2 == V3). Также можно искать текстовые поля с помощью регулярных выражений: F1 == /Tes.*/i", + "fullname": "Полное имя", + "header-logo-title": "Вернуться к доскам.", + "hide-system-messages": "Скрыть системные сообщения", + "headerBarCreateBoardPopup-title": "Создать доску", + "home": "Главная", + "import": "Импорт", + "impersonate-user": "Деперсонифицировать пользователя", + "link": "Ссылка", + "import-board": "импортировать доску", + "import-board-c": "Импортировать доску", + "import-board-title-trello": "Импортировать доску из Trello", + "import-board-title-wekan": "Импортировать доску, сохраненную ранее.", + "import-board-title-csv": "Импортировать доску из CSV/TSV", + "from-trello": "Из Trello", + "from-wekan": "Сохраненную ранее", + "from-csv": "Из CSV/TSV", + "import-board-instruction-trello": "На вашей Trello доске нажмите “Menu” - “More” - “Print and export - “Export JSON” и скопируйте полученный текст", + "import-board-instruction-csv": "Вставка CSV/TSV данных", + "import-board-instruction-wekan": "На вашей доске перейдите в “Меню”, далее “Экспортировать доску” и скопируйте текст из скачаного файла", + "import-board-instruction-about-errors": "Даже если при импорте возникли ошибки, иногда импортирование проходит успешно – тогда доска появится на странице «Все доски».", + "import-json-placeholder": "Вставьте JSON сюда", + "import-csv-placeholder": "Вставьте CSV/TSV сюда", + "import-map-members": "Составить карту участников", + "import-members-map": "Вы импортировали доску с участниками. Пожалуйста, отметьте участников, которых вы хотите импортировать в качестве пользователей", + "import-members-map-note": "Внимание: участники без установленного соответствия будут назначены текущему пользователю.", + "import-show-user-mapping": "Проверить карту участников", + "import-user-select": "Выберите существующего пользователя, которого вы хотите использовать в качестве участника", + "importMapMembersAddPopup-title": "Выбрать участника", + "info": "Версия", + "initials": "Инициалы", + "invalid-date": "Неверная дата", + "invalid-time": "Некорректное время", + "invalid-user": "Неверный пользователь", + "joined": "вступил", + "just-invited": "Вас только что пригласили на эту доску", + "keyboard-shortcuts": "Сочетания клавиш", + "label-create": "Создать метку", + "label-default": "%s (по умолчанию)", + "label-delete-pop": "Это действие невозможно будет отменить. Эта метка будут удалена во всех карточках. Также будет удалена вся история этой метки.", + "labels": "Метки", + "language": "Язык", + "last-admin-desc": "Вы не можете изменять роли, для этого требуются права администратора.", + "leave-board": "Покинуть доску", + "leave-board-pop": "Вы уверенны, что хотите покинуть __boardTitle__? Вы будете удалены из всех карточек на этой доске.", + "leaveBoardPopup-title": "Покинуть доску?", + "link-card": "Доступна по ссылке", + "list-archive-cards": "Переместить все карточки в этом списке в Архив", + "list-archive-cards-pop": "Это действие удалит все карточки из этого списка с доски. Чтобы просмотреть карточки в Архиве и вернуть их на доску, нажмите “Меню” > “Архив”.", + "list-move-cards": "Переместить все карточки в этом списке", + "list-select-cards": "Выбрать все карточки в этом списке", + "set-color-list": "Задать цвет", + "listActionPopup-title": "Список действий", + "settingsUserPopup-title": "Пользовательские настройки", + "settingsTeamPopup-title": "Настройки команды", + "settingsOrgPopup-title": "Настройки организации", + "swimlaneActionPopup-title": "Действия с дорожкой", + "swimlaneAddPopup-title": "Добавить дорожку ниже", + "listImportCardPopup-title": "Импортировать Trello карточку", + "listImportCardsTsvPopup-title": "Импорт CSV/TSV из Excel", + "listMorePopup-title": "Поделиться", + "link-list": "Ссылка на список", + "list-delete-pop": "Все действия будут удалены из ленты активности участников, и вы не сможете восстановить список. Данное действие необратимо.", + "list-delete-suggest-archive": "Вы можете отправить список в Архив, чтобы убрать его с доски и при этом сохранить результаты.", + "lists": "Списки", + "swimlanes": "Дорожки", + "log-out": "Выйти", + "log-in": "Войти", + "loginPopup-title": "Войти", + "memberMenuPopup-title": "Настройки участника", + "members": "Участники", + "menu": "Меню", + "move-selection": "Переместить выделение", + "moveCardPopup-title": "Переместить карточку", + "moveCardToBottom-title": "Переместить вниз", + "moveCardToTop-title": "Переместить вверх", + "moveSelectionPopup-title": "Переместить выделение", + "multi-selection": "Выбрать несколько", + "multi-selection-label": "Задать метку для отмеченного", + "multi-selection-member": "Задать участника для отмеченного", + "multi-selection-on": "Выбрать несколько из", + "muted": "Не беспокоить", + "muted-info": "Вы НИКОГДА не будете уведомлены ни о каких изменениях в этой доске.", + "my-boards": "Мои доски", + "name": "Имя", + "no-archived-cards": "Нет карточек в Архиве", + "no-archived-lists": "Нет списков в Архиве", + "no-archived-swimlanes": "Нет дорожек в Архиве", + "no-results": "Ничего не найдено", + "normal": "Обычный", + "normal-desc": "Может редактировать карточки. Не может управлять настройками.", + "not-accepted-yet": "Приглашение еще не принято", "notify-participate": "Receive updates to any cards you participate as creator 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.", + "notify-watch": "Получать обновления по любым доскам, спискам и карточкам, на которые вы подписаны как наблюдатель.", + "optional": "не обязательно", + "or": "или", + "page-maybe-private": "Возможно, эта страница скрыта от незарегистрированных пользователей. Попробуйте <a href='%s'>войти на сайт</a>.", + "page-not-found": "Страница не найдена.", + "password": "Пароль", + "paste-or-dragdrop": "вставьте, или перетащите файл с изображением сюда (только графический файл)", + "participating": "Участвую", + "preview": "Предпросмотр", + "previewAttachedImagePopup-title": "Предпросмотр", + "previewClipboardImagePopup-title": "Предпросмотр", + "private": "Закрытая", + "private-desc": "Эта доска с ограниченным доступом. Только участники могут работать с ней.", + "profile": "Профиль", + "public": "Открытая", + "public-desc": "Эта доска может быть видна всем у кого есть ссылка. Также может быть проиндексирована поисковыми системами. Вносить изменения могут только участники.", + "quick-access-description": "Нажмите на звезду, что добавить ярлык доски на панель.", "remove-cover": "Remove cover image from minicard", - "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", + "remove-from-board": "Удалить с доски", + "remove-label": "Удалить метку", + "listDeletePopup-title": "Удалить список?", + "remove-member": "Удалить участника", + "remove-member-from-card": "Удалить из карточки", + "remove-member-pop": "Удалить участника __name__ (__username__) из доски __boardTitle__? Участник будет удален из всех карточек на этой доске. Также он получит уведомление о совершаемом действии.", + "removeMemberPopup-title": "Удалить участника?", + "rename": "Переименовать", + "rename-board": "Переименовать доску", + "restore": "Восстановить", "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", "rescue-card-description-dialogue": "Overwrite current card description with your changes?", - "save": "Save", - "search": "Search", - "rules": "Rules", - "search-cards": "Search from card/list titles, descriptions and custom fields on this board", - "search-example": "Write text you search and press Enter", - "select-color": "Select Color", - "select-board": "Select Board", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", - "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-filter-my-assigned-cards": "Filter my assigned cards", - "shortcut-show-shortcuts": "Bring up this shortcuts list", - "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-searchbar": "Toggle Search 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", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", + "save": "Сохранить", + "search": "Поиск", + "rules": "Правила", + "search-cards": "Поиск в названиях карточек/списков, описаниях и пользовательских полях на этой доске", + "search-example": "Введите текст, который ищете, и нажмите Ввод.", + "select-color": "Выбрать цвет", + "select-board": "Выбрать доску", + "set-wip-limit-value": "Устанавливает ограничение на максимальное количество задач в этом списке", + "setWipLimitPopup-title": "Задать лимит на кол-во задач", + "shortcut-assign-self": "Связать себя с текущей карточкой", + "shortcut-autocomplete-emoji": "Автозаполнение emoji", + "shortcut-autocomplete-members": "Автозаполнение участников", + "shortcut-clear-filters": "Сбросить все фильтры", + "shortcut-close-dialog": "Закрыть диалог", + "shortcut-filter-my-cards": "Показать мои карточки", + "shortcut-show-shortcuts": "Поднять список ярлыков", + "shortcut-toggle-filterbar": "Переместить фильтр на бововую панель", + "shortcut-toggle-searchbar": "Включить/выключить боковую панель поиска", + "shortcut-toggle-sidebar": "Переместить доску на боковую панель", + "show-cards-minimum-count": "Показывать количество карточек если их больше", + "sidebar-open": "Открыть Панель", + "sidebar-close": "Скрыть Панель", + "signupPopup-title": "Создать учетную запись", + "star-board-title": "Добавить в «Избранное». Эта доска будет всегда на виду.", + "starred-boards": "Добавленные в «Избранное»", + "starred-boards-description": "Избранные доски будут всегда вверху списка.", + "subscribe": "Подписаться", + "team": "Участники", + "this-board": "эту доску", + "this-card": "текущая карточка", + "spent-time-hours": "Затраченное время (в часах)", + "overtime-hours": "Переработка (в часах)", + "overtime": "Переработка", + "has-overtime-cards": "Имеются карточки с переработкой", + "has-spenttime-cards": "Имеются карточки с учетом затраченного времени", + "time": "Время", + "title": "Название", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", - "tracking": "Tracking", - "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", - "type": "Type", - "unassign-member": "Unassign member", - "unsaved-description": "You have an unsaved description.", - "unwatch": "Unwatch", - "upload": "Upload", - "upload-avatar": "Upload an avatar", - "uploaded-avatar": "Uploaded an avatar", - "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", - "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", - "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", - "custom-login-logo-image-url": "Custom Login Logo Image URL", - "custom-login-logo-link-url": "Custom Login Logo Link URL", + "tracking": "Отслеживание", + "tracking-info": "Вы будете уведомлены о любых изменениях в тех карточках, в которых вы являетесь создателем или участником.", + "type": "Тип", + "unassign-member": "Отменить назначение участника", + "unsaved-description": "У вас есть несохраненное описание.", + "unwatch": "Перестать следить", + "upload": "Загрузить", + "upload-avatar": "Загрузить аватар", + "uploaded-avatar": "Загруженный аватар", + "custom-top-left-corner-logo-image-url": "URL пользовательского изображения в левом верхнем углу", + "custom-top-left-corner-logo-link-url": "URL ссылки с пользовательского изображения в левом верхнем углу", + "custom-top-left-corner-logo-height": "Задать высоту логотипа в верхнем левом углу. По умолчанию 27", + "custom-login-logo-image-url": "URL пользовательского изображения при входе", + "custom-login-logo-link-url": "URL ссылки с пользовательского изображения при входе", "custom-help-link-url": "Custom Help Link URL", - "text-below-custom-login-logo": "Text below Custom Login Logo", - "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", - "username": "Username", - "import-usernames": "Import Usernames", - "view-it": "View it", - "warn-list-archived": "warning: this card is in an list at Archive", - "watch": "Watch", - "watching": "Watching", - "watching-info": "You will be notified of any change in this board", - "welcome-board": "Welcome Board", - "welcome-swimlane": "Milestone 1", - "welcome-list1": "Basics", - "welcome-list2": "Advanced", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", - "what-to-do": "What do you want to do?", - "wipLimitErrorPopup-title": "Invalid WIP Limit", - "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", - "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", - "admin-panel": "Admin Panel", - "settings": "Settings", - "people": "People", - "registration": "Registration", - "disable-self-registration": "Disable Self-Registration", + "text-below-custom-login-logo": "Текст под пользовательским изображением при входе", + "automatic-linked-url-schemes": "Пользовательская URL схема, которая должна быть кликабельной. Одна схема в каждой строке.", + "username": "Имя пользователя", + "import-usernames": "Импорт имен пользователей", + "view-it": "Просмотреть", + "warn-list-archived": "внимание: эта карточка из списка, который находится в Архиве", + "watch": "Следить", + "watching": "Полный контроль", + "watching-info": "Вы будете уведомлены об любых изменениях в этой доске.", + "welcome-board": "Приветственная Доска", + "welcome-swimlane": "Этап 1", + "welcome-list1": "Основы", + "welcome-list2": "Расширенно", + "card-templates-swimlane": "Шаблоны карточек", + "list-templates-swimlane": "Шаблоны списков", + "board-templates-swimlane": "Шаблоны доски", + "what-to-do": "Что вы хотите сделать?", + "wipLimitErrorPopup-title": "Некорректный лимит на кол-во задач", + "wipLimitErrorPopup-dialog-pt1": "Количество задач в этом списке превышает установленный вами лимит", + "wipLimitErrorPopup-dialog-pt2": "Пожалуйста, перенесите некоторые задачи из этого списка или увеличьте лимит на кол-во задач", + "admin-panel": "Административная Панель", + "settings": "Настройки", + "people": "Люди", + "registration": "Регистрация", + "disable-self-registration": "Отключить самостоятельную регистрацию", "disable-forgot-password": "Disable Forgot Password", - "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", - "email-smtp-test-subject": "SMTP Test Email", - "email-smtp-test-text": "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.", - "webhook-title": "Webhook Name", - "webhook-token": "Token (Optional for Authentication)", - "outgoing-webhooks": "Outgoing Webhooks", - "bidirectional-webhooks": "Two-Way Webhooks", - "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "Card Title Filter", - "disable-webhook": "Disable This Webhook", - "global-webhook": "Global Webhooks", - "new-outgoing-webhook": "New Outgoing Webhook", - "no-name": "(Unknown)", - "Node_version": "Node version", - "Meteor_version": "Meteor version", - "MongoDB_version": "MongoDB version", - "MongoDB_storage_engine": "MongoDB storage engine", - "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", - "OS_Arch": "OS Arch", - "OS_Cpus": "OS CPU Count", - "OS_Freemem": "OS Free Memory", - "OS_Loadavg": "OS Load Average", - "OS_Platform": "OS Platform", - "OS_Release": "OS Release", - "OS_Totalmem": "OS Total Memory", - "OS_Type": "OS Type", - "OS_Uptime": "OS Uptime", - "days": "days", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "show-field-on-card": "Show this field on card", - "automatically-field-on-card": "Add field to new cards", - "always-field-on-card": "Add field to all cards", - "showLabel-field-on-card": "Show field label on minicard", - "showSum-field-on-list": "Show sum of fields at top of list", - "yes": "Yes", - "no": "No", - "accounts": "Accounts", - "accounts-allowEmailChange": "Allow Email Change", - "accounts-allowUserNameChange": "Allow Username Change", - "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", - "tableVisibilityMode" : "Boards visibility", - "createdAt": "Created at", - "modifiedAt": "Modified at", - "verified": "Verified", - "active": "Active", - "card-received": "Received", - "card-received-on": "Received on", - "card-end": "End", - "card-end-on": "Ends on", - "editCardReceivedDatePopup-title": "Change received date", - "editCardEndDatePopup-title": "Change end date", - "setCardColorPopup-title": "Set color", - "setCardActionsColorPopup-title": "Choose a color", - "setSwimlaneColorPopup-title": "Choose a color", - "setListColorPopup-title": "Choose a color", - "assigned-by": "Assigned By", - "requested-by": "Requested By", - "card-sorting-by-number": "Card sorting by number", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "defaultdefault": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "card-settings": "Card Settings", + "invite": "Пригласить", + "invite-people": "Пригласить людей", + "to-boards": "В Доску(и)", + "email-addresses": "Email адрес", + "smtp-host-description": "Адрес SMTP сервера, который отправляет ваши электронные письма.", + "smtp-port-description": "Порт который SMTP-сервер использует для исходящих сообщений.", + "smtp-tls-description": "Включить поддержку TLS для SMTP сервера", + "smtp-host": "SMTP Хост", + "smtp-port": "SMTP Порт", + "smtp-username": "Имя пользователя", + "smtp-password": "Пароль", + "smtp-tls": "Поддержка TLS", + "send-from": "От", + "send-smtp-test": "Отправьте тестовое письмо себе", + "invitation-code": "Код приглашения", + "email-invite-register-subject": "__inviter__ прислал вам приглашение", + "email-invite-register-text": "Уважаемый __user__,\n\n__inviter__ приглашает вас использовать канбан-доску для совместной работы.\n\nПожалуйста, проследуйте по ссылке:\n__url__\n\nКод вашего приглашения: __icode__\n\nСпасибо.", + "email-smtp-test-subject": "Тестовое письмо SMTP", + "email-smtp-test-text": "Вы успешно отправили письмо", + "error-invitation-code-not-exist": "Код приглашения не существует", + "error-notAuthorized": "У вас нет доступа на просмотр этой страницы.", + "webhook-title": "Имя Веб-Хука", + "webhook-token": "Токен (Опционально для аутентификации)", + "outgoing-webhooks": "Исходящие Веб-Хуки", + "bidirectional-webhooks": "Двунаправленный Веб-Хук", + "outgoingWebhooksPopup-title": "Исходящие Веб-Хуки", + "boardCardTitlePopup-title": "Фильтр названий карточек", + "disable-webhook": "Отключить этот Веб-Хук", + "global-webhook": "Глобальные Веб-Хуки", + "new-outgoing-webhook": "Новый исходящий Веб-Хук", + "no-name": "(Неизвестный)", + "Node_version": "Версия NodeJS", + "Meteor_version": "Версия Meteor", + "MongoDB_version": "Версия MongoDB", + "MongoDB_storage_engine": "Движок хранилища MongoDB", + "MongoDB_Oplog_enabled": "MongoDB Oplog включен", + "OS_Arch": "Архитектура", + "OS_Cpus": "Количество процессоров", + "OS_Freemem": "Свободная память", + "OS_Loadavg": "Средняя загрузка", + "OS_Platform": "Платформа", + "OS_Release": "Версия ядра", + "OS_Totalmem": "Общая память", + "OS_Type": "Тип ОС", + "OS_Uptime": "Время работы", + "days": "дней", + "hours": "часы", + "minutes": "минуты", + "seconds": "секунды", + "show-field-on-card": "Показать это поле на карточке", + "automatically-field-on-card": "Добавить поле на новую карточку", + "always-field-on-card": "Добавить поле на все карточки", + "showLabel-field-on-card": "Показать имя поля на карточке", + "showSum-field-on-list": "Показать итоги полей сверху списка", + "yes": "Да", + "no": "Нет", + "accounts": "Учетные записи", + "accounts-allowEmailChange": "Разрешить изменение электронной почты", + "accounts-allowUserNameChange": "Разрешить изменение имени пользователя", + "tableVisibilityMode-allowPrivateOnly": "Видимость досок: Показывать только частные доски", + "tableVisibilityMode" : "Видимость досок", + "createdAt": "Создан", + "modifiedAt": "Изменено", + "verified": "Подтвержден", + "active": "Действующий", + "card-received": "Получено", + "card-received-on": "Получено с", + "card-end": "Завершено", + "card-end-on": "Завершится до", + "editCardReceivedDatePopup-title": "Изменить дату получения", + "editCardEndDatePopup-title": "Изменить дату завершения", + "setCardColorPopup-title": "Задать цвет", + "setCardActionsColorPopup-title": "Выберите цвет", + "setSwimlaneColorPopup-title": "Выберите цвет", + "setListColorPopup-title": "Выберите цвет", + "assigned-by": "Поручил", + "requested-by": "Запросил", + "card-sorting-by-number": "Сортировка карточек по номеру", + "board-delete-notice": "Удаление является постоянным. Вы потеряете все списки, карты и действия, связанные с этой доской.", + "delete-board-confirm-popup": "Все списки, карточки, метки и действия будут удалены, и вы не сможете восстановить содержимое доски. Отменить нельзя.", + "boardDeletePopup-title": "Удалить доску?", + "delete-board": "Удалить доску", + "default-subtasks-board": "Подзадача для доски __board__", + "default": "По умолчанию", + "defaultdefault": "По умолчанию", + "queue": "Очередь", + "subtask-settings": "Настройки подзадач", + "card-settings": "Настройки карточки", "minicard-settings": "Minicard Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "boardCardSettingsPopup-title": "Card Settings", + "boardSubtaskSettingsPopup-title": "Настройки подзадач для доски", + "boardCardSettingsPopup-title": "Настройки карточки", "boardMinicardSettingsPopup-title": "Minicard Settings", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", + "deposit-subtasks-board": "Отправлять подзадачи на доску:", + "deposit-subtasks-list": "Размещать подзадачи, отправленные на эту доску, в списке:", + "show-parent-in-minicard": "Указывать исходную карточку:", "description-on-minicard": "Description on minicard", "cover-attachment-on-minicard": "Cover image on minicard", "badge-attachment-on-minicard": "Count of attachments on minicard", "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent", - "activity-added-label": "added label '%s' to %s", - "activity-removed-label": "removed label '%s' from %s", - "activity-delete-attach": "deleted an attachment from %s", - "activity-added-label-card": "added label '%s'", - "activity-removed-label-card": "removed label '%s'", - "activity-delete-attach-card": "deleted an attachment", - "activity-set-customfield": "set custom field '%s' to '%s' in %s", - "activity-unset-customfield": "unset custom field '%s' in %s", - "r-rule": "Rule", - "r-add-trigger": "Add trigger", - "r-add-action": "Add action", - "r-board-rules": "Board rules", - "r-add-rule": "Add rule", - "r-view-rule": "View rule", - "r-delete-rule": "Delete rule", - "r-new-rule-name": "New rule title", - "r-no-rules": "No rules", - "r-trigger": "Trigger", - "r-action": "Action", - "r-when-a-card": "When a card", + "prefix-with-full-path": "Cверху, полный путь", + "prefix-with-parent": "Сверху, только имя", + "subtext-with-full-path": "Cнизу, полный путь", + "subtext-with-parent": "Снизу, только имя", + "change-card-parent": "Сменить исходную карточку", + "parent-card": "Исходная карточка", + "source-board": "Исходная доска", + "no-parent": "Не указывать", + "activity-added-label": "добавил метку '%s' на %s", + "activity-removed-label": "удалил метку '%s' с %s", + "activity-delete-attach": "удалил вложение из %s", + "activity-added-label-card": "добавил метку '%s'", + "activity-removed-label-card": "удалил метку '%s'", + "activity-delete-attach-card": "удалил вложение", + "activity-set-customfield": "сменил значение поля '%s' на '%s' в карточке %s", + "activity-unset-customfield": "очистил поле '%s' в карточке %s", + "r-rule": "Правило", + "r-add-trigger": "Задать условие", + "r-add-action": "Задать действие", + "r-board-rules": "Правила доски", + "r-add-rule": "Добавить правило", + "r-view-rule": "Показать правило", + "r-delete-rule": "Удалить правило", + "r-new-rule-name": "Имя нового правила", + "r-no-rules": "Нет правил", + "r-trigger": "Триггер", + "r-action": "Действие", + "r-when-a-card": "Когда карточка", "r-is": "is", - "r-is-moved": "is moved", - "r-added-to": "Added to", - "r-removed-from": "Removed from", - "r-the-board": "the board", - "r-list": "list", - "set-filter": "Set Filter", - "r-moved-to": "Moved to", - "r-moved-from": "Moved from", - "r-archived": "Moved to Archive", - "r-unarchived": "Restored from Archive", - "r-a-card": "a card", - "r-when-a-label-is": "When a label is", - "r-when-the-label": "When the label", - "r-list-name": "list name", - "r-when-a-member": "When a member is", - "r-when-the-member": "When the member", - "r-name": "name", - "r-when-a-attach": "When an attachment", - "r-when-a-checklist": "When a checklist is", - "r-when-the-checklist": "When the checklist", - "r-completed": "Completed", - "r-made-incomplete": "Made incomplete", - "r-when-a-item": "When a checklist item is", - "r-when-the-item": "When the checklist item", - "r-checked": "Checked", - "r-unchecked": "Unchecked", - "r-move-card-to": "Move card to", - "r-top-of": "Top of", - "r-bottom-of": "Bottom of", - "r-its-list": "its list", - "r-archive": "Move to Archive", - "r-unarchive": "Restore from Archive", - "r-card": "card", - "r-add": "Add", - "r-remove": "Remove", - "r-label": "label", - "r-member": "member", - "r-remove-all": "Remove all members from the card", - "r-set-color": "Set color to", - "r-checklist": "checklist", - "r-check-all": "Check all", - "r-uncheck-all": "Uncheck all", - "r-items-check": "items of checklist", - "r-check": "Check", - "r-uncheck": "Uncheck", - "r-item": "item", - "r-of-checklist": "of checklist", - "r-send-email": "Send an email", - "r-to": "to", - "r-of": "of", - "r-subject": "subject", - "r-rule-details": "Rule details", - "r-d-move-to-top-gen": "Move card to top of its list", - "r-d-move-to-top-spec": "Move card to top of list", - "r-d-move-to-bottom-gen": "Move card to bottom of its list", - "r-d-move-to-bottom-spec": "Move card to bottom of list", - "r-d-send-email": "Send email", - "r-d-send-email-to": "to", - "r-d-send-email-subject": "subject", - "r-d-send-email-message": "message", - "r-d-archive": "Move card to Archive", - "r-d-unarchive": "Restore card from Archive", - "r-d-add-label": "Add label", - "r-d-remove-label": "Remove label", - "r-create-card": "Create new card", - "r-in-list": "in list", - "r-in-swimlane": "in swimlane", - "r-d-add-member": "Add member", - "r-d-remove-member": "Remove member", - "r-d-remove-all-member": "Remove all member", - "r-d-check-all": "Check all items of a list", - "r-d-uncheck-all": "Uncheck all items of a list", - "r-d-check-one": "Check item", - "r-d-uncheck-one": "Uncheck item", - "r-d-check-of-list": "of checklist", - "r-d-add-checklist": "Add checklist", - "r-d-remove-checklist": "Remove checklist", - "r-by": "by", - "r-add-checklist": "Add checklist", - "r-with-items": "with items", - "r-items-list": "item1,item2,item3", - "r-add-swimlane": "Add swimlane", - "r-swimlane-name": "swimlane name", + "r-is-moved": "перемещается", + "r-added-to": "Добавлено в", + "r-removed-from": "Покидает", + "r-the-board": "доску", + "r-list": "список", + "set-filter": "Установить фильтр", + "r-moved-to": "Перемещается в", + "r-moved-from": "Покидает", + "r-archived": "Перемещена в архив", + "r-unarchived": "Восстановлена из архива", + "r-a-card": "карточку", + "r-when-a-label-is": "Когда метка", + "r-when-the-label": "Когда метка", + "r-list-name": "имя", + "r-when-a-member": "Когда участник", + "r-when-the-member": "Когда участник", + "r-name": "имя", + "r-when-a-attach": "Когда вложение", + "r-when-a-checklist": "Когда контрольный список", + "r-when-the-checklist": "Когда контрольный список", + "r-completed": "Завершен", + "r-made-incomplete": "Вновь открыт", + "r-when-a-item": "Когда пункт контрольного списка", + "r-when-the-item": "Когда пункт контрольного списка", + "r-checked": "Отмечен", + "r-unchecked": "Снят", + "r-move-card-to": "Переместить карточку в", + "r-top-of": "Начало", + "r-bottom-of": "Конец", + "r-its-list": "текущего списка", + "r-archive": "Переместить в архив", + "r-unarchive": "Восстановить из Архива", + "r-card": "карточку", + "r-add": "Создать", + "r-remove": "Удалить", + "r-label": "метку", + "r-member": "участника", + "r-remove-all": "Удалить всех участников из карточки", + "r-set-color": "Сменить цвет на", + "r-checklist": "контрольный список", + "r-check-all": "Отметить все", + "r-uncheck-all": "Снять все", + "r-items-check": "пункты контрольного списка", + "r-check": "Отметить", + "r-uncheck": "Снять", + "r-item": "пункт", + "r-of-checklist": "контрольного списка", + "r-send-email": "Отправить письмо", + "r-to": "кому", + "r-of": "из", + "r-subject": "тема", + "r-rule-details": "Содержание правила", + "r-d-move-to-top-gen": "Переместить карточку в начало текущего списка", + "r-d-move-to-top-spec": "Переместить карточку в начало списка", + "r-d-move-to-bottom-gen": "Переместить карточку в конец текущего списка", + "r-d-move-to-bottom-spec": "Переместить карточку в конец списка", + "r-d-send-email": "Отправить письмо", + "r-d-send-email-to": "кому", + "r-d-send-email-subject": "тема", + "r-d-send-email-message": "сообщение", + "r-d-archive": "Переместить карточку в Архив", + "r-d-unarchive": "Восстановить карточку из Архива", + "r-d-add-label": "Добавить метку", + "r-d-remove-label": "Удалить метку", + "r-create-card": "Создать новую карточку", + "r-in-list": "в списке", + "r-in-swimlane": "в дорожке", + "r-d-add-member": "Добавить участника", + "r-d-remove-member": "Удалить участника", + "r-d-remove-all-member": "Удалить всех участников", + "r-d-check-all": "Отметить все пункты в списке", + "r-d-uncheck-all": "Снять все пункты в списке", + "r-d-check-one": "Отметить пункт", + "r-d-uncheck-one": "Снять пункт", + "r-d-check-of-list": "контрольного списка", + "r-d-add-checklist": "Добавить контрольный список", + "r-d-remove-checklist": "Удалить контрольный список", + "r-by": "пользователем", + "r-add-checklist": "Добавить контрольный список", + "r-with-items": "с пунктами", + "r-items-list": "пункт1,пункт2,пункт3", + "r-add-swimlane": "Добавить дорожку", + "r-swimlane-name": "имя", "r-board-note": "Note: leave a field empty to match every possible value. ", - "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", - "r-when-a-card-is-moved": "When a card is moved to another list", - "r-set": "Set", - "r-update": "Update", - "r-datefield": "date field", - "r-df-start-at": "start", - "r-df-due-at": "due", - "r-df-end-at": "end", - "r-df-received-at": "received", - "r-to-current-datetime": "to current date/time", - "r-remove-value-from": "Remove value from", + "r-checklist-note": "Примечание: пункты контрольных списков при перечислении разделяются запятыми.", + "r-when-a-card-is-moved": "Когда карточка перемещена в другой список", + "r-set": "Установить", + "r-update": "Обновить", + "r-datefield": "поле даты", + "r-df-start-at": "в работе с", + "r-df-due-at": "выполнить к", + "r-df-end-at": "завершено", + "r-df-received-at": "получено", + "r-to-current-datetime": "в соответствии с текущей датой/временем", + "r-remove-value-from": "Очистить", "r-link-card": "Link card to", "ldap": "LDAP", "oauth2": "OAuth2", "cas": "CAS", - "authentication-method": "Authentication method", - "authentication-type": "Authentication type", - "custom-product-name": "Custom Product Name", - "layout": "Layout", - "hide-logo": "Hide Logo", + "authentication-method": "Способ авторизации", + "authentication-type": "Тип авторизации", + "custom-product-name": "Собственное наименование", + "layout": "Внешний вид", + "hide-logo": "Скрыть логотип", "hide-card-counter-list": "Hide card counter list on All Boards", "hide-board-member-list": "Hide board member list on All Boards", - "add-custom-html-after-body-start": "Add Custom HTML after <body> start", - "add-custom-html-before-body-end": "Add Custom HTML before </body> end", - "error-undefined": "Something went wrong", - "error-ldap-login": "An error occurred while trying to login", - "display-authentication-method": "Display Authentication Method", - "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Board", + "add-custom-html-after-body-start": "Добавить HTML после начала <body>", + "add-custom-html-before-body-end": "Добавить HTML до завершения </body>", + "error-undefined": "Что-то пошло не так", + "error-ldap-login": "Ошибка при попытке авторизации", + "display-authentication-method": "Показывать способ авторизации", + "oidc-button-text": "Изменить текст кнопки OIDC", + "default-authentication-method": "Способ авторизации по умолчанию", + "duplicate-board": "Клонировать доску", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", - "swimlaneDeletePopup-title": "Delete Swimlane ?", - "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", - "restore-all": "Restore all", - "delete-all": "Delete all", - "loading": "Loading, please wait.", - "previous_as": "last time was", - "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", - "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", - "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", - "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", - "a-dueAt": "modified due time to be", - "a-endAt": "modified ending time to be", - "a-startAt": "modified starting time to be", - "a-receivedAt": "modified received time to be", - "almostdue": "current due time %s is approaching", - "pastdue": "current due time %s is past", - "duenow": "current due time %s is today", - "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", - "act-withDue": "__list__/__card__ due reminders [__board__]", - "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", - "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", - "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", - "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", - "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.", - "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", - "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", - "accounts-allowUserDelete": "Allow users to self delete their account", - "hide-minicard-label-text": "Hide minicard label text", - "show-desktop-drag-handles": "Show desktop drag handles", - "assignee": "Assignee", - "cardAssigneesPopup-title": "Assignee", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card", + "swimlaneDeletePopup-title": "Удалить дорожку?", + "swimlane-delete-pop": "Все действия будут удалены из ленты активности участников, и вы не сможете восстановить дорожку. Данное действие необратимо.", + "restore-all": "Восстановить все", + "delete-all": "Удалить все", + "loading": "Идет загрузка, пожалуйста подождите", + "previous_as": "в прошлый раз был", + "act-a-dueAt": "изменил срок выполнения \nСтало: __timeValue__\nВ карточке: __card__\nранее было __timeOldValue__", + "act-a-endAt": "изменил время завершения на __timeValue__, было (__timeOldValue__)", + "act-a-startAt": "изменил время начала на __timeValue__, было (__timeOldValue__)", + "act-a-receivedAt": "изменил время получения на __timeValue__, было (__timeOldValue__)", + "a-dueAt": "изменил срок выполнения на", + "a-endAt": "изменил время завершения на", + "a-startAt": "изменил время начала работы на", + "a-receivedAt": "изменил время получения на", + "almostdue": "текущий срок выполнения %s приближается", + "pastdue": "текущий срок выполнения %s прошел", + "duenow": "текущий срок выполнения %s сегодня", + "act-newDue": "__list__/__card__ содержит 1-ое напоминание о сроке [__board__]", + "act-withDue": "__list__/__card__ напоминания о сроке выполнения [__board__]", + "act-almostdue": "напомнил, что скоро завершается срок выполнения (__timeValue__) карточки __card__", + "act-pastdue": "напомнил, что срок выполнения (__timeValue__) карточки __card__ прошел", + "act-duenow": "напомнил, что срок выполнения (__timeValue__) карточки __card__ — это уже сейчас", + "act-atUserComment": "Вас упомянули в [__board__] __list__/__card__", + "delete-user-confirm-popup": "Вы уверены, что хотите удалить аккаунт? Данное действие необратимо.", + "delete-team-confirm-popup": "Вы уверены, что хотите удалить эту команду? Эту операцию нельзя отменить.", + "delete-org-confirm-popup": "Вы уверены, что хотите удалить эту организацию? Эту операцию нельзя отменить.", + "accounts-allowUserDelete": "Разрешить пользователям удалять собственные аккаунты", + "hide-minicard-label-text": "Скрыть текст меток на карточках", + "show-desktop-drag-handles": "Показать ярлыки для перетаскивания", + "assignee": "Исполнитель", + "cardAssigneesPopup-title": "Исполнитель", + "addmore-detail": "Добавить более детальное описание", + "show-on-card": "Показать на карточке", "show-on-minicard": "Show on Minicard", - "new": "New", - "editOrgPopup-title": "Edit Organization", - "newOrgPopup-title": "New Organization", - "editTeamPopup-title": "Edit Team", - "newTeamPopup-title": "New Team", - "editUserPopup-title": "Edit User", - "newUserPopup-title": "New User", - "notifications": "Notifications", + "new": "Новый", + "editOrgPopup-title": "Редактировать организацию", + "newOrgPopup-title": "Новая организация", + "editTeamPopup-title": "Редактировать команду", + "newTeamPopup-title": "Новая команда", + "editUserPopup-title": "Редактировать пользователя", + "newUserPopup-title": "Новый пользователь", + "notifications": "Уведомления", "help": "Help", - "view-all": "View All", - "filter-by-unread": "Filter by Unread", - "mark-all-as-read": "Mark all as read", - "remove-all-read": "Remove all read", - "allow-rename": "Allow Rename", - "allowRenamePopup-title": "Allow Rename", - "start-day-of-week": "Set day of the week start", - "monday": "Monday", - "tuesday": "Tuesday", - "wednesday": "Wednesday", - "thursday": "Thursday", - "friday": "Friday", - "saturday": "Saturday", - "sunday": "Sunday", - "status": "Status", - "swimlane": "Swimlane", - "owner": "Owner", - "last-modified-at": "Last modified at", - "last-activity": "Last activity", - "voting": "Voting", - "archived": "Archived", - "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", - "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", - "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", - "task": "Task", - "create-task": "Create Task", - "ok": "OK", - "organizations": "Organizations", - "teams": "Teams", - "displayName": "Display Name", - "shortName": "Short Name", + "view-all": "Показать все", + "filter-by-unread": "Фильтр по непрочитанным", + "mark-all-as-read": "Отметить все как прочитанные", + "remove-all-read": "Удалить все прочитанные", + "allow-rename": "Разрешить переименование", + "allowRenamePopup-title": "Разрешить переименование", + "start-day-of-week": "Установить день начала недели", + "monday": "Понедельник", + "tuesday": "Вторник", + "wednesday": "Среда", + "thursday": "Четверг", + "friday": "Пятница", + "saturday": "Суббота", + "sunday": "Воскресенье", + "status": "Статус", + "swimlane": "Дорожка", + "owner": "Владелец", + "last-modified-at": "Последний раз изменено", + "last-activity": "Последние действия", + "voting": "Голосование", + "archived": "Архивировано", + "delete-linked-card-before-this-card": "Вы не можете удалить карточку, не удалив связанную c ней карточку, которая имеет", + "delete-linked-cards-before-this-list": "Вы не можете удалить этот список, не удалив карточки, которые указывают на карточки в этом списке", + "hide-checked-items": "Спрятать отмеченные", + "task": "Задача", + "create-task": "Создать задачу", + "ok": "Ok", + "organizations": "Организации", + "teams": "Команды", + "displayName": "Отображаемое название", + "shortName": "Короткое название", "autoAddUsersWithDomainName": "Automatically add users with the domain name", - "website": "Website", - "person": "Person", - "my-cards": "My Cards", - "card": "Card", - "list": "List", - "board": "Board", + "website": "Вебсайт", + "person": "Представитель", + "my-cards": "Мои карточки", + "card": "Карточка", + "list": "Список", + "board": "Доска", "context-separator": "/", "myCardsViewChange-title": "My Cards View", "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "Boards", + "myCardsViewChange-choice-boards": "Доски", "myCardsViewChange-choice-table": "Table", - "myCardsSortChange-title": "My Cards Sort", - "myCardsSortChangePopup-title": "My Cards Sort", - "myCardsSortChange-choice-board": "By Board", - "myCardsSortChange-choice-dueat": "By Due Date", - "dueCards-title": "Due Cards", - "dueCardsViewChange-title": "Due Cards View", - "dueCardsViewChangePopup-title": "Due Cards View", - "dueCardsViewChange-choice-me": "Me", - "dueCardsViewChange-choice-all": "All Users", - "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", - "broken-cards": "Broken Cards", - "board-title-not-found": "Board '%s' not found.", - "swimlane-title-not-found": "Swimlane '%s' not found.", - "list-title-not-found": "List '%s' not found.", - "label-not-found": "Label '%s' not found.", - "label-color-not-found": "Label color %s not found.", - "user-username-not-found": "Username '%s' not found.", - "comment-not-found": "Card with comment containing text '%s' not found.", + "myCardsSortChange-title": "Сортировать мои карточки", + "myCardsSortChangePopup-title": "Сортировать мои карточки", + "myCardsSortChange-choice-board": "По доскам", + "myCardsSortChange-choice-dueat": "По сроку выполнения", + "dueCards-title": "Карточки с установленным сроком", + "dueCardsViewChange-title": "Просмотр карточки с установленным сроком", + "dueCardsViewChangePopup-title": "Просмотр карточки с установленным сроком", + "dueCardsViewChange-choice-me": "Мне", + "dueCardsViewChange-choice-all": "Все пользователи", + "dueCardsViewChange-choice-all-description": "Показать все незавершенные карточки с установленным сроком с досок для которых у пользователя есть разрешения.", + "broken-cards": "Просроченные карточки", + "board-title-not-found": "Доска '%s' не найдена.", + "swimlane-title-not-found": "Дорожка '%s' не найдена.", + "list-title-not-found": "Список '%s' не найден.", + "label-not-found": "Метка '%1' не найдена.", + "label-color-not-found": "Цвет метки '%1' не найден.", + "user-username-not-found": "Имя пользователя '%s' не найдено.", + "comment-not-found": "Карточка с комментарием, содержащим текст '%s', не найдена.", "org-name-not-found": "Organization '%s' not found.", "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "Search All Boards", - "no-cards-found": "No Cards Found", - "one-card-found": "One Card Found", - "n-cards-found": "%s Cards Found", - "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "board", - "operator-board-abbrev": "b", - "operator-swimlane": "swimlane", - "operator-swimlane-abbrev": "s", - "operator-list": "list", + "globalSearch-title": "Искать на всех досках", + "no-cards-found": "Ни одной карточки не найдено", + "one-card-found": "Найдена одна карточка", + "n-cards-found": "Карточек найдено %s", + "n-n-of-n-cards-found": "__start__-__end__ из __total__ карточек найдено", + "operator-board": "доска", + "operator-board-abbrev": "д", + "operator-swimlane": "дорожка", + "operator-swimlane-abbrev": "дор.", + "operator-list": "список", "operator-list-abbrev": "l", - "operator-label": "label", + "operator-label": "метку", "operator-label-abbrev": "#", - "operator-user": "user", + "operator-user": "пользователь", "operator-user-abbrev": "@", - "operator-member": "member", - "operator-member-abbrev": "m", - "operator-assignee": "assignee", - "operator-assignee-abbrev": "a", - "operator-creator": "creator", - "operator-status": "status", - "operator-due": "due", - "operator-created": "created", - "operator-modified": "modified", - "operator-sort": "sort", - "operator-comment": "comment", - "operator-has": "has", - "operator-limit": "limit", + "operator-member": "участника", + "operator-member-abbrev": "м", + "operator-assignee": "Кому назначено", + "operator-assignee-abbrev": "а", + "operator-creator": "автор", + "operator-status": "статус", + "operator-due": "выполнить к", + "operator-created": "создано", + "operator-modified": "изменено", + "operator-sort": "сортировка", + "operator-comment": "комментарий", + "operator-has": "имеет", + "operator-limit": "лимит", "operator-debug": "debug", "operator-org": "org", "operator-team": "team", - "predicate-archived": "archived", - "predicate-open": "open", - "predicate-ended": "ended", - "predicate-all": "all", - "predicate-overdue": "overdue", - "predicate-week": "week", - "predicate-month": "month", - "predicate-quarter": "quarter", - "predicate-year": "year", - "predicate-due": "due", - "predicate-modified": "modified", - "predicate-created": "created", - "predicate-attachment": "attachment", - "predicate-description": "description", - "predicate-checklist": "checklist", - "predicate-start": "start", - "predicate-end": "end", - "predicate-assignee": "assignee", - "predicate-member": "member", - "predicate-public": "public", - "predicate-private": "private", + "predicate-archived": "архивировано", + "predicate-open": "открыт", + "predicate-ended": "завершено", + "predicate-all": "все", + "predicate-overdue": "просрочено", + "predicate-week": "неделя", + "predicate-month": "месяц", + "predicate-quarter": "квартал", + "predicate-year": "год", + "predicate-due": "выполнить к", + "predicate-modified": "изменено", + "predicate-created": "создано", + "predicate-attachment": "вложение", + "predicate-description": "описание", + "predicate-checklist": "контрольный список", + "predicate-start": "в работе с", + "predicate-end": "завершено", + "predicate-assignee": "Кому назначено", + "predicate-member": "участника", + "predicate-public": "общедоступно", + "predicate-private": "приватно", "predicate-selector": "selector", "predicate-projection": "projection", - "operator-unknown-error": "%s is not an operator", - "operator-number-expected": "operator __operator__ expected a number, got '__value__'", - "operator-sort-invalid": "sort of '%s' is invalid", - "operator-status-invalid": "'%s' is not a valid status", - "operator-has-invalid": "%s is not a valid existence check", - "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", + "operator-unknown-error": "%1 не оператор", + "operator-number-expected": "оператор __operator__ используется с числом, задано '__value__'", + "operator-sort-invalid": "сортировка '%s' неверна", + "operator-status-invalid": "'%s' не допустимый статус", + "operator-has-invalid": "%s неверная проверка присутствия", + "operator-limit-invalid": "%s неверное ограничение. Ограничение должно быть положительным целым.", "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "Next Page", - "previous-page": "Previous Page", - "heading-notes": "Notes", - "globalSearch-instructions-heading": "Search Instructions", - "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", - "globalSearch-instructions-operators": "Available operators:", - "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", - "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", - "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", - "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", - "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", - "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", - "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", + "next-page": "Следующая страница", + "previous-page": "Предыдущая страница", + "heading-notes": "Заметки", + "globalSearch-instructions-heading": "Инструкция по поиску", + "globalSearch-instructions-description": "Поисковая строка может содержать операторы для уточнения запроса. Оператор задается именем оператора и значением разделенными двоеточием. Например, оператор 'list:Blocked' ограничит результат запроса карточками состоящими в списке 'Blocked'. Если значение содержит пробелы или специальные символы, то оно должно быть заключено в кавычки(__operator_list__:\"To Review\").", + "globalSearch-instructions-operators": "Доступные операторы:", + "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - карточки соответствуют: *<title>*", + "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - карточки в списке соответствуют: *<title>*", + "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - карточки на дорожках, соответствующих *<title>*", + "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - карточки с комментарием содержащим *<text>*.", + "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - карточки, которые имеют метку соответствующую *<color>* or *<name>", + "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - сокращение для `__operator_label__:<color>` или `__operator_label__:<name>`", + "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - карточки в которых *<username>* *участник* или *исполнитель*", + "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - сокращение для `пользователь:<username>`", + "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - карточки, в которых *<username>* *участник*", + "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - карточки, в которых *<username>* *исполнитель*", + "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - карточки, где *<username>* является автором", "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", - "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", - "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", - "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", - "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", - "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", - "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", - "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", - "globalSearch-instructions-notes-1": "Multiple operators may be specified.", - "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", - "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", - "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", - "globalSearch-instructions-notes-4": "Text searches are case insensitive.", - "globalSearch-instructions-notes-5": "By default archived cards are not searched.", - "link-to-search": "Link to this search", + "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - карточки с датой завершения до *<n>* дней от текущей даты. `__operator_due__:__predicate_overdue__ список всех просроченных карточек.", + "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - карточки, которые были созданы до *<n>* дней назад", + "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - карточки, который изменены до *<n>* дней назад", + "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - где *<status>* что-то из следующего:", + "globalSearch-instructions-status-archived": "`__predicate_archived__` - архивированные карточки", + "globalSearch-instructions-status-all": "`__predicate_all__` - все архивированные и не архивированные карточки", + "globalSearch-instructions-status-ended": "`__predicate_ended__` - карточки с датой завершения", + "globalSearch-instructions-status-public": "`__predicate_public__` - карточки только на публичных досках", + "globalSearch-instructions-status-private": "`__predicate_private__` - карточки только на личных досках", + "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - где *<field>* что-либо из `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` или `__predicate_member__`. Указание `-` перед *<field>* производит поиск по отсутствию значения в указанном поле. (напр. `has:-due` поиск карточек без даты завершения).", + "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - где*<sort-name>* что-либо из `__predicate_due__`, `__predicate_created__` или `__predicate_modified__`. Для сортировки по убыванию, укажите `-` перед названием сортировки.", + "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - где *<n>* положительное целое определяющее количество карточек на одной странице.", + "globalSearch-instructions-notes-1": "Может быть задано несколько операторов.", + "globalSearch-instructions-notes-2": "Одинаковые операторы объединяются логическим \"ИЛИ\", например:\n`__operator_list__:Available __operator_list__:Blocked` вернет карточки, которые содержатся в списке *Blocked* или *Available*.", + "globalSearch-instructions-notes-3": "Разные операторы объединяются логическим \"И\". Возвращаются только объекты удовлетворяющие всем заданным условиям.`__operator_list__:Available __operator_label__:red` вернет карточки, которые содержатся в списке *Available* и имеют метку *red*.", + "globalSearch-instructions-notes-3-2": "Количество дней может быть задано положительным или отрицательным целым или используя `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` или `__predicate_year__` для текущего периода.", + "globalSearch-instructions-notes-4": "Текстовый поиск нечувствителен к регистру символов.", + "globalSearch-instructions-notes-5": "По умолчанию, поиск в архивированных карточках не производится.", + "link-to-search": "Ссылка на этот поиск", "excel-font": "Arial", - "number": "Number", - "label-colors": "Label Colors", - "label-names": "Label Names", - "archived-at": "archived at", - "sort-cards": "Sort Cards", + "number": "Номер", + "label-colors": "Цвета меток", + "label-names": "Названия меток", + "archived-at": "архивировано", + "sort-cards": "Сортировать карточки", "sort-is-on": "Sort is on", - "cardsSortPopup-title": "Sort Cards", - "due-date": "Due Date", - "server-error": "Server Error", - "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", - "title-alphabetically": "Title (Alphabetically)", - "created-at-newest-first": "Created At (Newest First)", - "created-at-oldest-first": "Created At (Oldest First)", - "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", - "move-swimlane": "Move Swimlane", - "moveSwimlanePopup-title": "Move Swimlane", - "custom-field-stringtemplate": "String Template", - "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", - "custom-field-stringtemplate-separator": "Separator (use or   for a space)", - "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", - "creator": "Creator", - "creator-on-minicard": "Creator on minicard", - "filesReportTitle": "Files Report", - "reports": "Reports", - "rulesReportTitle": "Rules Report", + "cardsSortPopup-title": "Сортировать карточки", + "due-date": "Назначенная дата", + "server-error": "Ошибка сервера", + "server-error-troubleshooting": "Пожалуйста отправьте описание ошибки созданное сервером.\nДля установки с помощью snap, запустите: `sudo snap logs wekan.wekan`\nДля установки с помощью Docker, запустите: `sudo docker logs wekan-app`", + "title-alphabetically": "Название (по алфавиту)", + "created-at-newest-first": "Дата создания (сначала новые)", + "created-at-oldest-first": "Дата создания (сначала старые)", + "links-heading": "Ссылки", + "hide-system-messages-of-all-users": "Скрыть системные сообщения всех пользователей", + "now-system-messages-of-all-users-are-hidden": "Системные сообщения всех пользователей скрыты", + "move-swimlane": "Переместить дорожку", + "moveSwimlanePopup-title": "Переместить дорожку", + "custom-field-stringtemplate": "Строковый шаблон", + "custom-field-stringtemplate-format": "Формат (используйте %{значение} для подстановки)", + "custom-field-stringtemplate-separator": "Разделитель (для пробела используйте или  )", + "custom-field-stringtemplate-item-placeholder": "Нажмите «Ввод», чтобы добавить больше элементов.", + "creator": "Автор", + "filesReportTitle": "Отчёт по файлам", + "reports": "Отчёты", + "rulesReportTitle": "Отчёт по правилам", "boardsReportTitle": "Boards Report", "cardsReportTitle": "Cards Report", - "copy-swimlane": "Copy Swimlane", - "copySwimlanePopup-title": "Copy Swimlane", - "display-card-creator": "Display Card Creator", - "wait-spinner": "Wait Spinner", - "Bounce": "Bounce Wait Spinner", - "Cube": "Cube Wait Spinner", - "Cube-Grid": "Cube-Grid Wait Spinner", - "Dot": "Dot Wait Spinner", - "Double-Bounce": "Double Bounce Wait Spinner", - "Rotateplane": "Rotateplane Wait Spinner", - "Scaleout": "Scaleout Wait Spinner", - "Wave": "Wave Wait Spinner", - "maximize-card": "Maximize Card", - "minimize-card": "Minimize Card", - "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", - "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", + "copy-swimlane": "Скопировать дорожку", + "copySwimlanePopup-title": "Скопировать дорожку", + "display-card-creator": "Показать создателя карты", + "wait-spinner": "Спинер ожидания", + "Bounce": "Прыгающий спинер ожидания", + "Cube": "Кубический спинер ожидания", + "Cube-Grid": "Сетка кубиков", + "Dot": "Точки", + "Double-Bounce": "Двойной прыгающий спинер ожидания", + "Rotateplane": "Врщающийся лист", + "Scaleout": "Увеличивающийся-уменьшающийся спиннер", + "Wave": "Волновой спиннер", + "maximize-card": "Максимизировать карточку", + "minimize-card": "Минимизировать карточку", + "delete-org-warning-message": "Невозможно удалить эту организацию, она включает в себя как минимум одного пользователя", + "delete-team-warning-message": "Невозможно удалить эту команду, она включает в себя как минимум одного пользователя", "subject": "Subject", "details": "Details", "carbon-copy": "Carbon Copy (Cc:)", @@ -1172,7 +1159,7 @@ "add-teams-label": "Added teams are displayed below:", "remove-team-from-table": "Are you sure you want to remove this team from the board ?", "confirm-btn": "Confirm", - "remove-btn": "Remove", + "remove-btn": "Удалить", "filter-card-title-label": "Filter by card title", "invite-people-success": "Invitation to register sent with success", "invite-people-error": "Error while sending invitation to register", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1227,9 +1211,9 @@ "version-name": "Version-Name", "size": "Size", "storage": "Storage", - "action": "Action", + "action": "Действие", "board-title": "Board Title", - "attachmentRenamePopup-title": "Rename", + "attachmentRenamePopup-title": "Переименовать", "uploading": "Uploading", "remaining_time": "Remaining time", "speed": "Speed", @@ -1240,7 +1224,7 @@ "forgot-password": "Forgot password", "minicardDetailsActionsPopup-title": "Card Details", "Mongo_sessions_count": "Mongo sessions count", - "change-visibility": "Change Visibility", + "change-visibility": "Изменить настройки видимости", "max-upload-filesize": "Max upload filesize in bytes:", "allowed-upload-filetypes": "Allowed upload filetypes:", "max-avatar-filesize": "Max avatar filesize in bytes:", @@ -1254,19 +1238,10 @@ "editTranslationPopup-title": "Edit custom translation string", "settingsTranslationPopup-title": "Delete this custom translation string?", "translation": "Translation", - "text": "Text", + "text": "Текст", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ru.i18n.json b/imports/i18n/data/ru.i18n.json index 252ddb13d..33f158b2b 100644 --- a/imports/i18n/data/ru.i18n.json +++ b/imports/i18n/data/ru.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s теперь в Архиве", "activity-attached": "прикрепил %s к %s", "activity-created": "создал %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "создал настраиваемое поле %s", "activity-excluded": "исключил %s из %s", "activity-imported": "импортировал %s в %s из %s", @@ -86,12 +85,10 @@ "add-card": "Добавить карточку", "add-card-to-top-of-list": "Добавить карточку в начало списка", "add-card-to-bottom-of-list": "Добавить карточку в конец списка", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Настроить ширину списка", + "set-list-width": "Настроить ширину списка", + "set-list-width-value": "Ширина списка (px)", + "list-width-error-message": "Ширина списка может принимать только положительное значение", "setSwimlaneHeightPopup-title": "Настроить высоту дорожки", "set-swimlane-height": "Настроить высоту дорожки", "set-swimlane-height-value": "Высота дорожки (px)", @@ -106,7 +103,7 @@ "add-cover": "Добавить обложку на миникарточку", "add-label": "Добавить метку", "add-list": "Добавить простой список", - "add-after-list": "Добавить после списка", + "add-after-list": "Add After List", "add-members": "Добавить участника", "added": "Добавлено", "addMemberPopup-title": "Участники", @@ -149,10 +146,10 @@ "avatar-too-big": "Аватар слишком большой (__size__ максимум)", "back": "Назад", "board-change-color": "Изменить цвет", - "board-change-background-image": "Изменить фон", - "board-background-image-url": "URL фона", - "add-background-image": "Добавить фон", - "remove-background-image": "Удалить фон", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", "show-at-all-boards-page" : "Показать на всех досках", "board-info-on-my-boards" : "Настройки всех досок", "boardInfoOnMyBoardsPopup-title" : "Настройки всех досок", @@ -165,9 +162,9 @@ "board-public-info": "Эта доска будет <strong>доступной всем</strong>.", "board-drag-drop-reorder-or-click-open": "Перетаскивайте, чтобы упорядочить значки доски. Нажмите значок доски чтобы открыть доску.", "boardChangeColorPopup-title": "Изменить фон доски", - "boardChangeBackgroundImagePopup-title": "Изменить фон", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "Изменить цвет", - "allBoardsChangeBackgroundImagePopup-title": "Изменить фон", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "Переименовать доску", "boardChangeVisibilityPopup-title": "Изменить настройки видимости", "boardChangeWatchPopup-title": "Режимы оповещения", @@ -266,9 +263,6 @@ "checklists": "Контрольные списки", "click-to-star": "Добавить в «Избранное»", "click-to-unstar": "Удалить из «Избранного»", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Буфер обмена или drag & drop", "close": "Закрыть", "close-board": "Закрыть доску", @@ -300,7 +294,6 @@ "color-white": "белый", "color-yellow": "желтый", "unset-color": "Убрать", - "comments": "Comments", "comment": "Добавить комментарий", "comment-placeholder": "Написать комментарий", "comment-only": "Только комментирование", @@ -383,7 +376,6 @@ "email-sent": "Письмо отправлено", "email-verifyEmail-subject": "Подтвердите вашу эл.почту перейдя по ссылке __url__", "email-verifyEmail-text": "Привет __user__,\n\nДля подтверждения вашей электронной почты перейдите по ссылке ниже.\n\n__url__\n\nСпасибо.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Включить лимит на кол-во задач", "error-board-doesNotExist": "Доска не найдена", "error-board-notAdmin": "Вы должны обладать правами администратора этой доски, чтобы сделать это", @@ -451,7 +443,7 @@ "advanced-filter-description": "Расширенный фильтр позволяет написать строку, содержащую следующие операторы: == != <= >= && || ( ) Пробел используется как разделитель между операторами. Можно фильтровать все настраиваемые поля, вводя их имена и значения. Например: Поле1 == Значение1. Примечание. Если поля или значения содержат пробелы, нужно взять их в одинарные кавычки. Например: 'Поле 1' == 'Значение 1'. Для одиночных управляющих символов (' \\\\/), которые нужно пропустить, следует использовать \\\\. Например: Field1 = I\\\\'m. Также можно комбинировать несколько условий. Например: F1 == V1 || F1 == V2. Обычно все операторы интерпретируются слева направо, но можно изменить порядок, разместив скобки. Например: F1 == V1 && (F2 == V2 || F2 == V3). Также можно искать текстовые поля с помощью регулярных выражений: F1 == /Tes.*/i", "fullname": "Полное имя", "header-logo-title": "Вернуться к доскам.", - "show-activities": "Show Activities", + "hide-system-messages": "Скрыть системные сообщения", "headerBarCreateBoardPopup-title": "Создать доску", "home": "Главная", "import": "Импорт", @@ -558,7 +550,7 @@ "public": "Открытая", "public-desc": "Эта доска может быть видна всем у кого есть ссылка. Также может быть проиндексирована поисковыми системами. Вносить изменения могут только участники.", "quick-access-description": "Нажмите на звезду, что добавить ярлык доски на панель.", - "remove-cover": "Удалить изображение обложки из мини-карточки", + "remove-cover": "Remove cover image from minicard", "remove-from-board": "Удалить с доски", "remove-label": "Удалить метку", "listDeletePopup-title": "Удалить список?", @@ -580,14 +572,12 @@ "select-board": "Выбрать доску", "set-wip-limit-value": "Устанавливает ограничение на максимальное количество задач в этом списке", "setWipLimitPopup-title": "Задать лимит на кол-во задач", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Связать себя с текущей карточкой", "shortcut-autocomplete-emoji": "Автозаполнение emoji", "shortcut-autocomplete-members": "Автозаполнение участников", "shortcut-clear-filters": "Сбросить все фильтры", "shortcut-close-dialog": "Закрыть диалог", "shortcut-filter-my-cards": "Показать мои карточки", - "shortcut-filter-my-assigned-cards": "Отфильтровать назначенные мне карточки", "shortcut-show-shortcuts": "Поднять список ярлыков", "shortcut-toggle-filterbar": "Переместить фильтр на бововую панель", "shortcut-toggle-searchbar": "Включить/выключить боковую панель поиска", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Имеются карточки с учетом затраченного времени", "time": "Время", "title": "Название", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Включить метки 1-9 для карточки. Множественный выбор добавляет метки 1-9", "remove-labels-multiselect": "Множественный выбор удаляет метки 1-9", "tracking": "Отслеживание", @@ -752,7 +741,7 @@ "description-on-minicard": "Описание на миникарточке", "cover-attachment-on-minicard": "Обложка на миникарточке", "badge-attachment-on-minicard": "Количество вложений на миникарточке", - "card-sorting-by-number-on-minicard": "Сортировка по номеру на мини-карточке", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", "prefix-with-full-path": "Cверху, полный путь", "prefix-with-parent": "Сверху, только имя", "subtext-with-full-path": "Cнизу, полный путь", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Вы не можете удалить карточку, не удалив связанную c ней карточку, которая имеет", "delete-linked-cards-before-this-list": "Вы не можете удалить этот список, не удалив карточки, которые указывают на карточки в этом списке", "hide-checked-items": "Спрятать отмеченные", - "hide-finished-checklist": "Hide finished checklist", "task": "Задача", "create-task": "Создать задачу", "ok": "Ok", @@ -974,7 +962,7 @@ "teams": "Команды", "displayName": "Отображаемое название", "shortName": "Короткое название", - "autoAddUsersWithDomainName": "Автоматически добавлять пользователей с доменным именем", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Вебсайт", "person": "Представитель", "my-cards": "Мои карточки", @@ -1111,7 +1099,7 @@ "label-names": "Названия меток", "archived-at": "архивировано", "sort-cards": "Сортировать карточки", - "sort-is-on": "Сортировка включена", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "Сортировать карточки", "due-date": "Назначенная дата", "server-error": "Ошибка сервера", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Дата создания (сначала новые)", "created-at-oldest-first": "Дата создания (сначала старые)", "links-heading": "Ссылки", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Скрыть системные сообщения всех пользователей", + "now-system-messages-of-all-users-are-hidden": "Системные сообщения всех пользователей скрыты", "move-swimlane": "Переместить дорожку", "moveSwimlanePopup-title": "Переместить дорожку", "custom-field-stringtemplate": "Строковый шаблон", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Разделитель (для пробела используйте или  )", "custom-field-stringtemplate-item-placeholder": "Нажмите «Ввод», чтобы добавить больше элементов.", "creator": "Автор", - "creator-on-minicard": "Автор на мини-карточке", "filesReportTitle": "Отчёт по файлам", "reports": "Отчёты", "rulesReportTitle": "Отчёт по правилам", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Действия Чек-листа", "moveChecklist": "Переместить Чек-лист", "moveChecklistPopup-title": "Переместить Чек-лист", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Новая строка создает пункт контрольного списка", "copyChecklist": "Скопировать Чек-лист", "copyChecklistPopup-title": "Скопировать Чек-лист", "card-show-lists": "Просмотр списка карточек", @@ -1246,27 +1230,18 @@ "max-avatar-filesize": "Максимальный размер аватара (в байтах):", "allowed-avatar-filetypes": "Типы файлов аватара:", "invalid-file": "Если имя файла недопустимо, загрузка или переименование будут отменены.", - "preview-pdf-not-supported": "Ваше устройство не поддерживает предварительный просмотр PDF. Попробуйте загрузить.", - "drag-board": "Перетащить доску", - "translation-number": "Количество пользовательских строк перевода:", - "delete-translation-confirm-popup": "Вы уверены, что хотите удалить эту строку специального перевода? Отменить действие нельзя.", - "newTranslationPopup-title": "Новая строка индивидуального перевода", - "editTranslationPopup-title": "Изменить строку специального перевода", - "settingsTranslationPopup-title": "Удалить эту строку специального перевода?", - "translation": "Перевод", + "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", + "drag-board": "Drag board", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "Текст", - "translation-text": "Перевод текста", - "show-subtasks-field": "Показывать поля подзадач", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Конвертировать в markdown", - "import-board-zip": "Добавьте ZIP-файл, содержащий файлы JSON доски, а также названия подкаталогов с вложениями.", - "collapse": "Свернуть", - "uncollapse": "Развернуть", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "translation-text": "Translation text", + "show-at-minicard": "Показать на миникарточке", + "show-checklist-at-minicard": "Показать Чек-лист на миникарточке", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/sk.i18n.json b/imports/i18n/data/sk.i18n.json index 16ca630a6..a11802e57 100644 --- a/imports/i18n/data/sk.i18n.json +++ b/imports/i18n/data/sk.i18n.json @@ -19,7 +19,7 @@ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "vytvorená nástenka __board__", + "act-createBoard": "vytvorená doska __board__", "act-createSwimlane": "created swimlane __swimlane__ to board __board__", "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", "act-createCustomField": "created custom field __customField__ at board __board__", @@ -49,10 +49,9 @@ "activity-archived": "%s presunutá do archívu", "activity-attached": "priložená %s do %s", "activity-created": "vytvorená %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "vytvorené vlastné pole %s", "activity-excluded": "excluded %s from %s", - "activity-imported": "importované %s do %s z %s", + "activity-imported": "imported %s into %s from %s", "activity-imported-board": "imported %s from %s", "activity-joined": "pripojená %s", "activity-moved": "presunuté %s z %s do %s", @@ -82,16 +81,14 @@ "activity-endDate": "edited end date to %s of %s", "add-attachment": "Pridať prílohu", "add-board": "Pridať tabuľu", - "add-template": "Pridať šablonu", + "add-template": "Add Template", "add-card": "Pridať kartu", "add-card-to-top-of-list": "Pridať Kartu na vrch listu", "add-card-to-bottom-of-list": "Pridať Kartu na spodok listu", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,25 +113,25 @@ "admin-announcement": "Oznámenie", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "Všetky nástenky", + "all-boards": "Všetky tabule", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Použiť", "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", "app-try-reconnect": "Try to reconnect.", - "archive": "Archivovať", - "archive-all": "Archivovať všetko", + "archive": "Move to Archive", + "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", "archive-selection": "Move selection to Archive", "archiveBoardPopup-title": "Move Board to Archive?", - "archived-items": "Archív", + "archived-items": "Archive", "archived-boards": "Boards in Archive", - "restore-board": "Obnoviť nástenku", + "restore-board": "Obnoviť tabuľu", "no-archived-boards": "No Boards in Archive.", - "archives": "Archív", + "archives": "Archive", "template": "Template", "templates": "Templates", "template-container": "Template Container", @@ -161,8 +158,8 @@ "show-board_members-avatar": "Show Board members avatars", "board-nb-stars": "%s stars", "board-not-found": "Board not found", - "board-private-info": "Táto nástenka bude <strong>súkromná</strong>.", - "board-public-info": "Táto nástenka bude <strong>verejná</strong>.", + "board-private-info": "This board will be <strong>private</strong>.", + "board-public-info": "This board will be <strong>public</strong>.", "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", "boardChangeColorPopup-title": "Change Board Background", "boardChangeBackgroundImagePopup-title": "Change Background Image", @@ -180,11 +177,11 @@ "board-view-swimlanes": "Swimlanes", "board-view-collapse": "Collapse", "board-view-gantt": "Gantt", - "board-view-lists": "Zoznamy", - "bucket-example": "Napríklad \"Rozpočet\".", + "board-view-lists": "Lists", + "bucket-example": "Like “Bucket List” for example", "cancel": "Zrušiť", "card-archived": "This card is moved to Archive.", - "board-archived": "Táto nástenka bude premiestnená do archívu.", + "board-archived": "This board is moved to Archive.", "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.", @@ -244,7 +241,7 @@ "cardLabelsPopup-title": "Labels", "cardMembersPopup-title": "Členovia", "cardMorePopup-title": "More", - "cardTemplatePopup-title": "Vytvoriť šablónu", + "cardTemplatePopup-title": "Create template", "cards": "Karty", "cards-count": "Karty", "cards-count-one": "Card", @@ -264,11 +261,8 @@ "changeSettingsPopup-title": "Change Settings", "subtasks": "Subtasks", "checklists": "Checklists", - "click-to-star": "Pridať hviezdičku na nástenku", - "click-to-unstar": "Odobrať hviezdičku z nástenky", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", + "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", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -319,17 +312,17 @@ "copy-card-link-to-clipboard": "Copy card link to clipboard", "copy-text-to-clipboard": "Copy text to clipboard", "linkCardPopup-title": "Link Card", - "searchElementPopup-title": "Hľadať", + "searchElementPopup-title": "Search", "copyCardPopup-title": "Copy Card", "copyManyCardsPopup-title": "Copy Template to Many Cards", "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", - "create": "Vytvoriť", - "createBoardPopup-title": "Vytvoriť nástenku", + "create": "Create", + "createBoardPopup-title": "Create Board", "chooseBoardSourcePopup-title": "Import board", - "createLabelPopup-title": "Vytvoriť štítok", - "createCustomField": "Vytvoriť pole", - "createCustomFieldPopup-title": "Vytvoriť pole", + "createLabelPopup-title": "Create Label", + "createCustomField": "Create Field", + "createCustomFieldPopup-title": "Create Field", "current": "current", "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", "custom-field-checkbox": "Checkbox", @@ -383,9 +376,8 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Enable WIP Limit", - "error-board-doesNotExist": "Táto nástenka neexistuje", + "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", @@ -451,16 +443,16 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\\\/) to be skipped, you can use \\\\. For example: Field1 == I\\\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Celé meno", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", - "headerBarCreateBoardPopup-title": "Vytvoriť nástenku", + "hide-system-messages": "Hide system messages", + "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", "impersonate-user": "Impersonate user", - "link": "Pripojiť", - "import-board": "Importovať nástenku", - "import-board-c": "Importovať nástenku", - "import-board-title-trello": "Importovať nástenku z Trello", - "import-board-title-wekan": "Importovať nástenku z posledného exportu", + "link": "Link", + "import-board": "import board", + "import-board-c": "Import board", + "import-board-title-trello": "Import board from Trello", + "import-board-title-wekan": "Import board from previous export", "import-board-title-csv": "Import board from CSV/TSV", "from-trello": "Z Trella", "from-wekan": "From previous export", @@ -484,16 +476,16 @@ "invalid-user": "Invalid user", "joined": "joined", "just-invited": "You are just invited to this board", - "keyboard-shortcuts": "Klávesové skratky", - "label-create": "Vytvoriť štítok", + "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": "Jazyk", "last-admin-desc": "You can’t change roles because there must be at least one admin.", - "leave-board": "Opustiť nástenku", + "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": "Opustiť nástenku ?", + "leaveBoardPopup-title": "Leave Board ?", "link-card": "Link to this card", "list-archive-cards": "Move all cards in this list to Archive", "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", @@ -529,9 +521,9 @@ "multi-selection-label": "Set label for selection", "multi-selection-member": "Set member for selection", "multi-selection-on": "Multi-Selection is on", - "muted": "Stíšené", + "muted": "Muted", "muted-info": "You will never be notified of any changes in this board", - "my-boards": "Moje nástenky", + "my-boards": "My Boards", "name": "Name", "no-archived-cards": "No cards in Archive.", "no-archived-lists": "No lists in Archive.", @@ -555,9 +547,9 @@ "private": "Private", "private-desc": "This board is private. Only people added to the board can view and edit it.", "profile": "Profile", - "public": "Verejné", + "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": "Pridaním hviezdičky na nástenku, ju zobrazíte na tomto mieste", + "quick-access-description": "Star a board to add a shortcut in this bar.", "remove-cover": "Remove cover image from minicard", "remove-from-board": "Remove from Board", "remove-label": "Remove Label", @@ -567,27 +559,25 @@ "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": "Premenovať nástenku", + "rename-board": "Premenovať tabuľu", "restore": "Restore", "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", "rescue-card-description-dialogue": "Overwrite current card description with your changes?", "save": "Uložiť", - "search": "Hľadať", + "search": "Search", "rules": "Rules", - "search-cards": "Vyhľadávajte podľa názvu karty/zoznamu, popisov a vlastných polí na tejto nástenke", - "search-example": "Napíšte text, ktorý hľadáte, a stlačte Enter", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", + "search-example": "Write text you search and press Enter", "select-color": "Select Color", - "select-board": "Zvoliť nástenku", + "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -595,13 +585,13 @@ "show-cards-minimum-count": "Show cards count if list contains more than", "sidebar-open": "Open Sidebar", "sidebar-close": "Close Sidebar", - "signupPopup-title": "Vytvoriť účet", + "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": "táto nástenka", + "this-board": "this board", "this-card": "this card", "spent-time-hours": "Spent time (hours)", "overtime-hours": "Overtime (hours)", @@ -609,8 +599,7 @@ "has-overtime-cards": "Has overtime cards", "has-spenttime-cards": "Has spent time cards", "time": "Čas", - "title": "Názov", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", + "title": "Title", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -636,8 +625,8 @@ "warn-list-archived": "warning: this card is in an list at Archive", "watch": "Watch", "watching": "Watching", - "watching-info": "Budete informovaný o každej zmene na tejto nástenke", - "welcome-board": "Uvítacia nástenka", + "watching-info": "You will be notified of any change in this board", + "welcome-board": "Welcome Board", "welcome-swimlane": "Milestone 1", "welcome-list1": "Basics", "welcome-list2": "Advanced", @@ -734,8 +723,8 @@ "card-sorting-by-number": "Card sorting by number", "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Zmazať nástenku?", - "delete-board": "Zmazať nástenku", + "boardDeletePopup-title": "Delete Board?", + "delete-board": "Delete Board", "default-subtasks-board": "Subtasks for __board__ board", "default": "Default", "defaultdefault": "Default", @@ -772,7 +761,7 @@ "r-rule": "Rule", "r-add-trigger": "Add trigger", "r-add-action": "Add action", - "r-board-rules": "Pravidla nástenky", + "r-board-rules": "Board rules", "r-add-rule": "Add rule", "r-view-rule": "View rule", "r-delete-rule": "Delete rule", @@ -785,7 +774,7 @@ "r-is-moved": "is moved", "r-added-to": "Added to", "r-removed-from": "Removed from", - "r-the-board": "nástenka", + "r-the-board": "the board", "r-list": "list", "set-filter": "Set Filter", "r-moved-to": "Moved to", @@ -846,7 +835,7 @@ "r-d-unarchive": "Restore card from Archive", "r-d-add-label": "Add label", "r-d-remove-label": "Remove label", - "r-create-card": "Vytvoriť novú kartu", + "r-create-card": "Create new card", "r-in-list": "in list", "r-in-swimlane": "in swimlane", "r-d-add-member": "Add member", @@ -854,11 +843,11 @@ "r-d-remove-all-member": "Remove all member", "r-d-check-all": "Check all items of a list", "r-d-uncheck-all": "Uncheck all items of a list", - "r-d-check-one": "Označiť položku", - "r-d-uncheck-one": "Odznačiť položku", + "r-d-check-one": "Check item", + "r-d-uncheck-one": "Uncheck item", "r-d-check-of-list": "of checklist", - "r-d-add-checklist": "Pridať checklist", - "r-d-remove-checklist": "Odobrať checklist", + "r-d-add-checklist": "Add checklist", + "r-d-remove-checklist": "Remove checklist", "r-by": "by", "r-add-checklist": "Add checklist", "r-with-items": "with items", @@ -871,10 +860,10 @@ "r-set": "Set", "r-update": "Update", "r-datefield": "date field", - "r-df-start-at": "štart", + "r-df-start-at": "start", "r-df-due-at": "due", - "r-df-end-at": "koniec", - "r-df-received-at": "prijať", + "r-df-end-at": "end", + "r-df-received-at": "received", "r-to-current-datetime": "to current date/time", "r-remove-value-from": "Remove value from", "r-link-card": "Link card to", @@ -895,7 +884,7 @@ "display-authentication-method": "Display Authentication Method", "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplikovať nástenku", + "duplicate-board": "Duplicate Board", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -933,29 +922,29 @@ "addmore-detail": "Add a more detailed description", "show-on-card": "Show on Card", "show-on-minicard": "Show on Minicard", - "new": "Nový", + "new": "New", "editOrgPopup-title": "Edit Organization", "newOrgPopup-title": "New Organization", "editTeamPopup-title": "Edit Team", "newTeamPopup-title": "New Team", "editUserPopup-title": "Edit User", "newUserPopup-title": "New User", - "notifications": "Upozornenia", - "help": "Pomoc", - "view-all": "Zobraziť všetko", + "notifications": "Notifications", + "help": "Help", + "view-all": "View All", "filter-by-unread": "Filter by Unread", "mark-all-as-read": "Mark all as read", "remove-all-read": "Remove all read", "allow-rename": "Allow Rename", "allowRenamePopup-title": "Allow Rename", "start-day-of-week": "Set day of the week start", - "monday": "pondelok", - "tuesday": "utorok", - "wednesday": "streda", - "thursday": "štvrtok", - "friday": "piatok", - "saturday": "sobota", - "sunday": "nedeľa", + "monday": "Monday", + "tuesday": "Tuesday", + "wednesday": "Wednesday", + "thursday": "Thursday", + "friday": "Friday", + "saturday": "Saturday", + "sunday": "Sunday", "status": "Status", "swimlane": "Swimlane", "owner": "Owner", @@ -966,9 +955,8 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", - "task": "Úloha", - "create-task": "Vytvoriť úlohu", + "task": "Task", + "create-task": "Create Task", "ok": "OK", "organizations": "Organizations", "teams": "Teams", @@ -978,17 +966,17 @@ "website": "Website", "person": "Person", "my-cards": "My Cards", - "card": "Karta", - "list": "Zoznam", - "board": "Nástenka", + "card": "Card", + "list": "List", + "board": "Board", "context-separator": "/", "myCardsViewChange-title": "My Cards View", "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "Nástenky", + "myCardsViewChange-choice-boards": "Tabule", "myCardsViewChange-choice-table": "Table", "myCardsSortChange-title": "My Cards Sort", "myCardsSortChangePopup-title": "My Cards Sort", - "myCardsSortChange-choice-board": "Podľa násteniek", + "myCardsSortChange-choice-board": "By Board", "myCardsSortChange-choice-dueat": "By Due Date", "dueCards-title": "Due Cards", "dueCardsViewChange-title": "Due Cards View", @@ -997,7 +985,7 @@ "dueCardsViewChange-choice-all": "All Users", "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", "broken-cards": "Broken Cards", - "board-title-not-found": "Nástenka '%s' sa nenašla.", + "board-title-not-found": "Board '%s' not found.", "swimlane-title-not-found": "Swimlane '%s' not found.", "list-title-not-found": "List '%s' not found.", "label-not-found": "Label '%s' not found.", @@ -1006,32 +994,32 @@ "comment-not-found": "Card with comment containing text '%s' not found.", "org-name-not-found": "Organization '%s' not found.", "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "Prehľadávať všetky nástenky", + "globalSearch-title": "Search All Boards", "no-cards-found": "No Cards Found", "one-card-found": "One Card Found", "n-cards-found": "%s Cards Found", "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "nástenka", + "operator-board": "board", "operator-board-abbrev": "b", "operator-swimlane": "swimlane", "operator-swimlane-abbrev": "s", - "operator-list": "zoznam", + "operator-list": "list", "operator-list-abbrev": "l", - "operator-label": "štítok", + "operator-label": "label", "operator-label-abbrev": "#", - "operator-user": "používateľ", + "operator-user": "user", "operator-user-abbrev": "@", - "operator-member": "člen", + "operator-member": "member", "operator-member-abbrev": "m", - "operator-assignee": "pridelenec", + "operator-assignee": "assignee", "operator-assignee-abbrev": "a", - "operator-creator": "Vytvoril", + "operator-creator": "creator", "operator-status": "status", "operator-due": "due", - "operator-created": "vytvorené", - "operator-modified": "upravené", + "operator-created": "created", + "operator-modified": "modified", "operator-sort": "sort", - "operator-comment": "komentár", + "operator-comment": "comment", "operator-has": "has", "operator-limit": "limit", "operator-debug": "debug", @@ -1048,7 +1036,7 @@ "predicate-year": "year", "predicate-due": "due", "predicate-modified": "modified", - "predicate-created": "vytvorené", + "predicate-created": "created", "predicate-attachment": "attachment", "predicate-description": "description", "predicate-checklist": "checklist", @@ -1056,8 +1044,8 @@ "predicate-end": "end", "predicate-assignee": "assignee", "predicate-member": "member", - "predicate-public": "verejný", - "predicate-private": "súkromný", + "predicate-public": "public", + "predicate-private": "private", "predicate-selector": "selector", "predicate-projection": "projection", "operator-unknown-error": "%s is not an operator", @@ -1067,9 +1055,9 @@ "operator-has-invalid": "%s is not a valid existence check", "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "Ďalšia strana", - "previous-page": "Predchádzajúca strana", - "heading-notes": "Poznámky", + "next-page": "Next Page", + "previous-page": "Previous Page", + "heading-notes": "Notes", "globalSearch-instructions-heading": "Search Instructions", "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", "globalSearch-instructions-operators": "Available operators:", @@ -1117,11 +1105,11 @@ "server-error": "Chyba serveru", "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", "title-alphabetically": "Title (Alphabetically)", - "created-at-newest-first": "Vytvorené (Od najnovšieho)", - "created-at-oldest-first": "Vytvorené (Od najstaršieho)", + "created-at-newest-first": "Created At (Newest First)", + "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Odkazy", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1170,7 +1157,7 @@ "cardDetailsPopup-title": "Card Details", "add-teams": "Add teams", "add-teams-label": "Added teams are displayed below:", - "remove-team-from-table": "Ste si istý, že chcete odstrániť tento tím z nástenky ?", + "remove-team-from-table": "Are you sure you want to remove this team from the board ?", "confirm-btn": "Confirm", "remove-btn": "Remove", "filter-card-title-label": "Filter by card title", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1228,7 +1212,7 @@ "size": "Size", "storage": "Storage", "action": "Action", - "board-title": "Názov nástenky", + "board-title": "Board Title", "attachmentRenamePopup-title": "Rename", "uploading": "Uploading", "remaining_time": "Remaining time", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/sl.i18n.json b/imports/i18n/data/sl.i18n.json index cc39b709f..55dad4743 100644 --- a/imports/i18n/data/sl.i18n.json +++ b/imports/i18n/data/sl.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s premaknjeno v arhiv", "activity-attached": "pripel %s v %s", "activity-created": "ustvaril %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "ustvaril poljubno polje%s", "activity-excluded": "izključil %s iz %s", "activity-imported": "uvozil %s v %s iz %s", @@ -86,12 +85,10 @@ "add-card": "Dodaj kartico", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Kontrolni seznami", "click-to-star": "Kliknite, da označite tablo z zvezdico.", "click-to-unstar": "Kliknite, da odznačite tablo z zvezdico.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Odložišče ali povleci & spusti", "close": "Zapri", "close-board": "Zapri tablo", @@ -300,7 +294,6 @@ "color-white": "bela", "color-yellow": "rumena", "unset-color": "Onemogoči", - "comments": "Comments", "comment": "Komentiraj", "comment-placeholder": "Napiši komentar", "comment-only": "Samo komentar", @@ -383,7 +376,6 @@ "email-sent": "E-pošta poslana", "email-verifyEmail-subject": "Preverite svoje e-poštni naslov na __siteName__", "email-verifyEmail-text": "Pozdravljeni __user__,\n\nDa preverite e-poštni naslov za vaš uporabniški račun, kliknite na spodnjo povezavo.\n\n__url__\n\nHvala.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Vklopi omejitev št. kartic", "error-board-doesNotExist": "Ta tabla ne obstaja", "error-board-notAdmin": "Nimate administrativnih pravic za tablo.", @@ -451,7 +443,7 @@ "advanced-filter-description": "Napredni filter omogoča pripravo niza, ki vsebuje naslednje operaterje: == != <= >= && || () Preslednica se uporablja kot ločilo med operatorji. Vsa polja po meri lahko filtrirate tako, da vtipkate njihova imena in vrednosti. Na primer: Polje1 == Vrednost1. Opomba: Če polja ali vrednosti vsebujejo presledke, jih morate postaviti v enojne narekovaje. Primer: 'Polje 1' == 'Vrednost 1'. Če želite preskočiti posamezne kontrolne znake (' \\\\/), lahko uporabite \\\\\\. Na primer: Polje1 == I\\\\'m. Prav tako lahko kombinirate več pogojev. Na primer: F1 == V1 || F1 == V2. Običajno se vsi operaterji interpretirajo od leve proti desni. Vrstni red lahko spremenite tako, da postavite oklepaje. Na primer: F1 == V1 && ( F2 == V2 || F2 == V3 ). Prav tako lahko po besedilu iščete z uporabo pravil regex: F1 == /Tes.*/i", "fullname": "Polno Ime", "header-logo-title": "Pojdi nazaj na stran s tablami.", - "show-activities": "Show Activities", + "hide-system-messages": "Skrij sistemska sporočila", "headerBarCreateBoardPopup-title": "Ustvari tablo", "home": "Domov", "import": "Uvozi", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Omeji maksimalno število opravil v seznamu", "setWipLimitPopup-title": "Omeji število kartic", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Dodeli sebe k trenutni kartici", "shortcut-autocomplete-emoji": "Samodokončaj emoji", "shortcut-autocomplete-members": "Samodokončaj člane", "shortcut-clear-filters": "Počisti vse filtre", "shortcut-close-dialog": "Zapri dialog", "shortcut-filter-my-cards": "Filtriraj moje kartice", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Prikaži seznam bližnjic", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Ima kartice s porabljenim časom", "time": "Čas", "title": "Naslov", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Sledenje", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Besedilo", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Skrči", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/sr.i18n.json b/imports/i18n/data/sr.i18n.json index 031c021e7..aad9df24f 100644 --- a/imports/i18n/data/sr.i18n.json +++ b/imports/i18n/data/sr.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s премештено у архиву", "activity-attached": "приложио %s у %s", "activity-created": "направио %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "направио сасвим ново поље %s", "activity-excluded": "изузет %s из %s", "activity-imported": "увезао %s у %s из %s", @@ -86,12 +85,10 @@ "add-card": "Додај картицу са задатком", "add-card-to-top-of-list": "Додај картицу/задатак на врх деонице", "add-card-to-bottom-of-list": "Додај картицу/задатак на дно деонице", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Подеси ширину листе", + "set-list-width": "Подеси ширину листе", + "set-list-width-value": "Ширина листе (у пикселима)", + "list-width-error-message": "Ширина стазе мора бити позитиван број", "setSwimlaneHeightPopup-title": "Подеси висину стазе", "set-swimlane-height": "Подеси висину стазе", "set-swimlane-height-value": "Висина стазе (у пикселима)", @@ -266,9 +263,6 @@ "checklists": "Спискови", "click-to-star": "Притисни да означиш звездицом ову књигу пословања.", "click-to-unstar": "Притисни да уклониш звездицу са ове пословне књиге.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Из историје или пренеси и испусти", "close": "Заклопи", "close-board": "Заклопи књигу пословања", @@ -300,7 +294,6 @@ "color-white": "бела", "color-yellow": "жута", "unset-color": "Обриши подешавање", - "comments": "Comments", "comment": "Изнеси мишљење", "comment-placeholder": "Простор за изношење мишљења", "comment-only": "Износи мишљење", @@ -383,7 +376,6 @@ "email-sent": "Е-пошта је послана", "email-verifyEmail-subject": "Потврдите Вашу адресу е-поште на страници __siteName__", "email-verifyEmail-text": "Добар дан __user__,\n\nДа би сте потврдили ваш налог за е-пошту, једноставно притисните на везу испод.\n\n__url__\n\nХвала.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Ограничи број послова", "error-board-doesNotExist": "Ова пословна књига не постоји", "error-board-notAdmin": "Да би то урадили, треба да будете администратор/управник ове књиге пословања", @@ -451,7 +443,7 @@ "advanced-filter-description": "Напредно издвајање Вам омогућава да напишете ниску која садржи следеће оператореAdvanced: == != <= >= && || ( ) Празно место се користи да раздвоји операторе. Можете да издвајате сва поља која сте измислили пишући њихова имена и вредности. На пример: ИмеИзмишљеногПоља == Вредност. Напомена: Уколико предметна поља или њихове вредности садрже празна места треба да их обухватите у једноструке наводнике. На пример: 'Поље 1' == 'Вредност 1'. Да би избегли контролне знаке (' \\\\/) , можете да користите \\\\. Например: Поље1 == Ал\\\\' је дугачко поље. Такође можете измешати више услова. На пример: Поље1 == Вредност1 || Поље1 == Вредност2. Провера услова се обавља са лева на десно. Додавањем заграда ћете утицати на проверу. На пример: Поље1 == Вредност1 && ( Поље2 == Вредност2 || Поље2 == Вредност3 ). Такође можете претраживати поља програмерским изразима: Поље1 == /Tes.*/i", "fullname": "Име и презиме", "header-logo-title": "Вратите се на полицу са Вашим пословним књигама.", - "show-activities": "Show Activities", + "hide-system-messages": "Сакриј системске поруке", "headerBarCreateBoardPopup-title": "Отвори нову књигу пословања", "home": "Почетна", "import": "Унеси", @@ -580,14 +572,12 @@ "select-board": "Изаберите књигу пословања", "set-wip-limit-value": "Поставите границу за максимални дозвољени број задатака на овој деоници", "setWipLimitPopup-title": "Поставите ограничење броја послова", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Придружите себе тренутној картици", "shortcut-autocomplete-emoji": "Сам попуни emoji", "shortcut-autocomplete-members": "Сам попуни сараднике", "shortcut-clear-filters": "Прекини издвајање", "shortcut-close-dialog": "Затвори прозорче", "shortcut-filter-my-cards": "Издвој задатке", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Прикажи овај списак пречица", "shortcut-toggle-filterbar": "Укључи/искључи бочни мени за издвајање", "shortcut-toggle-searchbar": "Укључи/искључи бочни мени за претрагу", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Има задатке са мерењем времена", "time": "Време", "title": "Наслов", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Укључи/искључи натписе од 1 до 9 за задатак. Вишеструк избор додаје натпис од 1 до 9", "remove-labels-multiselect": "Вишеструким избором се уклањају натписи од 1 до 9", "tracking": "Праћење", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Не можете избрисати ову картицу пре него што прво избришете повезану картицу која има", "delete-linked-cards-before-this-list": "Не можете избрисати ову деоницу -- прво избришете повезане картице које показују на картице на овој деоници", "hide-checked-items": "Сакриј већ обављено са списка", - "hide-finished-checklist": "Hide finished checklist", "task": "Задатак", "create-task": "Задај", "ok": "У реду", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Кад је направљено (Најновије прво)", "created-at-oldest-first": "Кад је направљено (Најстарије прво)", "links-heading": "Везе", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Сакриј системске поруке за све кориснике", + "now-system-messages-of-all-users-are-hidden": "Сада су системске поруке свих корисника сакривене", "move-swimlane": "Премести стазу", "moveSwimlanePopup-title": "Премештање стазе", "custom-field-stringtemplate": "Предложак за словни низ", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Раздвајач (користите или   за размак)", "custom-field-stringtemplate-item-placeholder": "Притисните ентер да додате још ставки", "creator": "Задао", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Извештај везан за датотеке", "reports": "Извештаји", "rulesReportTitle": "Извештај везан за правила", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Радње на списковима за обавити", "moveChecklist": "Премести списак за обавити", "moveChecklistPopup-title": "Премести списак за обавити", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Следећи ред постаје нова ставка на списку за обавити", "copyChecklist": "Умножи списак", "copyChecklistPopup-title": "Умножи списак", "card-show-lists": "Прикажи спискове на картици", @@ -1256,17 +1240,8 @@ "translation": "Превод", "text": "Текст", "translation-text": "Превод текста", + "show-at-minicard": "Покажи на мини картици", + "show-checklist-at-minicard": "Прикажи списак на мини картици", "show-subtasks-field": "Прикажи поље за подзадатке", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Претвори у маркдаун", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Сажми", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Претвори у маркдаун" } diff --git a/imports/i18n/data/sv.i18n.json b/imports/i18n/data/sv.i18n.json index c43ed08f8..65c0428a3 100644 --- a/imports/i18n/data/sv.i18n.json +++ b/imports/i18n/data/sv.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s flyttades till Arkiv", "activity-attached": "bifogade %s till %s", "activity-created": "skapade %s", - "activity-changedListTitle": "döpte om listan till %s", "activity-customfield-created": "skapade anpassat fält %s", "activity-excluded": "exkluderade %s från %s", "activity-imported": "importerade %s till %s från %s", @@ -86,12 +85,10 @@ "add-card": "Lägg till kort", "add-card-to-top-of-list": "Lägg till kort överst i listan", "add-card-to-bottom-of-list": "Lägg till kort i botten av listan", - "setListWidthPopup-title": "Ställ in min bredd", - "set-list-width": "Ställ in min bredd", - "set-list-width-value": "Min och max bredd (pixlar)", - "list-width-error-message": "Listbredder måste vara heltal större än 100", - "keyboard-shortcuts-enabled": "Tangentbordsgenvägar aktiverade. Klicka för att inaktivera.", - "keyboard-shortcuts-disabled": "Tangentbordsgenvägar inaktiverade. Klicka för att aktivera.", + "setListWidthPopup-title": "Ställ in listbredd", + "set-list-width": "Ställ in listbredd", + "set-list-width-value": "Listbredd (pixlar)", + "list-width-error-message": "Listbredden måste vara ett positivt heltal", "setSwimlaneHeightPopup-title": "Ställ in simbanans höjd", "set-swimlane-height": "Ställ in simbanans höjd", "set-swimlane-height-value": "Simbanans höjd (pixlar)", @@ -266,9 +263,6 @@ "checklists": "Checklistor", "click-to-star": "Klicka för att stjärnmärka denna tavla.", "click-to-unstar": "Klicka för att ta bort stjärnmärkningen från denna tavla.", - "click-to-enable-auto-width": "Automatisk listbredd inaktiverad. Klicka för att aktivera.", - "click-to-disable-auto-width": "Automatisk listbredd aktiverad. Klicka för att inaktivera.", - "auto-list-width": "Automatisk listbredd", "clipboard": "Urklipp eller dra & släpp", "close": "Stäng", "close-board": "Stäng tavla", @@ -300,7 +294,6 @@ "color-white": "vit", "color-yellow": "gul", "unset-color": "Ta bort", - "comments": "Kommentarer", "comment": "Kommentera", "comment-placeholder": "Skriv kommentar", "comment-only": "Kommentera endast", @@ -383,7 +376,6 @@ "email-sent": "E-post skickad", "email-verifyEmail-subject": "Verifiera din e-post adress på __siteName__", "email-verifyEmail-text": "Hej __user__,\n\nFör att verifiera din konto e-post, klicka på länken nedan.\n\n__url__\n\nTack!", - "enable-vertical-scrollbars": "Aktivera vertikala rullningslister", "enable-wip-limit": "Aktivera WIP-gräns", "error-board-doesNotExist": "Denna tavla finns inte", "error-board-notAdmin": "Du måste vara administratör för denna tavla för att göra det", @@ -451,7 +443,7 @@ "advanced-filter-description": "Avancerade filter låter dig skriva en sträng innehållande följande operatorer: == != <= >= && || ( ). Ett mellanslag används som separator mellan operatorerna. Du kan filtrera alla specialfält genom att skriva dess namn och värde. Till exempel: Fält1 == Vårde1. Notera: om fälten eller värden innehåller mellanrum behöver du innesluta dem med enkla citatstecken. Till exempel: 'Fält 1' == 'Värde 1'. För att skippa enkla kontrolltecken (' \\\\/) kan du använda \\\\. Till exempel: Fält1 == I\\\\'m. Du kan även kombinera fler villkor. TIll exempel: F1 == V1 || F1 == V2. Vanligtvis läses operatorerna från vänster till höger. Du kan ändra ordning genom att använda paranteser. TIll exempel: F1 == V1 && ( F2 == V2 || F2 == V3 ). Du kan även söka efter textfält med hjälp av regex: F1 == /Tes.*/i", "fullname": "Namn", "header-logo-title": "Gå tillbaka till din anslagstavlor-sida.", - "show-activities": "Visa aktiviteter", + "hide-system-messages": "Dölj systemmeddelanden", "headerBarCreateBoardPopup-title": "Skapa tavla", "home": "Hem", "import": "Importera", @@ -580,14 +572,12 @@ "select-board": "Välj tavla", "set-wip-limit-value": "Ange en gräns för det maximala antalet uppgifter i den här listan", "setWipLimitPopup-title": "Ställ in WIP-gräns", - "shortcut-add-self": "Tilldela dig nuvarande kort", "shortcut-assign-self": "Tilldela dig nuvarande kort", "shortcut-autocomplete-emoji": "Komplettera automatiskt emoji", "shortcut-autocomplete-members": "Komplettera automatiskt medlemmar", "shortcut-clear-filters": "Rensa alla filter", "shortcut-close-dialog": "Stäng dialog", "shortcut-filter-my-cards": "Filtrera mina kort", - "shortcut-filter-my-assigned-cards": "Filtrera på mina kort", "shortcut-show-shortcuts": "Ta fram denna genvägslista", "shortcut-toggle-filterbar": "Växla filtrets sidofält", "shortcut-toggle-searchbar": "Växla sökfältet", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Har spenderat tidkort", "time": "Tid", "title": "Titel", - "toggle-assignees": "Växla tilldelade personer 1-9 för kort (I den ordning de lades till i tavlan).", "toggle-labels": "Toggle-etiketter 1-9 för kortet. Multi-Selection lägger till etiketter 1-9.", "remove-labels-multiselect": "Multi-Selection raderar etikett 1-9", "tracking": "Spåra", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Du kan inte radera det här kortet innan du raderat länkat kort som har", "delete-linked-cards-before-this-list": "Du kan inte radera den här listan innan du raderat länkade kort som pekar till kort i den här listan", "hide-checked-items": "Dölj markerade objekt", - "hide-finished-checklist": "Göm färdig checklista", "task": "Uppgift", "create-task": "Skapa uppgift", "ok": "OK", @@ -974,7 +962,7 @@ "teams": "Grupper", "displayName": "Visningsnamn", "shortName": "Kortnamn", - "autoAddUsersWithDomainName": "Automatiskt lägga till användare med domännamnet", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "Webbsida", "person": "Person", "my-cards": "Mina kort", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Skapad den (Nyast först)", "created-at-oldest-first": "Skapad den (äldst först)", "links-heading": "Länkar", - "hide-activities-of-all-boards": "Visa inte aktiviteter på alla tavlor", - "now-activities-of-all-boards-are-hidden": "Nu är alla aktiviteter på alla tavlor dolda", + "hide-system-messages-of-all-users": "Göm systemmeddelanden för alla användare", + "now-system-messages-of-all-users-are-hidden": "Systemmeddelande dolda för alla användare", "move-swimlane": "Flytta simbana", "moveSwimlanePopup-title": "Flytta simbana", "custom-field-stringtemplate": "Textmall", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Avskiljare (använd eller   för mellanslag)", "custom-field-stringtemplate-item-placeholder": "Tryck enter för att lägga till fler", "creator": "Skapare", - "creator-on-minicard": "Minikortets skapare", "filesReportTitle": "Filrapport", "reports": "Rapporter", "rulesReportTitle": "Regelrapport", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Liståtgärder", "moveChecklist": "Flytta checklista", "moveChecklistPopup-title": "Flytta checklista", - "newlineBecomesNewChecklistItem": "Varje textrad blir ett objekt i checklistan", - "newLineNewItem": "En textrad = ett objekt i checklistan", - "newlineBecomesNewChecklistItemOriginOrder": "Varje textrad blir ett objekt i checklistan, i ursprunglig ordning", - "originOrder": "ursprunglig ordning", + "newlineBecomesNewChecklistItem": "Nyrad blir ny checklista", "copyChecklist": "Kopiera checklista", "copyChecklistPopup-title": "Kopiera checklista", "card-show-lists": "Visa listor på kort", @@ -1256,17 +1240,8 @@ "translation": "Översättning", "text": "Text", "translation-text": "Översatt text", + "show-at-minicard": "Visa på minikort", + "show-checklist-at-minicard": "Visa checklista på minikort", "show-subtasks-field": "Visa underuppgiftsfält", - "show-week-of-year": "Visa veckonummer (ISO 8601)", - "convert-to-markdown": "Konvertera till markdown", - "import-board-zip": "Lägga till .zip-filen till tavlans JSON filer, och tavla", - "collapse": "Fäll ihop", - "uncollapse": "Expandera", - "hideCheckedChecklistItems": "Dölj markerade objekt i checklistan", - "hideAllChecklistItems": "Dölj alla objekt i checklistan", - "support": "Hjälp", - "supportPopup-title": "Hjälp", - "accessibility-page-enabled": "Tillgänglighetssida aktiverad", - "accessibility-title": "Tillgänglighetsämne", - "accessibility-content": "Tillgänglighetsinnehåll" + "convert-to-markdown": "Konvertera till markdown" } diff --git a/imports/i18n/data/sw.i18n.json b/imports/i18n/data/sw.i18n.json index ea7cbdf34..06525741b 100644 --- a/imports/i18n/data/sw.i18n.json +++ b/imports/i18n/data/sw.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Funga", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Changia", "comment-placeholder": "Andika changio", "comment-only": "Changia pekee", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ta.i18n.json b/imports/i18n/data/ta.i18n.json index fc2eda7ca..f2256c66f 100644 --- a/imports/i18n/data/ta.i18n.json +++ b/imports/i18n/data/ta.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "உருவாக்கப்பட்டது", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "வெள்ளை", "color-yellow": "மஞ்சள்", "unset-color": "Unset", - "comments": "Comments", "comment": "கருத்து", "comment-placeholder": "Write Comment", "comment-only": "கருத்து மட்டும்", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "முழு பெயர்", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "தொடக்கம்", "import": "பதிவேற்றம்", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/te-IN.i18n.json b/imports/i18n/data/te-IN.i18n.json deleted file mode 100644 index 78b62d375..000000000 --- a/imports/i18n/data/te-IN.i18n.json +++ /dev/null @@ -1,1272 +0,0 @@ -{ - "accept": "Accept", - "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "created board __board__", - "act-createSwimlane": "created swimlane __swimlane__ to board __board__", - "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-createCustomField": "created custom field __customField__ at board __board__", - "act-deleteCustomField": "deleted custom field __customField__ at board __board__", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createList": "added list __list__ to board __board__", - "act-addBoardMember": "added member __member__ to board __board__", - "act-archivedBoard": "Board __board__ moved to Archive", - "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", - "act-importBoard": "imported board __board__", - "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", - "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", - "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-removeBoardMember": "removed member __member__ from board __board__", - "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-withBoardTitle": "__board__", - "act-withCardTitle": "[__board__] __card__", - "actions": "Actions", - "activities": "Activities", - "activity": "Activity", - "activity-added": "added %s to %s", - "activity-archived": "%s moved to Archive", - "activity-attached": "attached %s to %s", - "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", - "activity-customfield-created": "created custom field %s", - "activity-excluded": "excluded %s from %s", - "activity-imported": "imported %s into %s from %s", - "activity-imported-board": "imported %s from %s", - "activity-joined": "joined %s", - "activity-moved": "moved %s from %s to %s", - "activity-on": "on %s", - "activity-removed": "removed %s from %s", - "activity-sent": "sent %s to %s", - "activity-unjoined": "unjoined %s", - "activity-subtask-added": "added subtask to %s", - "activity-checked-item": "checked %s in checklist %s of %s", - "activity-unchecked-item": "unchecked %s in checklist %s of %s", - "activity-checklist-added": "added checklist to %s", - "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist %s of %s", - "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", - "activity-checklist-item-added": "added checklist item to '%s' in %s", - "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", - "add": "Add", - "activity-checked-item-card": "checked %s in checklist %s", - "activity-unchecked-item-card": "unchecked %s in checklist %s", - "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "activity-checklist-uncompleted-card": "uncompleted the checklist %s", - "activity-editComment": "edited comment %s", - "activity-deleteComment": "deleted comment %s", - "activity-receivedDate": "edited received date to %s of %s", - "activity-startDate": "edited start date to %s of %s", - "activity-dueDate": "edited due date to %s of %s", - "activity-endDate": "edited end date to %s of %s", - "add-attachment": "Add Attachment", - "add-board": "Add Board", - "add-template": "Add Template", - "add-card": "Add Card", - "add-card-to-top-of-list": "Add Card to Top of List", - "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Set Swimlane Height", - "set-swimlane-height": "Set Swimlane Height", - "set-swimlane-height-value": "Swimlane Height (pixels)", - "swimlane-height-error-message": "Swimlane height must be a positive integer", - "add-swimlane": "Add Swimlane", - "add-subtask": "Add Subtask", - "add-checklist": "Add Checklist", - "add-checklist-item": "Add an item to checklist", - "close-add-checklist-item": "Close add an item to checklist form", - "close-edit-checklist-item": "Close edit an item to checklist form", - "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "Add cover image to minicard", - "add-label": "Add Label", - "add-list": "Add List", - "add-after-list": "Add After List", - "add-members": "Add Members", - "added": "Added", - "addMemberPopup-title": "Members", - "memberPopup-title": "Member Settings", - "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", - "app-try-reconnect": "Try to reconnect.", - "archive": "Move to Archive", - "archive-all": "Move All to Archive", - "archive-board": "Move Board to Archive", - "archive-card": "Move Card to Archive", - "archive-list": "Move List to Archive", - "archive-swimlane": "Move Swimlane to Archive", - "archive-selection": "Move selection to Archive", - "archiveBoardPopup-title": "Move Board to Archive?", - "archived-items": "Archive", - "archived-boards": "Boards in Archive", - "restore-board": "Restore Board", - "no-archived-boards": "No Boards in Archive.", - "archives": "Archive", - "template": "Template", - "templates": "Templates", - "template-container": "Template Container", - "add-template-container": "Add Template Container", - "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 (__size__ max)", - "back": "Back", - "board-change-color": "Change color", - "board-change-background-image": "Change Background Image", - "board-background-image-url": "Background Image URL", - "add-background-image": "Add Background Image", - "remove-background-image": "Remove Background Image", - "show-at-all-boards-page" : "Show at All Boards page", - "board-info-on-my-boards" : "All Boards Settings", - "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", - "boardInfoOnMyBoards-title": "All Boards Settings", - "show-card-counter-per-list": "Show card count per list", - "show-board_members-avatar": "Show Board members avatars", - "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>.", - "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", - "boardChangeColorPopup-title": "Change Board Background", - "boardChangeBackgroundImagePopup-title": "Change Background Image", - "allBoardsChangeColorPopup-title": "Change color", - "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", - "boardChangeTitlePopup-title": "Rename Board", - "boardChangeVisibilityPopup-title": "Change Visibility", - "boardChangeWatchPopup-title": "Change Watch", - "boardMenuPopup-title": "Board Settings", - "allBoardsMenuPopup-title": "Settings", - "boardChangeViewPopup-title": "Board View", - "boards": "Boards", - "board-view": "Board View", - "board-view-cal": "Calendar", - "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Collapse", - "board-view-gantt": "Gantt", - "board-view-lists": "Lists", - "bucket-example": "Like “Bucket List” for example", - "cancel": "Cancel", - "card-archived": "This card is moved to Archive.", - "board-archived": "This board is moved to Archive.", - "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 move a card to Archive to remove it from the board and preserve the activity.", - "card-archive-pop": "Card will not be visible at this list after archiving card.", - "card-archive-suggest-cancel": "You can later restore card from Archive.", - "card-due": "Due", - "card-due-on": "Due on", - "card-spent": "Spent Time", - "card-edit-attachments": "Edit attachments", - "card-edit-custom-fields": "Edit custom fields", - "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", - "cardCustomField-datePopup-title": "Change date", - "cardCustomFieldsPopup-title": "Edit custom fields", - "cardStartVotingPopup-title": "Start a vote", - "positiveVoteMembersPopup-title": "Proponents", - "negativeVoteMembersPopup-title": "Opponents", - "card-edit-voting": "Edit voting", - "editVoteEndDatePopup-title": "Change vote end date", - "allowNonBoardMembers": "Allow all logged in users", - "vote-question": "Voting question", - "vote-public": "Show who voted what", - "vote-for-it": "for it", - "vote-against": "against", - "deleteVotePopup-title": "Delete vote?", - "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", - "cardStartPlanningPokerPopup-title": "Start a Planning Poker", - "card-edit-planning-poker": "Edit Planning Poker", - "editPokerEndDatePopup-title": "Change Planning Poker vote end date", - "poker-question": "Planning Poker", - "poker-one": "1", - "poker-two": "2", - "poker-three": "3", - "poker-five": "5", - "poker-eight": "8", - "poker-thirteen": "13", - "poker-twenty": "20", - "poker-forty": "40", - "poker-oneHundred": "100", - "poker-unsure": "?", - "poker-finish": "Finish", - "poker-result-votes": "Votes", - "poker-result-who": "Who", - "poker-replay": "Replay", - "set-estimation": "Set Estimation", - "deletePokerPopup-title": "Delete planning poker?", - "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", - "cardDeletePopup-title": "Delete Card?", - "cardArchivePopup-title": "Archive Card?", - "cardDetailsActionsPopup-title": "Card Actions", - "cardLabelsPopup-title": "Labels", - "cardMembersPopup-title": "Members", - "cardMorePopup-title": "More", - "cardTemplatePopup-title": "Create template", - "cards": "Cards", - "cards-count": "Cards", - "cards-count-one": "Card", - "casSignIn": "Sign In with CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", - "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", - "subtasks": "Subtasks", - "checklists": "Checklists", - "click-to-star": "Click to star this board.", - "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", - "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 “Archive” button from the home header.", - "close-card": "Close Card", - "color-black": "black", - "color-blue": "blue", - "color-crimson": "crimson", - "color-darkgreen": "darkgreen", - "color-gold": "gold", - "color-gray": "gray", - "color-green": "green", - "color-indigo": "indigo", - "color-lime": "lime", - "color-magenta": "magenta", - "color-mistyrose": "mistyrose", - "color-navy": "navy", - "color-orange": "orange", - "color-paleturquoise": "paleturquoise", - "color-peachpuff": "peachpuff", - "color-pink": "pink", - "color-plum": "plum", - "color-purple": "purple", - "color-red": "red", - "color-saddlebrown": "saddlebrown", - "color-silver": "silver", - "color-sky": "sky", - "color-slateblue": "slateblue", - "color-white": "white", - "color-yellow": "yellow", - "unset-color": "Unset", - "comments": "Comments", - "comment": "Comment", - "comment-placeholder": "Write Comment", - "comment-only": "Comment only", - "comment-only-desc": "Can comment on cards only.", - "comment-delete": "Are you sure you want to delete the comment?", - "deleteCommentPopup-title": "Delete comment?", - "no-comments": "No comments", - "no-comments-desc": "Can not see comments and activities.", - "worker": "Worker", - "worker-desc": "Can only move cards, assign itself to card and comment.", - "computer": "Computer", - "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", - "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", - "subtaskDeletePopup-title": "Delete Subtask?", - "checklistDeletePopup-title": "Delete Checklist?", - "copy-card-link-to-clipboard": "Copy card link to clipboard", - "copy-text-to-clipboard": "Copy text to clipboard", - "linkCardPopup-title": "Link Card", - "searchElementPopup-title": "Search", - "copyCardPopup-title": "Copy Card", - "copyManyCardsPopup-title": "Copy Template to Many Cards", - "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", - "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", - "create": "Create", - "createBoardPopup-title": "Create Board", - "chooseBoardSourcePopup-title": "Import board", - "createLabelPopup-title": "Create Label", - "createCustomField": "Create Field", - "createCustomFieldPopup-title": "Create Field", - "current": "current", - "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", - "custom-field-checkbox": "Checkbox", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", - "custom-field-date": "Date", - "custom-field-dropdown": "Dropdown List", - "custom-field-dropdown-none": "(none)", - "custom-field-dropdown-options": "List Options", - "custom-field-dropdown-options-placeholder": "Press enter to add more options", - "custom-field-dropdown-unknown": "(unknown)", - "custom-field-number": "Number", - "custom-field-text": "Text", - "custom-fields": "Custom Fields", - "date": "Date", - "decline": "Decline", - "default-avatar": "Default avatar", - "delete": "Delete", - "deleteCustomFieldPopup-title": "Delete Custom Field?", - "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", - "editCustomFieldPopup-title": "Edit Field", - "addReactionPopup-title": "Add reaction", - "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-vertical-scrollbars": "Enable vertical scrollbars", - "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-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) 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-orgname-taken": "This organization name is already taken", - "error-teamname-taken": "This team name is already taken", - "error-email-taken": "Email has already been taken", - "export-board": "Export board", - "export-board-json": "Export board to JSON", - "export-board-csv": "Export board to CSV", - "export-board-tsv": "Export board to TSV", - "export-board-excel": "Export board to Excel", - "user-can-not-export-excel": "User can not export Excel", - "export-board-html": "Export board to HTML", - "export-card": "Export card", - "export-card-pdf": "Export card to PDF", - "user-can-not-export-card-to-pdf": "User can not export card to PDF", - "exportBoardPopup-title": "Export board", - "exportCardPopup-title": "Export card", - "sort": "Sort", - "sorted": "Sorted", - "remove-sort": "Remove sort", - "sort-desc": "Click to Sort List", - "list-sort-by": "Sort the List By:", - "list-label-modifiedAt": "Last Access Time", - "list-label-title": "Name of the List", - "list-label-sort": "Your Manual Order", - "list-label-short-modifiedAt": "(L)", - "list-label-short-title": "(N)", - "list-label-short-sort": "(M)", - "filter": "Filter", - "filter-cards": "Filter Cards or Lists", - "filter-dates-label": "Filter by date", - "filter-no-due-date": "No due date", - "filter-overdue": "Overdue", - "filter-due-today": "Due today", - "filter-due-this-week": "Due this week", - "filter-due-next-week": "Due next week", - "filter-due-tomorrow": "Due tomorrow", - "list-filter-label": "Filter List by Title", - "filter-clear": "Clear filter", - "filter-labels-label": "Filter by label", - "filter-no-label": "No label", - "filter-member-label": "Filter by member", - "filter-no-member": "No member", - "filter-assignee-label": "Filter by assignee", - "filter-no-assignee": "No assignee", - "filter-custom-fields-label": "Filter by Custom Fields", - "filter-no-custom-fields": "No Custom Fields", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", - "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", - "other-filters-label": "Other Filters", - "advanced-filter-label": "Advanced Filter", - "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", - "fullname": "Full Name", - "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", - "headerBarCreateBoardPopup-title": "Create Board", - "home": "Home", - "import": "Import", - "impersonate-user": "Impersonate user", - "link": "Link", - "import-board": "import board", - "import-board-c": "Import board", - "import-board-title-trello": "Import board from Trello", - "import-board-title-wekan": "Import board from previous export", - "import-board-title-csv": "Import board from CSV/TSV", - "from-trello": "From Trello", - "from-wekan": "From previous export", - "from-csv": "From CSV/TSV", - "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", - "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", - "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", - "import-json-placeholder": "Paste your valid JSON data here", - "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", - "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", - "import-show-user-mapping": "Review members mapping", - "import-user-select": "Pick your existing user you want to use as this member", - "importMapMembersAddPopup-title": "Select member", - "info": "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": "Move all cards in this list to Archive", - "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", - "list-move-cards": "Move all cards in this list", - "list-select-cards": "Select all cards in this list", - "set-color-list": "Set Color", - "listActionPopup-title": "List Actions", - "settingsUserPopup-title": "User Settings", - "settingsTeamPopup-title": "Team Settings", - "settingsOrgPopup-title": "Organization Settings", - "swimlaneActionPopup-title": "Swimlane Actions", - "swimlaneAddPopup-title": "Add a Swimlane below", - "listImportCardPopup-title": "Import a Trello card", - "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", - "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 move a list to Archive to remove it from the board and preserve the activity.", - "lists": "Lists", - "swimlanes": "Swimlanes", - "log-out": "Log Out", - "log-in": "Log In", - "loginPopup-title": "Log In", - "memberMenuPopup-title": "Member Settings", - "members": "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-label": "Set label for selection", - "multi-selection-member": "Set member for 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 cards in Archive.", - "no-archived-lists": "No lists in Archive.", - "no-archived-swimlanes": "No swimlanes in Archive.", - "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 creator 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 image from minicard", - "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", - "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", - "rescue-card-description-dialogue": "Overwrite current card description with your changes?", - "save": "Save", - "search": "Search", - "rules": "Rules", - "search-cards": "Search from card/list titles, descriptions and custom fields on this board", - "search-example": "Write text you search and press Enter", - "select-color": "Select Color", - "select-board": "Select Board", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", - "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-filter-my-assigned-cards": "Filter my assigned cards", - "shortcut-show-shortcuts": "Bring up this shortcuts list", - "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-searchbar": "Toggle Search 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", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", - "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", - "remove-labels-multiselect": "Multi-Selection removes labels 1-9", - "tracking": "Tracking", - "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", - "type": "Type", - "unassign-member": "Unassign member", - "unsaved-description": "You have an unsaved description.", - "unwatch": "Unwatch", - "upload": "Upload", - "upload-avatar": "Upload an avatar", - "uploaded-avatar": "Uploaded an avatar", - "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", - "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", - "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", - "custom-login-logo-image-url": "Custom Login Logo Image URL", - "custom-login-logo-link-url": "Custom Login Logo Link URL", - "custom-help-link-url": "Custom Help Link URL", - "text-below-custom-login-logo": "Text below Custom Login Logo", - "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", - "username": "Username", - "import-usernames": "Import Usernames", - "view-it": "View it", - "warn-list-archived": "warning: this card is in an list at Archive", - "watch": "Watch", - "watching": "Watching", - "watching-info": "You will be notified of any change in this board", - "welcome-board": "Welcome Board", - "welcome-swimlane": "Milestone 1", - "welcome-list1": "Basics", - "welcome-list2": "Advanced", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", - "what-to-do": "What do you want to do?", - "wipLimitErrorPopup-title": "Invalid WIP Limit", - "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", - "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", - "admin-panel": "Admin Panel", - "settings": "Settings", - "people": "People", - "registration": "Registration", - "disable-self-registration": "Disable Self-Registration", - "disable-forgot-password": "Disable Forgot Password", - "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", - "email-smtp-test-subject": "SMTP Test Email", - "email-smtp-test-text": "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.", - "webhook-title": "Webhook Name", - "webhook-token": "Token (Optional for Authentication)", - "outgoing-webhooks": "Outgoing Webhooks", - "bidirectional-webhooks": "Two-Way Webhooks", - "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "Card Title Filter", - "disable-webhook": "Disable This Webhook", - "global-webhook": "Global Webhooks", - "new-outgoing-webhook": "New Outgoing Webhook", - "no-name": "(Unknown)", - "Node_version": "Node version", - "Meteor_version": "Meteor version", - "MongoDB_version": "MongoDB version", - "MongoDB_storage_engine": "MongoDB storage engine", - "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", - "OS_Arch": "OS Arch", - "OS_Cpus": "OS CPU Count", - "OS_Freemem": "OS Free Memory", - "OS_Loadavg": "OS Load Average", - "OS_Platform": "OS Platform", - "OS_Release": "OS Release", - "OS_Totalmem": "OS Total Memory", - "OS_Type": "OS Type", - "OS_Uptime": "OS Uptime", - "days": "days", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "show-field-on-card": "Show this field on card", - "automatically-field-on-card": "Add field to new cards", - "always-field-on-card": "Add field to all cards", - "showLabel-field-on-card": "Show field label on minicard", - "showSum-field-on-list": "Show sum of fields at top of list", - "yes": "Yes", - "no": "No", - "accounts": "Accounts", - "accounts-allowEmailChange": "Allow Email Change", - "accounts-allowUserNameChange": "Allow Username Change", - "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", - "tableVisibilityMode" : "Boards visibility", - "createdAt": "Created at", - "modifiedAt": "Modified at", - "verified": "Verified", - "active": "Active", - "card-received": "Received", - "card-received-on": "Received on", - "card-end": "End", - "card-end-on": "Ends on", - "editCardReceivedDatePopup-title": "Change received date", - "editCardEndDatePopup-title": "Change end date", - "setCardColorPopup-title": "Set color", - "setCardActionsColorPopup-title": "Choose a color", - "setSwimlaneColorPopup-title": "Choose a color", - "setListColorPopup-title": "Choose a color", - "assigned-by": "Assigned By", - "requested-by": "Requested By", - "card-sorting-by-number": "Card sorting by number", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "defaultdefault": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "card-settings": "Card Settings", - "minicard-settings": "Minicard Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "boardCardSettingsPopup-title": "Card Settings", - "boardMinicardSettingsPopup-title": "Minicard Settings", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", - "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "Cover image on minicard", - "badge-attachment-on-minicard": "Count of attachments on minicard", - "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent", - "activity-added-label": "added label '%s' to %s", - "activity-removed-label": "removed label '%s' from %s", - "activity-delete-attach": "deleted an attachment from %s", - "activity-added-label-card": "added label '%s'", - "activity-removed-label-card": "removed label '%s'", - "activity-delete-attach-card": "deleted an attachment", - "activity-set-customfield": "set custom field '%s' to '%s' in %s", - "activity-unset-customfield": "unset custom field '%s' in %s", - "r-rule": "Rule", - "r-add-trigger": "Add trigger", - "r-add-action": "Add action", - "r-board-rules": "Board rules", - "r-add-rule": "Add rule", - "r-view-rule": "View rule", - "r-delete-rule": "Delete rule", - "r-new-rule-name": "New rule title", - "r-no-rules": "No rules", - "r-trigger": "Trigger", - "r-action": "Action", - "r-when-a-card": "When a card", - "r-is": "is", - "r-is-moved": "is moved", - "r-added-to": "Added to", - "r-removed-from": "Removed from", - "r-the-board": "the board", - "r-list": "list", - "set-filter": "Set Filter", - "r-moved-to": "Moved to", - "r-moved-from": "Moved from", - "r-archived": "Moved to Archive", - "r-unarchived": "Restored from Archive", - "r-a-card": "a card", - "r-when-a-label-is": "When a label is", - "r-when-the-label": "When the label", - "r-list-name": "list name", - "r-when-a-member": "When a member is", - "r-when-the-member": "When the member", - "r-name": "name", - "r-when-a-attach": "When an attachment", - "r-when-a-checklist": "When a checklist is", - "r-when-the-checklist": "When the checklist", - "r-completed": "Completed", - "r-made-incomplete": "Made incomplete", - "r-when-a-item": "When a checklist item is", - "r-when-the-item": "When the checklist item", - "r-checked": "Checked", - "r-unchecked": "Unchecked", - "r-move-card-to": "Move card to", - "r-top-of": "Top of", - "r-bottom-of": "Bottom of", - "r-its-list": "its list", - "r-archive": "Move to Archive", - "r-unarchive": "Restore from Archive", - "r-card": "card", - "r-add": "Add", - "r-remove": "Remove", - "r-label": "label", - "r-member": "member", - "r-remove-all": "Remove all members from the card", - "r-set-color": "Set color to", - "r-checklist": "checklist", - "r-check-all": "Check all", - "r-uncheck-all": "Uncheck all", - "r-items-check": "items of checklist", - "r-check": "Check", - "r-uncheck": "Uncheck", - "r-item": "item", - "r-of-checklist": "of checklist", - "r-send-email": "Send an email", - "r-to": "to", - "r-of": "of", - "r-subject": "subject", - "r-rule-details": "Rule details", - "r-d-move-to-top-gen": "Move card to top of its list", - "r-d-move-to-top-spec": "Move card to top of list", - "r-d-move-to-bottom-gen": "Move card to bottom of its list", - "r-d-move-to-bottom-spec": "Move card to bottom of list", - "r-d-send-email": "Send email", - "r-d-send-email-to": "to", - "r-d-send-email-subject": "subject", - "r-d-send-email-message": "message", - "r-d-archive": "Move card to Archive", - "r-d-unarchive": "Restore card from Archive", - "r-d-add-label": "Add label", - "r-d-remove-label": "Remove label", - "r-create-card": "Create new card", - "r-in-list": "in list", - "r-in-swimlane": "in swimlane", - "r-d-add-member": "Add member", - "r-d-remove-member": "Remove member", - "r-d-remove-all-member": "Remove all member", - "r-d-check-all": "Check all items of a list", - "r-d-uncheck-all": "Uncheck all items of a list", - "r-d-check-one": "Check item", - "r-d-uncheck-one": "Uncheck item", - "r-d-check-of-list": "of checklist", - "r-d-add-checklist": "Add checklist", - "r-d-remove-checklist": "Remove checklist", - "r-by": "by", - "r-add-checklist": "Add checklist", - "r-with-items": "with items", - "r-items-list": "item1,item2,item3", - "r-add-swimlane": "Add swimlane", - "r-swimlane-name": "swimlane name", - "r-board-note": "Note: leave a field empty to match every possible value. ", - "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", - "r-when-a-card-is-moved": "When a card is moved to another list", - "r-set": "Set", - "r-update": "Update", - "r-datefield": "date field", - "r-df-start-at": "start", - "r-df-due-at": "due", - "r-df-end-at": "end", - "r-df-received-at": "received", - "r-to-current-datetime": "to current date/time", - "r-remove-value-from": "Remove value from", - "r-link-card": "Link card to", - "ldap": "LDAP", - "oauth2": "OAuth2", - "cas": "CAS", - "authentication-method": "Authentication method", - "authentication-type": "Authentication type", - "custom-product-name": "Custom Product Name", - "layout": "Layout", - "hide-logo": "Hide Logo", - "hide-card-counter-list": "Hide card counter list on All Boards", - "hide-board-member-list": "Hide board member list on All Boards", - "add-custom-html-after-body-start": "Add Custom HTML after <body> start", - "add-custom-html-before-body-end": "Add Custom HTML before </body> end", - "error-undefined": "Something went wrong", - "error-ldap-login": "An error occurred while trying to login", - "display-authentication-method": "Display Authentication Method", - "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Board", - "org-number": "The number of organizations is: ", - "team-number": "The number of teams is: ", - "people-number": "The number of people is: ", - "swimlaneDeletePopup-title": "Delete Swimlane ?", - "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", - "restore-all": "Restore all", - "delete-all": "Delete all", - "loading": "Loading, please wait.", - "previous_as": "last time was", - "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", - "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", - "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", - "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", - "a-dueAt": "modified due time to be", - "a-endAt": "modified ending time to be", - "a-startAt": "modified starting time to be", - "a-receivedAt": "modified received time to be", - "almostdue": "current due time %s is approaching", - "pastdue": "current due time %s is past", - "duenow": "current due time %s is today", - "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", - "act-withDue": "__list__/__card__ due reminders [__board__]", - "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", - "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", - "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", - "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", - "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.", - "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", - "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", - "accounts-allowUserDelete": "Allow users to self delete their account", - "hide-minicard-label-text": "Hide minicard label text", - "show-desktop-drag-handles": "Show desktop drag handles", - "assignee": "Assignee", - "cardAssigneesPopup-title": "Assignee", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card", - "show-on-minicard": "Show on Minicard", - "new": "New", - "editOrgPopup-title": "Edit Organization", - "newOrgPopup-title": "New Organization", - "editTeamPopup-title": "Edit Team", - "newTeamPopup-title": "New Team", - "editUserPopup-title": "Edit User", - "newUserPopup-title": "New User", - "notifications": "Notifications", - "help": "Help", - "view-all": "View All", - "filter-by-unread": "Filter by Unread", - "mark-all-as-read": "Mark all as read", - "remove-all-read": "Remove all read", - "allow-rename": "Allow Rename", - "allowRenamePopup-title": "Allow Rename", - "start-day-of-week": "Set day of the week start", - "monday": "Monday", - "tuesday": "Tuesday", - "wednesday": "Wednesday", - "thursday": "Thursday", - "friday": "Friday", - "saturday": "Saturday", - "sunday": "Sunday", - "status": "Status", - "swimlane": "Swimlane", - "owner": "Owner", - "last-modified-at": "Last modified at", - "last-activity": "Last activity", - "voting": "Voting", - "archived": "Archived", - "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", - "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", - "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", - "task": "Task", - "create-task": "Create Task", - "ok": "OK", - "organizations": "Organizations", - "teams": "Teams", - "displayName": "Display Name", - "shortName": "Short Name", - "autoAddUsersWithDomainName": "Automatically add users with the domain name", - "website": "Website", - "person": "Person", - "my-cards": "My Cards", - "card": "Card", - "list": "List", - "board": "Board", - "context-separator": "/", - "myCardsViewChange-title": "My Cards View", - "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "Boards", - "myCardsViewChange-choice-table": "Table", - "myCardsSortChange-title": "My Cards Sort", - "myCardsSortChangePopup-title": "My Cards Sort", - "myCardsSortChange-choice-board": "By Board", - "myCardsSortChange-choice-dueat": "By Due Date", - "dueCards-title": "Due Cards", - "dueCardsViewChange-title": "Due Cards View", - "dueCardsViewChangePopup-title": "Due Cards View", - "dueCardsViewChange-choice-me": "Me", - "dueCardsViewChange-choice-all": "All Users", - "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", - "broken-cards": "Broken Cards", - "board-title-not-found": "Board '%s' not found.", - "swimlane-title-not-found": "Swimlane '%s' not found.", - "list-title-not-found": "List '%s' not found.", - "label-not-found": "Label '%s' not found.", - "label-color-not-found": "Label color %s not found.", - "user-username-not-found": "Username '%s' not found.", - "comment-not-found": "Card with comment containing text '%s' not found.", - "org-name-not-found": "Organization '%s' not found.", - "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "Search All Boards", - "no-cards-found": "No Cards Found", - "one-card-found": "One Card Found", - "n-cards-found": "%s Cards Found", - "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "board", - "operator-board-abbrev": "b", - "operator-swimlane": "swimlane", - "operator-swimlane-abbrev": "s", - "operator-list": "list", - "operator-list-abbrev": "l", - "operator-label": "label", - "operator-label-abbrev": "#", - "operator-user": "user", - "operator-user-abbrev": "@", - "operator-member": "member", - "operator-member-abbrev": "m", - "operator-assignee": "assignee", - "operator-assignee-abbrev": "a", - "operator-creator": "creator", - "operator-status": "status", - "operator-due": "due", - "operator-created": "created", - "operator-modified": "modified", - "operator-sort": "sort", - "operator-comment": "comment", - "operator-has": "has", - "operator-limit": "limit", - "operator-debug": "debug", - "operator-org": "org", - "operator-team": "team", - "predicate-archived": "archived", - "predicate-open": "open", - "predicate-ended": "ended", - "predicate-all": "all", - "predicate-overdue": "overdue", - "predicate-week": "week", - "predicate-month": "month", - "predicate-quarter": "quarter", - "predicate-year": "year", - "predicate-due": "due", - "predicate-modified": "modified", - "predicate-created": "created", - "predicate-attachment": "attachment", - "predicate-description": "description", - "predicate-checklist": "checklist", - "predicate-start": "start", - "predicate-end": "end", - "predicate-assignee": "assignee", - "predicate-member": "member", - "predicate-public": "public", - "predicate-private": "private", - "predicate-selector": "selector", - "predicate-projection": "projection", - "operator-unknown-error": "%s is not an operator", - "operator-number-expected": "operator __operator__ expected a number, got '__value__'", - "operator-sort-invalid": "sort of '%s' is invalid", - "operator-status-invalid": "'%s' is not a valid status", - "operator-has-invalid": "%s is not a valid existence check", - "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", - "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "Next Page", - "previous-page": "Previous Page", - "heading-notes": "Notes", - "globalSearch-instructions-heading": "Search Instructions", - "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", - "globalSearch-instructions-operators": "Available operators:", - "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", - "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", - "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", - "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", - "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", - "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", - "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", - "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", - "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", - "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", - "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", - "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", - "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", - "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", - "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", - "globalSearch-instructions-notes-1": "Multiple operators may be specified.", - "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", - "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", - "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", - "globalSearch-instructions-notes-4": "Text searches are case insensitive.", - "globalSearch-instructions-notes-5": "By default archived cards are not searched.", - "link-to-search": "Link to this search", - "excel-font": "Arial", - "number": "Number", - "label-colors": "Label Colors", - "label-names": "Label Names", - "archived-at": "archived at", - "sort-cards": "Sort Cards", - "sort-is-on": "Sort is on", - "cardsSortPopup-title": "Sort Cards", - "due-date": "Due Date", - "server-error": "Server Error", - "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", - "title-alphabetically": "Title (Alphabetically)", - "created-at-newest-first": "Created At (Newest First)", - "created-at-oldest-first": "Created At (Oldest First)", - "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", - "move-swimlane": "Move Swimlane", - "moveSwimlanePopup-title": "Move Swimlane", - "custom-field-stringtemplate": "String Template", - "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", - "custom-field-stringtemplate-separator": "Separator (use or   for a space)", - "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", - "creator": "Creator", - "creator-on-minicard": "Creator on minicard", - "filesReportTitle": "Files Report", - "reports": "Reports", - "rulesReportTitle": "Rules Report", - "boardsReportTitle": "Boards Report", - "cardsReportTitle": "Cards Report", - "copy-swimlane": "Copy Swimlane", - "copySwimlanePopup-title": "Copy Swimlane", - "display-card-creator": "Display Card Creator", - "wait-spinner": "Wait Spinner", - "Bounce": "Bounce Wait Spinner", - "Cube": "Cube Wait Spinner", - "Cube-Grid": "Cube-Grid Wait Spinner", - "Dot": "Dot Wait Spinner", - "Double-Bounce": "Double Bounce Wait Spinner", - "Rotateplane": "Rotateplane Wait Spinner", - "Scaleout": "Scaleout Wait Spinner", - "Wave": "Wave Wait Spinner", - "maximize-card": "Maximize Card", - "minimize-card": "Minimize Card", - "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", - "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", - "subject": "Subject", - "details": "Details", - "carbon-copy": "Carbon Copy (Cc:)", - "ticket": "Ticket", - "tickets": "Tickets", - "ticket-number": "Ticket Number", - "open": "Open", - "pending": "Pending", - "closed": "Closed", - "resolved": "Resolved", - "cancelled": "Cancelled", - "history": "History", - "request": "Request", - "requests": "Requests", - "help-request": "Help Request", - "editCardSortOrderPopup-title": "Change Sorting", - "cardDetailsPopup-title": "Card Details", - "add-teams": "Add teams", - "add-teams-label": "Added teams are displayed below:", - "remove-team-from-table": "Are you sure you want to remove this team from the board ?", - "confirm-btn": "Confirm", - "remove-btn": "Remove", - "filter-card-title-label": "Filter by card title", - "invite-people-success": "Invitation to register sent with success", - "invite-people-error": "Error while sending invitation to register", - "can-invite-if-same-mailDomainName": "Email domain name", - "to-create-teams-contact-admin": "To create teams, please contact the administrator.", - "Node_heap_total_heap_size": "Node heap: total heap size", - "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", - "Node_heap_total_physical_size": "Node heap: total physical size", - "Node_heap_total_available_size": "Node heap: total available size", - "Node_heap_used_heap_size": "Node heap: used heap size", - "Node_heap_heap_size_limit": "Node heap: heap size limit", - "Node_heap_malloced_memory": "Node heap: malloced memory", - "Node_heap_peak_malloced_memory": "Node heap: peak malloced memory", - "Node_heap_does_zap_garbage": "Node heap: does zap garbage", - "Node_heap_number_of_native_contexts": "Node heap: number of native contexts", - "Node_heap_number_of_detached_contexts": "Node heap: number of detached contexts", - "Node_memory_usage_rss": "Node memory usage: resident set size", - "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", - "Node_memory_usage_heap_used": "Node memory usage: actual memory used", - "Node_memory_usage_external": "Node memory usage: external", - "add-organizations": "Add organizations", - "add-organizations-label": "Added organizations are displayed below:", - "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", - "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", - "custom-legal-notice-link-url": "Custom legal notice page URL", - "acceptance_of_our_legalNotice": "By continuing, you accept our", - "legalNotice": "legal notice", - "copied": "Copied!", - "checklistActionsPopup-title": "Checklist Actions", - "moveChecklist": "Move Checklist", - "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", - "copyChecklist": "Copy Checklist", - "copyChecklistPopup-title": "Copy Checklist", - "card-show-lists": "Card Show Lists", - "subtaskActionsPopup-title": "Subtask Actions", - "attachmentActionsPopup-title": "Attachment Actions", - "attachment-move-storage-fs": "Move attachment to filesystem", - "attachment-move-storage-gridfs": "Move attachment to GridFS", - "attachment-move-storage-s3": "Move attachment to S3", - "attachment-move": "Move Attachment", - "move-all-attachments-to-fs": "Move all attachments to filesystem", - "move-all-attachments-to-gridfs": "Move all attachments to GridFS", - "move-all-attachments-to-s3": "Move all attachments to S3", - "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", - "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", - "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", - "path": "Path", - "version-name": "Version-Name", - "size": "Size", - "storage": "Storage", - "action": "Action", - "board-title": "Board Title", - "attachmentRenamePopup-title": "Rename", - "uploading": "Uploading", - "remaining_time": "Remaining time", - "speed": "Speed", - "progress": "Progress", - "password-again": "Password (again)", - "if-you-already-have-an-account": "If you already have an account", - "register": "Register", - "forgot-password": "Forgot password", - "minicardDetailsActionsPopup-title": "Card Details", - "Mongo_sessions_count": "Mongo sessions count", - "change-visibility": "Change Visibility", - "max-upload-filesize": "Max upload filesize in bytes:", - "allowed-upload-filetypes": "Allowed upload filetypes:", - "max-avatar-filesize": "Max avatar filesize in bytes:", - "allowed-avatar-filetypes": "Allowed avatar filetypes:", - "invalid-file": "If filename is invalid, upload or rename is cancelled.", - "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", - "drag-board": "Drag board", - "translation-number": "The number of custom translation strings is:", - "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", - "newTranslationPopup-title": "New custom translation string", - "editTranslationPopup-title": "Edit custom translation string", - "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Translation", - "text": "Text", - "translation-text": "Translation text", - "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" -} diff --git a/imports/i18n/data/th.i18n.json b/imports/i18n/data/th.i18n.json index 5495c1efe..c22f152d0 100644 --- a/imports/i18n/data/th.i18n.json +++ b/imports/i18n/data/th.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "แนบ %s ไปยัง %s", "activity-created": "สร้าง %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "ยกเว้น %s จาก %s", "activity-imported": "ถูกนำเข้า %s ไปยัง %s จาก %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "รายการตรวจสอบ", "click-to-star": "คลิกดาวบอร์ดนี้", "click-to-unstar": "คลิกยกเลิกดาวบอร์ดนี้", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard หรือลากและวาง", "close": "ปิด", "close-board": "ปิดบอร์ด", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "เหลือง", "unset-color": "Unset", - "comments": "Comments", "comment": "คอมเม็นต์", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "email-sent": "ส่งอีเมล์", "email-verifyEmail-subject": "ยืนยันที่อยู่อีเม์ของคุณบน __siteName__", "email-verifyEmail-text": "สวัสดี __user__,\n\nตรวจสอบบัญชีอีเมล์ของคุณ ง่าย ๆ ตามลิงค์ด้านล่าง \n\n__url__\n\n ขอบคุณค่ะ", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Enable WIP Limit", "error-board-doesNotExist": "บอร์ดนี้ไม่มีอยู่แล้ว", "error-board-notAdmin": "คุณจะต้องเป็นผู้ดูแลระบบถึงจะทำสิ่งเหล่านี้ได้", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "ชื่อ นามสกุล", "header-logo-title": "ย้อนกลับไปที่หน้าบอร์ดของคุณ", - "show-activities": "Show Activities", + "hide-system-messages": "ซ่อนข้อความของระบบ", "headerBarCreateBoardPopup-title": "สร้างบอร์ด", "home": "หน้าหลัก", "import": "นำเข้า", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "กำหนดตัวเองให้การ์ดนี้", "shortcut-autocomplete-emoji": "เติม emoji อัตโนมัติ", "shortcut-autocomplete-members": "เติมสมาชิกอัตโนมัติ", "shortcut-clear-filters": "ล้างตัวกรองทั้งหมด", "shortcut-close-dialog": "ปิดหน้าต่าง", "shortcut-filter-my-cards": "กรองการ์ดฉัน", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "นำรายการทางลัดนี้ขึ้น", "shortcut-toggle-filterbar": "สลับแถบกรองสไลด์ด้้านข้าง", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "เวลา", "title": "หัวข้อ", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "ติดตาม", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/tk_TM.i18n.json b/imports/i18n/data/tk_TM.i18n.json deleted file mode 100644 index 78b62d375..000000000 --- a/imports/i18n/data/tk_TM.i18n.json +++ /dev/null @@ -1,1272 +0,0 @@ -{ - "accept": "Accept", - "act-activity-notify": "Activity Notification", - "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "created board __board__", - "act-createSwimlane": "created swimlane __swimlane__ to board __board__", - "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-createCustomField": "created custom field __customField__ at board __board__", - "act-deleteCustomField": "deleted custom field __customField__ at board __board__", - "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createList": "added list __list__ to board __board__", - "act-addBoardMember": "added member __member__ to board __board__", - "act-archivedBoard": "Board __board__ moved to Archive", - "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", - "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", - "act-importBoard": "imported board __board__", - "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", - "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", - "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-removeBoardMember": "removed member __member__ from board __board__", - "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", - "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-withBoardTitle": "__board__", - "act-withCardTitle": "[__board__] __card__", - "actions": "Actions", - "activities": "Activities", - "activity": "Activity", - "activity-added": "added %s to %s", - "activity-archived": "%s moved to Archive", - "activity-attached": "attached %s to %s", - "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", - "activity-customfield-created": "created custom field %s", - "activity-excluded": "excluded %s from %s", - "activity-imported": "imported %s into %s from %s", - "activity-imported-board": "imported %s from %s", - "activity-joined": "joined %s", - "activity-moved": "moved %s from %s to %s", - "activity-on": "on %s", - "activity-removed": "removed %s from %s", - "activity-sent": "sent %s to %s", - "activity-unjoined": "unjoined %s", - "activity-subtask-added": "added subtask to %s", - "activity-checked-item": "checked %s in checklist %s of %s", - "activity-unchecked-item": "unchecked %s in checklist %s of %s", - "activity-checklist-added": "added checklist to %s", - "activity-checklist-removed": "removed a checklist from %s", - "activity-checklist-completed": "completed checklist %s of %s", - "activity-checklist-uncompleted": "uncompleted the checklist %s of %s", - "activity-checklist-item-added": "added checklist item to '%s' in %s", - "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", - "add": "Add", - "activity-checked-item-card": "checked %s in checklist %s", - "activity-unchecked-item-card": "unchecked %s in checklist %s", - "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", - "activity-checklist-uncompleted-card": "uncompleted the checklist %s", - "activity-editComment": "edited comment %s", - "activity-deleteComment": "deleted comment %s", - "activity-receivedDate": "edited received date to %s of %s", - "activity-startDate": "edited start date to %s of %s", - "activity-dueDate": "edited due date to %s of %s", - "activity-endDate": "edited end date to %s of %s", - "add-attachment": "Add Attachment", - "add-board": "Add Board", - "add-template": "Add Template", - "add-card": "Add Card", - "add-card-to-top-of-list": "Add Card to Top of List", - "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Set Swimlane Height", - "set-swimlane-height": "Set Swimlane Height", - "set-swimlane-height-value": "Swimlane Height (pixels)", - "swimlane-height-error-message": "Swimlane height must be a positive integer", - "add-swimlane": "Add Swimlane", - "add-subtask": "Add Subtask", - "add-checklist": "Add Checklist", - "add-checklist-item": "Add an item to checklist", - "close-add-checklist-item": "Close add an item to checklist form", - "close-edit-checklist-item": "Close edit an item to checklist form", - "convertChecklistItemToCardPopup-title": "Convert to Card", - "add-cover": "Add cover image to minicard", - "add-label": "Add Label", - "add-list": "Add List", - "add-after-list": "Add After List", - "add-members": "Add Members", - "added": "Added", - "addMemberPopup-title": "Members", - "memberPopup-title": "Member Settings", - "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": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.", - "app-try-reconnect": "Try to reconnect.", - "archive": "Move to Archive", - "archive-all": "Move All to Archive", - "archive-board": "Move Board to Archive", - "archive-card": "Move Card to Archive", - "archive-list": "Move List to Archive", - "archive-swimlane": "Move Swimlane to Archive", - "archive-selection": "Move selection to Archive", - "archiveBoardPopup-title": "Move Board to Archive?", - "archived-items": "Archive", - "archived-boards": "Boards in Archive", - "restore-board": "Restore Board", - "no-archived-boards": "No Boards in Archive.", - "archives": "Archive", - "template": "Template", - "templates": "Templates", - "template-container": "Template Container", - "add-template-container": "Add Template Container", - "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 (__size__ max)", - "back": "Back", - "board-change-color": "Change color", - "board-change-background-image": "Change Background Image", - "board-background-image-url": "Background Image URL", - "add-background-image": "Add Background Image", - "remove-background-image": "Remove Background Image", - "show-at-all-boards-page" : "Show at All Boards page", - "board-info-on-my-boards" : "All Boards Settings", - "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", - "boardInfoOnMyBoards-title": "All Boards Settings", - "show-card-counter-per-list": "Show card count per list", - "show-board_members-avatar": "Show Board members avatars", - "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>.", - "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", - "boardChangeColorPopup-title": "Change Board Background", - "boardChangeBackgroundImagePopup-title": "Change Background Image", - "allBoardsChangeColorPopup-title": "Change color", - "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", - "boardChangeTitlePopup-title": "Rename Board", - "boardChangeVisibilityPopup-title": "Change Visibility", - "boardChangeWatchPopup-title": "Change Watch", - "boardMenuPopup-title": "Board Settings", - "allBoardsMenuPopup-title": "Settings", - "boardChangeViewPopup-title": "Board View", - "boards": "Boards", - "board-view": "Board View", - "board-view-cal": "Calendar", - "board-view-swimlanes": "Swimlanes", - "board-view-collapse": "Collapse", - "board-view-gantt": "Gantt", - "board-view-lists": "Lists", - "bucket-example": "Like “Bucket List” for example", - "cancel": "Cancel", - "card-archived": "This card is moved to Archive.", - "board-archived": "This board is moved to Archive.", - "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 move a card to Archive to remove it from the board and preserve the activity.", - "card-archive-pop": "Card will not be visible at this list after archiving card.", - "card-archive-suggest-cancel": "You can later restore card from Archive.", - "card-due": "Due", - "card-due-on": "Due on", - "card-spent": "Spent Time", - "card-edit-attachments": "Edit attachments", - "card-edit-custom-fields": "Edit custom fields", - "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", - "cardCustomField-datePopup-title": "Change date", - "cardCustomFieldsPopup-title": "Edit custom fields", - "cardStartVotingPopup-title": "Start a vote", - "positiveVoteMembersPopup-title": "Proponents", - "negativeVoteMembersPopup-title": "Opponents", - "card-edit-voting": "Edit voting", - "editVoteEndDatePopup-title": "Change vote end date", - "allowNonBoardMembers": "Allow all logged in users", - "vote-question": "Voting question", - "vote-public": "Show who voted what", - "vote-for-it": "for it", - "vote-against": "against", - "deleteVotePopup-title": "Delete vote?", - "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", - "cardStartPlanningPokerPopup-title": "Start a Planning Poker", - "card-edit-planning-poker": "Edit Planning Poker", - "editPokerEndDatePopup-title": "Change Planning Poker vote end date", - "poker-question": "Planning Poker", - "poker-one": "1", - "poker-two": "2", - "poker-three": "3", - "poker-five": "5", - "poker-eight": "8", - "poker-thirteen": "13", - "poker-twenty": "20", - "poker-forty": "40", - "poker-oneHundred": "100", - "poker-unsure": "?", - "poker-finish": "Finish", - "poker-result-votes": "Votes", - "poker-result-who": "Who", - "poker-replay": "Replay", - "set-estimation": "Set Estimation", - "deletePokerPopup-title": "Delete planning poker?", - "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", - "cardDeletePopup-title": "Delete Card?", - "cardArchivePopup-title": "Archive Card?", - "cardDetailsActionsPopup-title": "Card Actions", - "cardLabelsPopup-title": "Labels", - "cardMembersPopup-title": "Members", - "cardMorePopup-title": "More", - "cardTemplatePopup-title": "Create template", - "cards": "Cards", - "cards-count": "Cards", - "cards-count-one": "Card", - "casSignIn": "Sign In with CAS", - "cardType-card": "Card", - "cardType-linkedCard": "Linked Card", - "cardType-linkedBoard": "Linked Board", - "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", - "subtasks": "Subtasks", - "checklists": "Checklists", - "click-to-star": "Click to star this board.", - "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", - "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 “Archive” button from the home header.", - "close-card": "Close Card", - "color-black": "black", - "color-blue": "blue", - "color-crimson": "crimson", - "color-darkgreen": "darkgreen", - "color-gold": "gold", - "color-gray": "gray", - "color-green": "green", - "color-indigo": "indigo", - "color-lime": "lime", - "color-magenta": "magenta", - "color-mistyrose": "mistyrose", - "color-navy": "navy", - "color-orange": "orange", - "color-paleturquoise": "paleturquoise", - "color-peachpuff": "peachpuff", - "color-pink": "pink", - "color-plum": "plum", - "color-purple": "purple", - "color-red": "red", - "color-saddlebrown": "saddlebrown", - "color-silver": "silver", - "color-sky": "sky", - "color-slateblue": "slateblue", - "color-white": "white", - "color-yellow": "yellow", - "unset-color": "Unset", - "comments": "Comments", - "comment": "Comment", - "comment-placeholder": "Write Comment", - "comment-only": "Comment only", - "comment-only-desc": "Can comment on cards only.", - "comment-delete": "Are you sure you want to delete the comment?", - "deleteCommentPopup-title": "Delete comment?", - "no-comments": "No comments", - "no-comments-desc": "Can not see comments and activities.", - "worker": "Worker", - "worker-desc": "Can only move cards, assign itself to card and comment.", - "computer": "Computer", - "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", - "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", - "subtaskDeletePopup-title": "Delete Subtask?", - "checklistDeletePopup-title": "Delete Checklist?", - "copy-card-link-to-clipboard": "Copy card link to clipboard", - "copy-text-to-clipboard": "Copy text to clipboard", - "linkCardPopup-title": "Link Card", - "searchElementPopup-title": "Search", - "copyCardPopup-title": "Copy Card", - "copyManyCardsPopup-title": "Copy Template to Many Cards", - "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", - "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", - "create": "Create", - "createBoardPopup-title": "Create Board", - "chooseBoardSourcePopup-title": "Import board", - "createLabelPopup-title": "Create Label", - "createCustomField": "Create Field", - "createCustomFieldPopup-title": "Create Field", - "current": "current", - "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", - "custom-field-checkbox": "Checkbox", - "custom-field-currency": "Currency", - "custom-field-currency-option": "Currency Code", - "custom-field-date": "Date", - "custom-field-dropdown": "Dropdown List", - "custom-field-dropdown-none": "(none)", - "custom-field-dropdown-options": "List Options", - "custom-field-dropdown-options-placeholder": "Press enter to add more options", - "custom-field-dropdown-unknown": "(unknown)", - "custom-field-number": "Number", - "custom-field-text": "Text", - "custom-fields": "Custom Fields", - "date": "Date", - "decline": "Decline", - "default-avatar": "Default avatar", - "delete": "Delete", - "deleteCustomFieldPopup-title": "Delete Custom Field?", - "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", - "editCustomFieldPopup-title": "Edit Field", - "addReactionPopup-title": "Add reaction", - "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-vertical-scrollbars": "Enable vertical scrollbars", - "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-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) 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-orgname-taken": "This organization name is already taken", - "error-teamname-taken": "This team name is already taken", - "error-email-taken": "Email has already been taken", - "export-board": "Export board", - "export-board-json": "Export board to JSON", - "export-board-csv": "Export board to CSV", - "export-board-tsv": "Export board to TSV", - "export-board-excel": "Export board to Excel", - "user-can-not-export-excel": "User can not export Excel", - "export-board-html": "Export board to HTML", - "export-card": "Export card", - "export-card-pdf": "Export card to PDF", - "user-can-not-export-card-to-pdf": "User can not export card to PDF", - "exportBoardPopup-title": "Export board", - "exportCardPopup-title": "Export card", - "sort": "Sort", - "sorted": "Sorted", - "remove-sort": "Remove sort", - "sort-desc": "Click to Sort List", - "list-sort-by": "Sort the List By:", - "list-label-modifiedAt": "Last Access Time", - "list-label-title": "Name of the List", - "list-label-sort": "Your Manual Order", - "list-label-short-modifiedAt": "(L)", - "list-label-short-title": "(N)", - "list-label-short-sort": "(M)", - "filter": "Filter", - "filter-cards": "Filter Cards or Lists", - "filter-dates-label": "Filter by date", - "filter-no-due-date": "No due date", - "filter-overdue": "Overdue", - "filter-due-today": "Due today", - "filter-due-this-week": "Due this week", - "filter-due-next-week": "Due next week", - "filter-due-tomorrow": "Due tomorrow", - "list-filter-label": "Filter List by Title", - "filter-clear": "Clear filter", - "filter-labels-label": "Filter by label", - "filter-no-label": "No label", - "filter-member-label": "Filter by member", - "filter-no-member": "No member", - "filter-assignee-label": "Filter by assignee", - "filter-no-assignee": "No assignee", - "filter-custom-fields-label": "Filter by Custom Fields", - "filter-no-custom-fields": "No Custom Fields", - "filter-show-archive": "Show archived lists", - "filter-hide-empty": "Hide empty lists", - "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", - "other-filters-label": "Other Filters", - "advanced-filter-label": "Advanced Filter", - "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", - "fullname": "Full Name", - "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", - "headerBarCreateBoardPopup-title": "Create Board", - "home": "Home", - "import": "Import", - "impersonate-user": "Impersonate user", - "link": "Link", - "import-board": "import board", - "import-board-c": "Import board", - "import-board-title-trello": "Import board from Trello", - "import-board-title-wekan": "Import board from previous export", - "import-board-title-csv": "Import board from CSV/TSV", - "from-trello": "From Trello", - "from-wekan": "From previous export", - "from-csv": "From CSV/TSV", - "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", - "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", - "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", - "import-json-placeholder": "Paste your valid JSON data here", - "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", - "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", - "import-show-user-mapping": "Review members mapping", - "import-user-select": "Pick your existing user you want to use as this member", - "importMapMembersAddPopup-title": "Select member", - "info": "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": "Move all cards in this list to Archive", - "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", - "list-move-cards": "Move all cards in this list", - "list-select-cards": "Select all cards in this list", - "set-color-list": "Set Color", - "listActionPopup-title": "List Actions", - "settingsUserPopup-title": "User Settings", - "settingsTeamPopup-title": "Team Settings", - "settingsOrgPopup-title": "Organization Settings", - "swimlaneActionPopup-title": "Swimlane Actions", - "swimlaneAddPopup-title": "Add a Swimlane below", - "listImportCardPopup-title": "Import a Trello card", - "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", - "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 move a list to Archive to remove it from the board and preserve the activity.", - "lists": "Lists", - "swimlanes": "Swimlanes", - "log-out": "Log Out", - "log-in": "Log In", - "loginPopup-title": "Log In", - "memberMenuPopup-title": "Member Settings", - "members": "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-label": "Set label for selection", - "multi-selection-member": "Set member for 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 cards in Archive.", - "no-archived-lists": "No lists in Archive.", - "no-archived-swimlanes": "No swimlanes in Archive.", - "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 creator 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 image from minicard", - "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", - "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", - "rescue-card-description-dialogue": "Overwrite current card description with your changes?", - "save": "Save", - "search": "Search", - "rules": "Rules", - "search-cards": "Search from card/list titles, descriptions and custom fields on this board", - "search-example": "Write text you search and press Enter", - "select-color": "Select Color", - "select-board": "Select Board", - "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", - "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", - "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-filter-my-assigned-cards": "Filter my assigned cards", - "shortcut-show-shortcuts": "Bring up this shortcuts list", - "shortcut-toggle-filterbar": "Toggle Filter Sidebar", - "shortcut-toggle-searchbar": "Toggle Search 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", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", - "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", - "remove-labels-multiselect": "Multi-Selection removes labels 1-9", - "tracking": "Tracking", - "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.", - "type": "Type", - "unassign-member": "Unassign member", - "unsaved-description": "You have an unsaved description.", - "unwatch": "Unwatch", - "upload": "Upload", - "upload-avatar": "Upload an avatar", - "uploaded-avatar": "Uploaded an avatar", - "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", - "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", - "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", - "custom-login-logo-image-url": "Custom Login Logo Image URL", - "custom-login-logo-link-url": "Custom Login Logo Link URL", - "custom-help-link-url": "Custom Help Link URL", - "text-below-custom-login-logo": "Text below Custom Login Logo", - "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", - "username": "Username", - "import-usernames": "Import Usernames", - "view-it": "View it", - "warn-list-archived": "warning: this card is in an list at Archive", - "watch": "Watch", - "watching": "Watching", - "watching-info": "You will be notified of any change in this board", - "welcome-board": "Welcome Board", - "welcome-swimlane": "Milestone 1", - "welcome-list1": "Basics", - "welcome-list2": "Advanced", - "card-templates-swimlane": "Card Templates", - "list-templates-swimlane": "List Templates", - "board-templates-swimlane": "Board Templates", - "what-to-do": "What do you want to do?", - "wipLimitErrorPopup-title": "Invalid WIP Limit", - "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.", - "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.", - "admin-panel": "Admin Panel", - "settings": "Settings", - "people": "People", - "registration": "Registration", - "disable-self-registration": "Disable Self-Registration", - "disable-forgot-password": "Disable Forgot Password", - "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", - "email-smtp-test-subject": "SMTP Test Email", - "email-smtp-test-text": "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.", - "webhook-title": "Webhook Name", - "webhook-token": "Token (Optional for Authentication)", - "outgoing-webhooks": "Outgoing Webhooks", - "bidirectional-webhooks": "Two-Way Webhooks", - "outgoingWebhooksPopup-title": "Outgoing Webhooks", - "boardCardTitlePopup-title": "Card Title Filter", - "disable-webhook": "Disable This Webhook", - "global-webhook": "Global Webhooks", - "new-outgoing-webhook": "New Outgoing Webhook", - "no-name": "(Unknown)", - "Node_version": "Node version", - "Meteor_version": "Meteor version", - "MongoDB_version": "MongoDB version", - "MongoDB_storage_engine": "MongoDB storage engine", - "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", - "OS_Arch": "OS Arch", - "OS_Cpus": "OS CPU Count", - "OS_Freemem": "OS Free Memory", - "OS_Loadavg": "OS Load Average", - "OS_Platform": "OS Platform", - "OS_Release": "OS Release", - "OS_Totalmem": "OS Total Memory", - "OS_Type": "OS Type", - "OS_Uptime": "OS Uptime", - "days": "days", - "hours": "hours", - "minutes": "minutes", - "seconds": "seconds", - "show-field-on-card": "Show this field on card", - "automatically-field-on-card": "Add field to new cards", - "always-field-on-card": "Add field to all cards", - "showLabel-field-on-card": "Show field label on minicard", - "showSum-field-on-list": "Show sum of fields at top of list", - "yes": "Yes", - "no": "No", - "accounts": "Accounts", - "accounts-allowEmailChange": "Allow Email Change", - "accounts-allowUserNameChange": "Allow Username Change", - "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", - "tableVisibilityMode" : "Boards visibility", - "createdAt": "Created at", - "modifiedAt": "Modified at", - "verified": "Verified", - "active": "Active", - "card-received": "Received", - "card-received-on": "Received on", - "card-end": "End", - "card-end-on": "Ends on", - "editCardReceivedDatePopup-title": "Change received date", - "editCardEndDatePopup-title": "Change end date", - "setCardColorPopup-title": "Set color", - "setCardActionsColorPopup-title": "Choose a color", - "setSwimlaneColorPopup-title": "Choose a color", - "setListColorPopup-title": "Choose a color", - "assigned-by": "Assigned By", - "requested-by": "Requested By", - "card-sorting-by-number": "Card sorting by number", - "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", - "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", - "boardDeletePopup-title": "Delete Board?", - "delete-board": "Delete Board", - "default-subtasks-board": "Subtasks for __board__ board", - "default": "Default", - "defaultdefault": "Default", - "queue": "Queue", - "subtask-settings": "Subtasks Settings", - "card-settings": "Card Settings", - "minicard-settings": "Minicard Settings", - "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", - "boardCardSettingsPopup-title": "Card Settings", - "boardMinicardSettingsPopup-title": "Minicard Settings", - "deposit-subtasks-board": "Deposit subtasks to this board:", - "deposit-subtasks-list": "Landing list for subtasks deposited here:", - "show-parent-in-minicard": "Show parent in minicard:", - "description-on-minicard": "Description on minicard", - "cover-attachment-on-minicard": "Cover image on minicard", - "badge-attachment-on-minicard": "Count of attachments on minicard", - "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", - "prefix-with-full-path": "Prefix with full path", - "prefix-with-parent": "Prefix with parent", - "subtext-with-full-path": "Subtext with full path", - "subtext-with-parent": "Subtext with parent", - "change-card-parent": "Change card's parent", - "parent-card": "Parent card", - "source-board": "Source board", - "no-parent": "Don't show parent", - "activity-added-label": "added label '%s' to %s", - "activity-removed-label": "removed label '%s' from %s", - "activity-delete-attach": "deleted an attachment from %s", - "activity-added-label-card": "added label '%s'", - "activity-removed-label-card": "removed label '%s'", - "activity-delete-attach-card": "deleted an attachment", - "activity-set-customfield": "set custom field '%s' to '%s' in %s", - "activity-unset-customfield": "unset custom field '%s' in %s", - "r-rule": "Rule", - "r-add-trigger": "Add trigger", - "r-add-action": "Add action", - "r-board-rules": "Board rules", - "r-add-rule": "Add rule", - "r-view-rule": "View rule", - "r-delete-rule": "Delete rule", - "r-new-rule-name": "New rule title", - "r-no-rules": "No rules", - "r-trigger": "Trigger", - "r-action": "Action", - "r-when-a-card": "When a card", - "r-is": "is", - "r-is-moved": "is moved", - "r-added-to": "Added to", - "r-removed-from": "Removed from", - "r-the-board": "the board", - "r-list": "list", - "set-filter": "Set Filter", - "r-moved-to": "Moved to", - "r-moved-from": "Moved from", - "r-archived": "Moved to Archive", - "r-unarchived": "Restored from Archive", - "r-a-card": "a card", - "r-when-a-label-is": "When a label is", - "r-when-the-label": "When the label", - "r-list-name": "list name", - "r-when-a-member": "When a member is", - "r-when-the-member": "When the member", - "r-name": "name", - "r-when-a-attach": "When an attachment", - "r-when-a-checklist": "When a checklist is", - "r-when-the-checklist": "When the checklist", - "r-completed": "Completed", - "r-made-incomplete": "Made incomplete", - "r-when-a-item": "When a checklist item is", - "r-when-the-item": "When the checklist item", - "r-checked": "Checked", - "r-unchecked": "Unchecked", - "r-move-card-to": "Move card to", - "r-top-of": "Top of", - "r-bottom-of": "Bottom of", - "r-its-list": "its list", - "r-archive": "Move to Archive", - "r-unarchive": "Restore from Archive", - "r-card": "card", - "r-add": "Add", - "r-remove": "Remove", - "r-label": "label", - "r-member": "member", - "r-remove-all": "Remove all members from the card", - "r-set-color": "Set color to", - "r-checklist": "checklist", - "r-check-all": "Check all", - "r-uncheck-all": "Uncheck all", - "r-items-check": "items of checklist", - "r-check": "Check", - "r-uncheck": "Uncheck", - "r-item": "item", - "r-of-checklist": "of checklist", - "r-send-email": "Send an email", - "r-to": "to", - "r-of": "of", - "r-subject": "subject", - "r-rule-details": "Rule details", - "r-d-move-to-top-gen": "Move card to top of its list", - "r-d-move-to-top-spec": "Move card to top of list", - "r-d-move-to-bottom-gen": "Move card to bottom of its list", - "r-d-move-to-bottom-spec": "Move card to bottom of list", - "r-d-send-email": "Send email", - "r-d-send-email-to": "to", - "r-d-send-email-subject": "subject", - "r-d-send-email-message": "message", - "r-d-archive": "Move card to Archive", - "r-d-unarchive": "Restore card from Archive", - "r-d-add-label": "Add label", - "r-d-remove-label": "Remove label", - "r-create-card": "Create new card", - "r-in-list": "in list", - "r-in-swimlane": "in swimlane", - "r-d-add-member": "Add member", - "r-d-remove-member": "Remove member", - "r-d-remove-all-member": "Remove all member", - "r-d-check-all": "Check all items of a list", - "r-d-uncheck-all": "Uncheck all items of a list", - "r-d-check-one": "Check item", - "r-d-uncheck-one": "Uncheck item", - "r-d-check-of-list": "of checklist", - "r-d-add-checklist": "Add checklist", - "r-d-remove-checklist": "Remove checklist", - "r-by": "by", - "r-add-checklist": "Add checklist", - "r-with-items": "with items", - "r-items-list": "item1,item2,item3", - "r-add-swimlane": "Add swimlane", - "r-swimlane-name": "swimlane name", - "r-board-note": "Note: leave a field empty to match every possible value. ", - "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", - "r-when-a-card-is-moved": "When a card is moved to another list", - "r-set": "Set", - "r-update": "Update", - "r-datefield": "date field", - "r-df-start-at": "start", - "r-df-due-at": "due", - "r-df-end-at": "end", - "r-df-received-at": "received", - "r-to-current-datetime": "to current date/time", - "r-remove-value-from": "Remove value from", - "r-link-card": "Link card to", - "ldap": "LDAP", - "oauth2": "OAuth2", - "cas": "CAS", - "authentication-method": "Authentication method", - "authentication-type": "Authentication type", - "custom-product-name": "Custom Product Name", - "layout": "Layout", - "hide-logo": "Hide Logo", - "hide-card-counter-list": "Hide card counter list on All Boards", - "hide-board-member-list": "Hide board member list on All Boards", - "add-custom-html-after-body-start": "Add Custom HTML after <body> start", - "add-custom-html-before-body-end": "Add Custom HTML before </body> end", - "error-undefined": "Something went wrong", - "error-ldap-login": "An error occurred while trying to login", - "display-authentication-method": "Display Authentication Method", - "oidc-button-text": "Customize the OIDC button text", - "default-authentication-method": "Default Authentication Method", - "duplicate-board": "Duplicate Board", - "org-number": "The number of organizations is: ", - "team-number": "The number of teams is: ", - "people-number": "The number of people is: ", - "swimlaneDeletePopup-title": "Delete Swimlane ?", - "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", - "restore-all": "Restore all", - "delete-all": "Delete all", - "loading": "Loading, please wait.", - "previous_as": "last time was", - "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", - "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", - "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", - "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", - "a-dueAt": "modified due time to be", - "a-endAt": "modified ending time to be", - "a-startAt": "modified starting time to be", - "a-receivedAt": "modified received time to be", - "almostdue": "current due time %s is approaching", - "pastdue": "current due time %s is past", - "duenow": "current due time %s is today", - "act-newDue": "__list__/__card__ has 1st due reminder [__board__]", - "act-withDue": "__list__/__card__ due reminders [__board__]", - "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", - "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", - "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", - "act-atUserComment": "You were mentioned in [__board__] __list__/__card__", - "delete-user-confirm-popup": "Are you sure you want to delete this account? There is no undo.", - "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", - "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", - "accounts-allowUserDelete": "Allow users to self delete their account", - "hide-minicard-label-text": "Hide minicard label text", - "show-desktop-drag-handles": "Show desktop drag handles", - "assignee": "Assignee", - "cardAssigneesPopup-title": "Assignee", - "addmore-detail": "Add a more detailed description", - "show-on-card": "Show on Card", - "show-on-minicard": "Show on Minicard", - "new": "New", - "editOrgPopup-title": "Edit Organization", - "newOrgPopup-title": "New Organization", - "editTeamPopup-title": "Edit Team", - "newTeamPopup-title": "New Team", - "editUserPopup-title": "Edit User", - "newUserPopup-title": "New User", - "notifications": "Notifications", - "help": "Help", - "view-all": "View All", - "filter-by-unread": "Filter by Unread", - "mark-all-as-read": "Mark all as read", - "remove-all-read": "Remove all read", - "allow-rename": "Allow Rename", - "allowRenamePopup-title": "Allow Rename", - "start-day-of-week": "Set day of the week start", - "monday": "Monday", - "tuesday": "Tuesday", - "wednesday": "Wednesday", - "thursday": "Thursday", - "friday": "Friday", - "saturday": "Saturday", - "sunday": "Sunday", - "status": "Status", - "swimlane": "Swimlane", - "owner": "Owner", - "last-modified-at": "Last modified at", - "last-activity": "Last activity", - "voting": "Voting", - "archived": "Archived", - "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", - "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", - "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", - "task": "Task", - "create-task": "Create Task", - "ok": "OK", - "organizations": "Organizations", - "teams": "Teams", - "displayName": "Display Name", - "shortName": "Short Name", - "autoAddUsersWithDomainName": "Automatically add users with the domain name", - "website": "Website", - "person": "Person", - "my-cards": "My Cards", - "card": "Card", - "list": "List", - "board": "Board", - "context-separator": "/", - "myCardsViewChange-title": "My Cards View", - "myCardsViewChangePopup-title": "My Cards View", - "myCardsViewChange-choice-boards": "Boards", - "myCardsViewChange-choice-table": "Table", - "myCardsSortChange-title": "My Cards Sort", - "myCardsSortChangePopup-title": "My Cards Sort", - "myCardsSortChange-choice-board": "By Board", - "myCardsSortChange-choice-dueat": "By Due Date", - "dueCards-title": "Due Cards", - "dueCardsViewChange-title": "Due Cards View", - "dueCardsViewChangePopup-title": "Due Cards View", - "dueCardsViewChange-choice-me": "Me", - "dueCardsViewChange-choice-all": "All Users", - "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", - "broken-cards": "Broken Cards", - "board-title-not-found": "Board '%s' not found.", - "swimlane-title-not-found": "Swimlane '%s' not found.", - "list-title-not-found": "List '%s' not found.", - "label-not-found": "Label '%s' not found.", - "label-color-not-found": "Label color %s not found.", - "user-username-not-found": "Username '%s' not found.", - "comment-not-found": "Card with comment containing text '%s' not found.", - "org-name-not-found": "Organization '%s' not found.", - "team-name-not-found": "Team '%s' not found.", - "globalSearch-title": "Search All Boards", - "no-cards-found": "No Cards Found", - "one-card-found": "One Card Found", - "n-cards-found": "%s Cards Found", - "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", - "operator-board": "board", - "operator-board-abbrev": "b", - "operator-swimlane": "swimlane", - "operator-swimlane-abbrev": "s", - "operator-list": "list", - "operator-list-abbrev": "l", - "operator-label": "label", - "operator-label-abbrev": "#", - "operator-user": "user", - "operator-user-abbrev": "@", - "operator-member": "member", - "operator-member-abbrev": "m", - "operator-assignee": "assignee", - "operator-assignee-abbrev": "a", - "operator-creator": "creator", - "operator-status": "status", - "operator-due": "due", - "operator-created": "created", - "operator-modified": "modified", - "operator-sort": "sort", - "operator-comment": "comment", - "operator-has": "has", - "operator-limit": "limit", - "operator-debug": "debug", - "operator-org": "org", - "operator-team": "team", - "predicate-archived": "archived", - "predicate-open": "open", - "predicate-ended": "ended", - "predicate-all": "all", - "predicate-overdue": "overdue", - "predicate-week": "week", - "predicate-month": "month", - "predicate-quarter": "quarter", - "predicate-year": "year", - "predicate-due": "due", - "predicate-modified": "modified", - "predicate-created": "created", - "predicate-attachment": "attachment", - "predicate-description": "description", - "predicate-checklist": "checklist", - "predicate-start": "start", - "predicate-end": "end", - "predicate-assignee": "assignee", - "predicate-member": "member", - "predicate-public": "public", - "predicate-private": "private", - "predicate-selector": "selector", - "predicate-projection": "projection", - "operator-unknown-error": "%s is not an operator", - "operator-number-expected": "operator __operator__ expected a number, got '__value__'", - "operator-sort-invalid": "sort of '%s' is invalid", - "operator-status-invalid": "'%s' is not a valid status", - "operator-has-invalid": "%s is not a valid existence check", - "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", - "operator-debug-invalid": "%s is not a valid debug predicate", - "next-page": "Next Page", - "previous-page": "Previous Page", - "heading-notes": "Notes", - "globalSearch-instructions-heading": "Search Instructions", - "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", - "globalSearch-instructions-operators": "Available operators:", - "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", - "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", - "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", - "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", - "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", - "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", - "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", - "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", - "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", - "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", - "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", - "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", - "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", - "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", - "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", - "globalSearch-instructions-notes-1": "Multiple operators may be specified.", - "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", - "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", - "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", - "globalSearch-instructions-notes-4": "Text searches are case insensitive.", - "globalSearch-instructions-notes-5": "By default archived cards are not searched.", - "link-to-search": "Link to this search", - "excel-font": "Arial", - "number": "Number", - "label-colors": "Label Colors", - "label-names": "Label Names", - "archived-at": "archived at", - "sort-cards": "Sort Cards", - "sort-is-on": "Sort is on", - "cardsSortPopup-title": "Sort Cards", - "due-date": "Due Date", - "server-error": "Server Error", - "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", - "title-alphabetically": "Title (Alphabetically)", - "created-at-newest-first": "Created At (Newest First)", - "created-at-oldest-first": "Created At (Oldest First)", - "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", - "move-swimlane": "Move Swimlane", - "moveSwimlanePopup-title": "Move Swimlane", - "custom-field-stringtemplate": "String Template", - "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", - "custom-field-stringtemplate-separator": "Separator (use or   for a space)", - "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", - "creator": "Creator", - "creator-on-minicard": "Creator on minicard", - "filesReportTitle": "Files Report", - "reports": "Reports", - "rulesReportTitle": "Rules Report", - "boardsReportTitle": "Boards Report", - "cardsReportTitle": "Cards Report", - "copy-swimlane": "Copy Swimlane", - "copySwimlanePopup-title": "Copy Swimlane", - "display-card-creator": "Display Card Creator", - "wait-spinner": "Wait Spinner", - "Bounce": "Bounce Wait Spinner", - "Cube": "Cube Wait Spinner", - "Cube-Grid": "Cube-Grid Wait Spinner", - "Dot": "Dot Wait Spinner", - "Double-Bounce": "Double Bounce Wait Spinner", - "Rotateplane": "Rotateplane Wait Spinner", - "Scaleout": "Scaleout Wait Spinner", - "Wave": "Wave Wait Spinner", - "maximize-card": "Maximize Card", - "minimize-card": "Minimize Card", - "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", - "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", - "subject": "Subject", - "details": "Details", - "carbon-copy": "Carbon Copy (Cc:)", - "ticket": "Ticket", - "tickets": "Tickets", - "ticket-number": "Ticket Number", - "open": "Open", - "pending": "Pending", - "closed": "Closed", - "resolved": "Resolved", - "cancelled": "Cancelled", - "history": "History", - "request": "Request", - "requests": "Requests", - "help-request": "Help Request", - "editCardSortOrderPopup-title": "Change Sorting", - "cardDetailsPopup-title": "Card Details", - "add-teams": "Add teams", - "add-teams-label": "Added teams are displayed below:", - "remove-team-from-table": "Are you sure you want to remove this team from the board ?", - "confirm-btn": "Confirm", - "remove-btn": "Remove", - "filter-card-title-label": "Filter by card title", - "invite-people-success": "Invitation to register sent with success", - "invite-people-error": "Error while sending invitation to register", - "can-invite-if-same-mailDomainName": "Email domain name", - "to-create-teams-contact-admin": "To create teams, please contact the administrator.", - "Node_heap_total_heap_size": "Node heap: total heap size", - "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", - "Node_heap_total_physical_size": "Node heap: total physical size", - "Node_heap_total_available_size": "Node heap: total available size", - "Node_heap_used_heap_size": "Node heap: used heap size", - "Node_heap_heap_size_limit": "Node heap: heap size limit", - "Node_heap_malloced_memory": "Node heap: malloced memory", - "Node_heap_peak_malloced_memory": "Node heap: peak malloced memory", - "Node_heap_does_zap_garbage": "Node heap: does zap garbage", - "Node_heap_number_of_native_contexts": "Node heap: number of native contexts", - "Node_heap_number_of_detached_contexts": "Node heap: number of detached contexts", - "Node_memory_usage_rss": "Node memory usage: resident set size", - "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", - "Node_memory_usage_heap_used": "Node memory usage: actual memory used", - "Node_memory_usage_external": "Node memory usage: external", - "add-organizations": "Add organizations", - "add-organizations-label": "Added organizations are displayed below:", - "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", - "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", - "custom-legal-notice-link-url": "Custom legal notice page URL", - "acceptance_of_our_legalNotice": "By continuing, you accept our", - "legalNotice": "legal notice", - "copied": "Copied!", - "checklistActionsPopup-title": "Checklist Actions", - "moveChecklist": "Move Checklist", - "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", - "copyChecklist": "Copy Checklist", - "copyChecklistPopup-title": "Copy Checklist", - "card-show-lists": "Card Show Lists", - "subtaskActionsPopup-title": "Subtask Actions", - "attachmentActionsPopup-title": "Attachment Actions", - "attachment-move-storage-fs": "Move attachment to filesystem", - "attachment-move-storage-gridfs": "Move attachment to GridFS", - "attachment-move-storage-s3": "Move attachment to S3", - "attachment-move": "Move Attachment", - "move-all-attachments-to-fs": "Move all attachments to filesystem", - "move-all-attachments-to-gridfs": "Move all attachments to GridFS", - "move-all-attachments-to-s3": "Move all attachments to S3", - "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", - "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", - "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", - "path": "Path", - "version-name": "Version-Name", - "size": "Size", - "storage": "Storage", - "action": "Action", - "board-title": "Board Title", - "attachmentRenamePopup-title": "Rename", - "uploading": "Uploading", - "remaining_time": "Remaining time", - "speed": "Speed", - "progress": "Progress", - "password-again": "Password (again)", - "if-you-already-have-an-account": "If you already have an account", - "register": "Register", - "forgot-password": "Forgot password", - "minicardDetailsActionsPopup-title": "Card Details", - "Mongo_sessions_count": "Mongo sessions count", - "change-visibility": "Change Visibility", - "max-upload-filesize": "Max upload filesize in bytes:", - "allowed-upload-filetypes": "Allowed upload filetypes:", - "max-avatar-filesize": "Max avatar filesize in bytes:", - "allowed-avatar-filetypes": "Allowed avatar filetypes:", - "invalid-file": "If filename is invalid, upload or rename is cancelled.", - "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", - "drag-board": "Drag board", - "translation-number": "The number of custom translation strings is:", - "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", - "newTranslationPopup-title": "New custom translation string", - "editTranslationPopup-title": "Edit custom translation string", - "settingsTranslationPopup-title": "Delete this custom translation string?", - "translation": "Translation", - "text": "Text", - "translation-text": "Translation text", - "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" -} diff --git a/imports/i18n/data/tlh.i18n.json b/imports/i18n/data/tlh.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/tlh.i18n.json +++ b/imports/i18n/data/tlh.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/tr.i18n.json b/imports/i18n/data/tr.i18n.json index 97e148dee..da71bc62a 100644 --- a/imports/i18n/data/tr.i18n.json +++ b/imports/i18n/data/tr.i18n.json @@ -46,10 +46,9 @@ "activities": "Etkinlikler", "activity": "Etkinlik", "activity-added": "%s içine %s ekledi", - "activity-archived": "%s Arşive taşındı", + "activity-archived": "%s arşive taşındı", "activity-attached": "%s içine %s ekledi", "activity-created": "%s öğesini oluşturdu", - "activity-changedListTitle": "Liste adı %syapıldı", "activity-customfield-created": "%s adlı özel alan yaratıldı", "activity-excluded": "%s içinden %s çıkarttı", "activity-imported": "%s kaynağından %s öğesini %s öğesinin içine taşıdı", @@ -86,16 +85,14 @@ "add-card": "Kart Ekle", "add-card-to-top-of-list": "Listenin Başına Kart Ekle", "add-card-to-bottom-of-list": "Listenin Sonuna Kart Ekle", - "setListWidthPopup-title": "Genişlik Ata", - "set-list-width": "Genişlik Ata", - "set-list-width-value": "En Az & En Çok Genişlik (piksel) Ata ", - "list-width-error-message": "Liste genişliği 100'den büyük sayısal bir değer olmalı", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", - "setSwimlaneHeightPopup-title": "Kulvar Uzunluğunu Ayarla", - "set-swimlane-height": "Kulvar Uzunluğunu Ayarla", - "set-swimlane-height-value": "Kulvar Uzunluğu (piksel)", - "swimlane-height-error-message": "Kulvar Uzunluğu pozitif bir tam sayı olmak zorundadır.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", "add-swimlane": "Kulvar Ekle", "add-subtask": "Alt Görev Ekle", "add-checklist": "Yapılacak Listesi Ekle", @@ -103,7 +100,7 @@ "close-add-checklist-item": "Close add an item to checklist form", "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Karta Çevir", - "add-cover": "Mini karta kapak resmi ekle", + "add-cover": "Add cover image to minicard", "add-label": "Etiket Ekle", "add-list": "Liste Ekle", "add-after-list": "Add After List", @@ -146,13 +143,13 @@ "attachmentDeletePopup-title": "Ek Silinsin mi?", "attachments": "Ekler", "auto-watch": "Oluşan yeni panoları kendiliğinden izlemeye al", - "avatar-too-big": "Avatar boyutu çok yüksek (__size__max)", + "avatar-too-big": "The avatar is too large (__size__ max)", "back": "Geri", "board-change-color": "Renk değiştir", - "board-change-background-image": "Arkaplan Resmini Değiştir", - "board-background-image-url": "Arkaplan Resmi URL", - "add-background-image": "Arkaplan Resmi Ekle", - "remove-background-image": "Arkaplan Resmini Kaldır", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "All Boards Settings", "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", @@ -165,9 +162,9 @@ "board-public-info": "Bu pano <strong>genel</strong>e açılacaktır.", "board-drag-drop-reorder-or-click-open": "Tahta ikonlarını yeniden sıralamak için sürükleyip bırakın. Tahtayı açmak için tahta ikonuna tıklayın.", "boardChangeColorPopup-title": "Pano arkaplan rengini değiştir", - "boardChangeBackgroundImagePopup-title": "Arkaplan Resmini Değiştir.", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "Renk değiştir", - "allBoardsChangeBackgroundImagePopup-title": "Arkaplan Resmini Değiştir.", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "Panonun Adını Değiştir", "boardChangeVisibilityPopup-title": "Görünebilirliği Değiştir", "boardChangeWatchPopup-title": "İzleme Durumunu Değiştir", @@ -266,9 +263,6 @@ "checklists": "Yapılacak Listeleri", "click-to-star": "Bu panoyu yıldızlamak için tıkla.", "click-to-unstar": "Bu panunun yıldızını kaldırmak için tıkla.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Yapıştır veya sürükleyip bırak", "close": "Kapat", "close-board": "Panoyu kapat", @@ -300,7 +294,6 @@ "color-white": "beyaz", "color-yellow": "sarı", "unset-color": "Seçilmemiş", - "comments": "Yorumlar", "comment": "Yorum", "comment-placeholder": "Yorum Yaz", "comment-only": "Sadece yorum", @@ -361,8 +354,8 @@ "edit-profile": "Profili Düzenle", "edit-wip-limit": "Devam Eden İş Sınırını Düzenle", "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", + "editCardStartDatePopup-title": "Change start date", + "editCardDueDatePopup-title": "Change due date", "editCustomFieldPopup-title": "Alanı düzenle", "addReactionPopup-title": "Reaksiyon ekle", "editCardSpentTimePopup-title": "Harcanan zamanı değiştir", @@ -383,7 +376,6 @@ "email-sent": "E-posta gönderildi", "email-verifyEmail-subject": "__siteName__ üzerindeki e-posta adresini doğrulama", "email-verifyEmail-text": "Merhaba __user__,\n\nHesap e-posta adresini doğrulamak için aşağıdaki linke tıklaman yeterli.\n\n__url__\n\nTeşekkürler.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Devam Eden İş Sınırını Aç", "error-board-doesNotExist": "Pano bulunamadı", "error-board-notAdmin": "Bu işlemi yapmak için pano yöneticisi olmalısın.", @@ -422,7 +414,7 @@ "list-label-short-modifiedAt": "(S)", "list-label-short-title": "(A)", "list-label-short-sort": "(M)", - "filter": "Filtre", + "filter": "Filter", "filter-cards": "Kartları veya Listeleri Filtrele", "filter-dates-label": "Tarihe göre filtrele", "filter-no-due-date": "Son tarih yok", @@ -451,7 +443,7 @@ "advanced-filter-description": "Gelişmiş Filtre, aşağıdaki operatörleri içeren bir dize yazmaya izin verir: == != <= >= && || ( ) Operatörler arasında ayırıcı olarak boşluk kullanılır. Adlarını ve değerlerini yazarak tüm Özel Alanlar için filtre uygulayabilirsiniz. Örneğin: Alan1 == Değer1. Not: Alanlar veya değerler boşluk içeriyorsa, bunları tek tırnak içine almanız gerekir. Örneğin: 'Alan 1' == 'Değer 1'. Tek kontrol karakterlerinin (' \\\\/) atlanması için \\\\ kullanabilirsiniz. Örneğin: Alan1 == Ben. Ayrıca birden fazla koşulu birleştirebilirsiniz. Örneğin: F1 == V1 || F1 == V2. Normalde tüm operatörler soldan sağa doğru yorumlanır. Parantez koyarak sırayı değiştirebilirsiniz. Örneğin: F1 == V1 && ( F2 == V2 || F2 == V3 ). Ayrıca normal ifadeyi kullanarak metin alanlarında arama yapabilirsiniz: F1 == /Tes.*/i", "fullname": "Ad Soyad", "header-logo-title": "Panolar sayfanıza geri dön.", - "show-activities": "Show Activities", + "hide-system-messages": "Sistem mesajlarını gizle", "headerBarCreateBoardPopup-title": "Pano Oluşturma", "home": "Ana Sayfa", "import": "İçeri aktar", @@ -580,14 +572,12 @@ "select-board": "Panoyu Seçin", "set-wip-limit-value": "Bu listedeki en fazla öğe sayısı için bir sınır belirleyin", "setWipLimitPopup-title": "Devam Eden İş Sınırı Belirle", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Kendini karta ata", "shortcut-autocomplete-emoji": "Emojileri otomatik tamamla", "shortcut-autocomplete-members": "Üye isimlerini otomatik tamamla", "shortcut-clear-filters": "Tüm filtreleri temizle", "shortcut-close-dialog": "Diyaloğu kapat", "shortcut-filter-my-cards": "Kartlarımı filtrele", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Kısayollar listesini getir", "shortcut-toggle-filterbar": "Filtre kenar çubuğunu aç/kapa", "shortcut-toggle-searchbar": "Arama Kenar Çubuğunu Aç/Kapat", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Zaman geçirilmiş kartlar", "time": "Zaman", "title": "Başlık", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Kart için etiketler 1-9 arasında geçiş yapın. Çoklu Seçim, 1-9 arası etiketleri ekler", "remove-labels-multiselect": "Çoklu Seçim, 1-9 arasındaki etiketleri kaldırır", "tracking": "Takip", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Bu kartı, sahip olan bağlantılı kartı silmeden önce silemezsiniz.", "delete-linked-cards-before-this-list": "Bu listedeki kartlara işaret eden bağlantılı kartları silmeden önce bu listeyi silemezsiniz.", "hide-checked-items": "İşaretli öğeleri gizle", - "hide-finished-checklist": "Hide finished checklist", "task": "Görev", "create-task": "Görev Oluştur", "ok": "Tamam", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Oluşturulma Tarihi(En Yenisi ilk)", "created-at-oldest-first": "Oluşturulma Tarihi(En Eskisi İlk)", "links-heading": "Linkler", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Tüm kullanıcıların sistem mesajlarını gizle", + "now-system-messages-of-all-users-are-hidden": "Tüm kullanıcıların sistem mesajları gizlendi", "move-swimlane": "Kulvarı Taşı", "moveSwimlanePopup-title": "Kulvarı Taşı", "custom-field-stringtemplate": "Dize Şablonu", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Daha fazla öğe eklemek için enter'a basın", "creator": "Oluşturan", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Dosya Raporu", "reports": "Raporlar", "rulesReportTitle": "Rapor Kuralları", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Kontrol Listesi Eylemleri", "moveChecklist": "Kontrol Listesini Taşı", "moveChecklistPopup-title": "Kontrol Listesini Taşı", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Yeni satır, yeni kontrol listesi öğesi olur", "copyChecklist": "Kontrol Listesini Kopyala", "copyChecklistPopup-title": "Kontrol Listesini Kopyala", "card-show-lists": "Kart Gösteri Listeleri", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Metin", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Katla", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ug.i18n.json b/imports/i18n/data/ug.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/ug.i18n.json +++ b/imports/i18n/data/ug.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/uk-UA.i18n.json b/imports/i18n/data/uk-UA.i18n.json index 8f94712ff..0a79aedf3 100644 --- a/imports/i18n/data/uk-UA.i18n.json +++ b/imports/i18n/data/uk-UA.i18n.json @@ -1,7 +1,7 @@ { "accept": "Прийняти", - "act-activity-notify": "Сповіщення про активність учасників", - "act-addAttachment": "додано вкладення __attachment__ до картки __card__ у списку __list__ на доріжці __swimlane__ дошки __board__", + "act-activity-notify": "Сповіщення про дії учасників", + "act-addAttachment": "прикріплено вкладення __attachment__ до картки__card__ у списку __list__ на доріжці __swimlane__ дошки__board__", "act-deleteAttachment": "видалено вкладення __attachment__ з картки __card__ у списку __list__ на доріжці __swimlane__ дошки __board__", "act-addSubtask": "додано підзадачу __subtask__ для картки __card__ у списку __list__ на доріжці __swimlane__ дошки __board__", "act-addLabel": "Додано мітку __label__ до картки __card__ у списку __list__ на доріжці __swimlane__ дошки __board__", @@ -19,27 +19,27 @@ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "Дошку __board__ створено", - "act-createSwimlane": "створено доріжку __swimlane__ на дошці __board__", - "act-createCard": "створено картку __card__ у списку __list__ на доріжці __swimlane__ на дошці __board__", - "act-createCustomField": "створено спеціальне поле __customField__ на дошці __board__", - "act-deleteCustomField": "видалено спеціальне поле __customField__ на дошці __board__", - "act-setCustomField": "відредаговано спеціальне поле __customField__: __customFieldValue__ у картці __card__ у списку __list__ на доріжці __swimlane__ на дошці __board__", - "act-createList": "додано список __list__ на дошці __board__", - "act-addBoardMember": "додано учасника __member__ до дошки __board__", + "act-createBoard": "Дошку __board__створено", + "act-createSwimlane": "created swimlane __swimlane__ to board __board__", + "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-createCustomField": "created custom field __customField__ at board __board__", + "act-deleteCustomField": "deleted custom field __customField__ at board __board__", + "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-createList": "added list __list__ to board __board__", + "act-addBoardMember": "added member __member__ to board __board__", "act-archivedBoard": "Дошку __board__ переміщено до Архіву", - "act-archivedCard": "Картку __card__ у списку __list__ на доріжці __swimlane__ на дошці __board__ переміщено до Архіву", - "act-archivedList": "Список __list__ на доріжці __swimlane__ на дошці __board__ переміщено до Архіву", - "act-archivedSwimlane": "Доріжку __swimlane__ на дошці __board__ переміщено до Архіву", + "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", + "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", + "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", "act-importBoard": "Імпортовано дошку __board__", - "act-importCard": "імпортовано картку __card__ у список __list__ на доріжку __swimlane__ до дошки __board__", - "act-importList": "імпортовано список __list__ у доріжку __swimlane__ на дошку __board__", - "act-joinMember": "додано учасника __member__ до картки __card__ у списку __list__ на доріжці __swimlane__ до дошки __board__", - "act-moveCard": "переміщено картку __card__ на дошці __board__ із списку __oldList__ на доріжку __oldSwimlane__ до списку __list__ на доріжку __swimlane__", - "act-moveCardToOtherBoard": "переміщено картку __card__ із списку __oldList__ на доріжку __oldSwimlane__ до дошки __oldBoard__ у список __list__ на доріжку __swimlane__ на дошці __board__", - "act-removeBoardMember": "видалено учасника __member__ з дошки __board__", - "act-restoredCard": "відновлено картку __card__ у список __list__ на доріжці __swimlane__ на дошці __board__", - "act-unjoinMember": "видалено учасника __member__ з картки __card__ у списку __list__ на доріжці __swimlane__ до дошки __board__", + "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", + "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", + "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-removeBoardMember": "removed member __member__ from board __board__", + "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-withBoardTitle": "__board__", "act-withCardTitle": "[__board__] __card__", "actions": "Дії", @@ -48,9 +48,8 @@ "activity-added": "%s додано до %s", "activity-archived": "%s перенесено до архіву", "activity-attached": "%s прикріплено до %s", - "activity-created": "%s створено", - "activity-changedListTitle": "перейменовано список у %s", - "activity-customfield-created": "Створено спеціальне поле %s", + "activity-created": "%sстворено", + "activity-customfield-created": "Створено спеціальне поле%s", "activity-excluded": "%s виключено з %s", "activity-imported": "%s імпортовано до %s з %s", "activity-imported-board": "%s імпортовано з %s", @@ -61,8 +60,8 @@ "activity-sent": "%s відправлено до %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "Додано підзадачу до %s", - "activity-checked-item": "позначено виконаним %s у контрольному списку %s у картці %s у списку %s на доріжці %s дошки %s", - "activity-unchecked-item": "позначено як невиконане %s у контрольному списку %s у картці %s у списку %s на доріжці %s дошки %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "Додано контрольний список до %s", "activity-checklist-removed": "removed a checklist from %s", "activity-checklist-completed": "completed checklist %s of %s", @@ -70,9 +69,9 @@ "activity-checklist-item-added": "added checklist item to '%s' in %s", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Додати", - "activity-checked-item-card": "позначено виконаним %s у контрольному списку %s", - "activity-unchecked-item-card": "позначено як невиконане %s у контрольному списку %s", - "activity-checklist-completed-card": "completed checklist %s at card %s at list %s at swimlane %s at board %s", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "activity-editComment": "відредаговано коментар %s", "activity-deleteComment": "видалено коментар %s", @@ -86,141 +85,139 @@ "add-card": "Додати картку", "add-card-to-top-of-list": "Додати картку на початок списку", "add-card-to-bottom-of-list": "Додати картку у кінець списку", - "setListWidthPopup-title": "Встановити ширини", - "set-list-width": "Встановити ширини", - "set-list-width-value": "Встановити мін. та макс. ширину списку (у пікселях)", - "list-width-error-message": "Ширина списку має бути цілими числами, більшими за 100", - "keyboard-shortcuts-enabled": "Комбінації клавіш увімкнено. Натисніть, щоб вимкнути.", - "keyboard-shortcuts-disabled": "Комбінації клавіш вимкнено. Натисніть, щоб увімкнути.", - "setSwimlaneHeightPopup-title": "Встановити довжину доріжки", - "set-swimlane-height": "Встановити довжину доріжки", - "set-swimlane-height-value": "Висота доріжки (у пікселях)", - "swimlane-height-error-message": "Висота доріжки мусить бути цілим числом більше 0", - "add-swimlane": "Додати доріжку", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", + "add-swimlane": "Add Swimlane", "add-subtask": "Додати підзадачу", - "add-checklist": "Додати контрольний список", + "add-checklist": "Додати контрольній список", "add-checklist-item": "Додати елемент в список", - "close-add-checklist-item": "Закрити форму додавання елемента до контрольного списку", - "close-edit-checklist-item": "Закрити форму редагування елемента контрольного списку", + "close-add-checklist-item": "Close add an item to checklist form", + "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "Перетворити у картку", - "add-cover": "Додати обкладинку", + "add-cover": "Add cover image to minicard", "add-label": "Додати мітку", "add-list": "Додати список", - "add-after-list": "Додати після списку", - "add-members": "Додати учасників", - "added": "Додано", - "addMemberPopup-title": "Учасники", - "memberPopup-title": "Налаштування учасників", - "admin": "Адміністратор", - "admin-desc": "Може переглядати і редагувати картки, видаляти учасників та змінювати налаштування для дошки.", + "add-after-list": "Add After List", + "add-members": "Додати користувача", + "added": "Доданно", + "addMemberPopup-title": "Користувачі", + "memberPopup-title": "Налаштування користувачів", + "admin": "Адмін", + "admin-desc": "Може переглядати і редагувати картки, відаляти учасників та змінювати налаштування для дошки.", "admin-announcement": "Оголошення", - "admin-announcement-active": "Активне системне оголошення", - "admin-announcement-title": "Оголошення адміністратора", + "admin-announcement-active": "Active System-Wide Announcement", + "admin-announcement-title": "Announcement from Administrator", "all-boards": "Всі дошки", - "and-n-other-card": "і ще __count__ картка", - "and-n-other-card_plural": "і ще __count__ картки", - "apply": "Застосувати", - "app-is-offline": "Додаток офлайн. Зачекайте, будь ласка.", - "app-try-reconnect": "Спробувати з'єднатися знову", - "archive": "Перенести до архіву", - "archive-all": "Перенести все до архіву", - "archive-board": "Перенести дошку до архіву", - "archive-card": "Перенести картку до архіву", - "archive-list": "Перенести список до архіву", - "archive-swimlane": "Перенести доріжку до архіву", - "archive-selection": "Перенести вибране до архіву", - "archiveBoardPopup-title": "Перенести дошку до архіву?", + "and-n-other-card": "та __count__ інших карток", + "and-n-other-card_plural": "та __count__ інших карток", + "apply": "Прийняти", + "app-is-offline": "Завантаження, будь ласка, зачекайте. Оновлення сторінки призведе до втрати даних. Якщо завантаження не працює, перевірте, чи не зупинився сервер.", + "app-try-reconnect": "Повторити зєднання.", + "archive": "Перенести до Архіву", + "archive-all": "Перенести Все до Архіву", + "archive-board": "Перенести Дошку до Архіву", + "archive-card": "Перенести Картку до Архіву", + "archive-list": "Перенести Список до Архіву", + "archive-swimlane": "Move Swimlane to Archive", + "archive-selection": "Move selection to Archive", + "archiveBoardPopup-title": "Перенести Дошку до Архіву?", "archived-items": "Архів", - "archived-boards": "Архівні дошки", + "archived-boards": "Дошки в архіві", "restore-board": "Відновити дошку", - "no-archived-boards": "Немає архівних дошок", + "no-archived-boards": "Немає дошок в архіві", "archives": "Архів", "template": "Шаблон", "templates": "Шаблони", - "template-container": "Шаблон контейнера", - "add-template-container": "Додати шаблон контейнера", + "template-container": "Template Container", + "add-template-container": "Add Template Container", "assign-member": "Призначити користувача", - "attached": "додано", + "attached": "доданно", "attachment": "Додаток", - "attachment-delete-pop": "Видалення додатку безповоротне. Відмінити не можна.", - "attachmentDeletePopup-title": "Видалити додаток?", + "attachment-delete-pop": "Видалення Додатку безповоротне. Тут нема відміні (undo).", + "attachmentDeletePopup-title": "Видалити Додаток?", "attachments": "Додатки", "auto-watch": "Автоматично дивитися дошки, коли вони створені", - "avatar-too-big": "Аватар надто великий (__size__max)", + "avatar-too-big": "The avatar is too large (__size__ max)", "back": "Назад", "board-change-color": "Змінити колір", - "board-change-background-image": "Змінити фонове зображення", - "board-background-image-url": "Посилання на фонове зображення", - "add-background-image": "Додати фонове зображення", - "remove-background-image": "Видалити фонове зображення", - "show-at-all-boards-page" : "Показувати на сторінці всіх дошок", - "board-info-on-my-boards" : "Налаштування всіх дошок", - "boardInfoOnMyBoardsPopup-title" : "Налаштування всіх дошок", - "boardInfoOnMyBoards-title": "Налаштування всіх дошок", - "show-card-counter-per-list": "Показувати кількість карток у списку", - "show-board_members-avatar": "Показати аватари учасників дошки", - "board-nb-stars": "%s зірок", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", + "show-at-all-boards-page" : "Show at All Boards page", + "board-info-on-my-boards" : "All Boards Settings", + "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", + "boardInfoOnMyBoards-title": "All Boards Settings", + "show-card-counter-per-list": "Show card count per list", + "show-board_members-avatar": "Show Board members avatars", + "board-nb-stars": "%s stars", "board-not-found": "Дошка не знайдена", - "board-private-info": "Ця дошка буде <strong>приватною</strong>.", - "board-public-info": "Ця дошка буде <strong>публічною</strong>.", - "board-drag-drop-reorder-or-click-open": "Перетягніть та відпустіть, щоб змінити порядок іконок дошок. Натисніть на іконку дошки, щоб відкрити дошку.", - "boardChangeColorPopup-title": "Змінити фон дошки", - "boardChangeBackgroundImagePopup-title": "Змінити фонове зображення", + "board-private-info": "This board will be <strong>private</strong>.", + "board-public-info": "This board will be <strong>public</strong>.", + "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", + "boardChangeColorPopup-title": "Змінити Фон Дошки", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "Змінити колір", - "allBoardsChangeBackgroundImagePopup-title": "Змінити фонове зображення", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "Перейменувати дошку", - "boardChangeVisibilityPopup-title": "Змінити налаштування видимості", - "boardChangeWatchPopup-title": "Змінити налаштування спостереження", - "boardMenuPopup-title": "Налаштування дошки", + "boardChangeVisibilityPopup-title": "Change Visibility", + "boardChangeWatchPopup-title": "Change Watch", + "boardMenuPopup-title": "Board Settings", "allBoardsMenuPopup-title": "Налаштування", - "boardChangeViewPopup-title": "Вид дошки", + "boardChangeViewPopup-title": "Вид Дошки", "boards": "Дошки", - "board-view": "Вид дошки", + "board-view": "Вид Дошки", "board-view-cal": "Календар", - "board-view-swimlanes": "Свімлейни", - "board-view-collapse": "Згорнути", - "board-view-gantt": "Гантт", - "board-view-lists": "Списки", - "bucket-example": "Наприклад, 'Список бажань'", - "cancel": "Скасувати", - "card-archived": "Цю картку переміщено до архіву.", - "board-archived": "Цю дошку переміщено до архіву.", - "card-comments-title": "Ця картка має %s коментар.", + "board-view-swimlanes": "Swimlanes", + "board-view-collapse": "Collapse", + "board-view-gantt": "Gantt", + "board-view-lists": "Lists", + "bucket-example": "Like “Bucket List” for example", + "cancel": "Відміна", + "card-archived": "This card is moved to Archive.", + "board-archived": "This board is moved to Archive.", + "card-comments-title": "This card has %s comment.", "card-delete-notice": "Цю дію неможливо буде скасувати. Всі зміни, які ви вносили в картку будуть втрачені.", "card-delete-pop": "Усі дії буде видалено з каналу активності, і ви не зможете повторно відкрити картку. Цю дію не можна скасувати.", "card-delete-suggest-archive": "Ви можете перемістити картку до архіву, щоб прибрати її з дошки, зберігаючи всю історію дій учасників.", - "card-archive-pop": "Картка не буде видимою у цьому списку після переміщення до архіву.", - "card-archive-suggest-cancel": "Пізніше ви зможете відновити картку з архіву.", - "card-due": "Термін", - "card-due-on": "Термін на", + "card-archive-pop": "Card will not be visible at this list after archiving card.", + "card-archive-suggest-cancel": "You can later restore card from Archive.", + "card-due": "Due", + "card-due-on": "Due on", "card-spent": "Витрачено часу", - "card-edit-attachments": "Змінити вкладення", - "card-edit-custom-fields": "Редагувати налаштування", + "card-edit-attachments": "Edit attachments", + "card-edit-custom-fields": "Edit custom fields", "card-edit-labels": "Редагувати мітки", "card-edit-members": "Редагувати учасників", - "card-labels-title": "Змінити мітки для картки.", - "card-members-title": "Додати або видалити учасників дошки з картки.", - "card-start": "Початок", - "card-start-on": "Початок з", - "cardAttachmentsPopup-title": "Приєднати з", - "cardCustomField-datePopup-title": "Змінити дату", - "cardCustomFieldsPopup-title": "Редагувати налаштування", - "cardStartVotingPopup-title": "Розпочати голосування", - "positiveVoteMembersPopup-title": "Прихильники", - "negativeVoteMembersPopup-title": "Противники", - "card-edit-voting": "Редагувати голосування", - "editVoteEndDatePopup-title": "Змінити кінцеву дату голосування", - "allowNonBoardMembers": "Дозволити усім авторизованим користувачам", - "vote-question": "Питання для голосування", - "vote-public": "Показати, хто як голосував", - "vote-for-it": "за це", - "vote-against": "проти", - "deleteVotePopup-title": "Видалити голосування?", - "vote-delete-pop": "Видалення є безповоротним. Ви втратите всі дії, пов'язані з цим голосуванням.", - "cardStartPlanningPokerPopup-title": "Розпочати планувальний покер", - "card-edit-planning-poker": "Редагувати планувальний покер", - "editPokerEndDatePopup-title": "Змінити кінцеву дату голосування в планувальному покері", - "poker-question": "Планувальний покер", + "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", + "cardCustomField-datePopup-title": "Change date", + "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "card-edit-voting": "Edit voting", + "editVoteEndDatePopup-title": "Change vote end date", + "allowNonBoardMembers": "Allow all logged in users", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", + "deleteVotePopup-title": "Delete vote?", + "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", + "cardStartPlanningPokerPopup-title": "Start a Planning Poker", + "card-edit-planning-poker": "Edit Planning Poker", + "editPokerEndDatePopup-title": "Change Planning Poker vote end date", + "poker-question": "Planning Poker", "poker-one": "1", "poker-two": "2", "poker-three": "3", @@ -231,1042 +228,1020 @@ "poker-forty": "40", "poker-oneHundred": "100", "poker-unsure": "?", - "poker-finish": "Завершити", - "poker-result-votes": "Голоси", - "poker-result-who": "Хто", - "poker-replay": "Повторити", - "set-estimation": "Встановити оцінку", - "deletePokerPopup-title": "Видалити планувальний покер?", - "poker-delete-pop": "Видалення є безповоротним. Ви втратите всі дії, пов'язані з цим планувальним покером.", + "poker-finish": "Finish", + "poker-result-votes": "Votes", + "poker-result-who": "Who", + "poker-replay": "Replay", + "set-estimation": "Set Estimation", + "deletePokerPopup-title": "Delete planning poker?", + "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", "cardDeletePopup-title": "Видалити картку?", - "cardArchivePopup-title": "Заархівувати картку?", - "cardDetailsActionsPopup-title": "Дії з карткою", - "cardLabelsPopup-title": "Мітки", - "cardMembersPopup-title": "Учасники", - "cardMorePopup-title": "Більше", - "cardTemplatePopup-title": "Створити шаблон", + "cardArchivePopup-title": "Archive Card?", + "cardDetailsActionsPopup-title": "Card Actions", + "cardLabelsPopup-title": "Labels", + "cardMembersPopup-title": "Користувачі", + "cardMorePopup-title": "More", + "cardTemplatePopup-title": "Create template", "cards": "Картки", "cards-count": "Картки", "cards-count-one": "Картка", - "casSignIn": "Увійти за допомогою CAS", + "casSignIn": "Sign In with CAS", "cardType-card": "Картка", - "cardType-linkedCard": "Пов'язана картка", - "cardType-linkedBoard": "Пов'язана дошка", + "cardType-linkedCard": "Linked Card", + "cardType-linkedBoard": "Linked Board", "change": "Змінити", "change-avatar": "Змінити аватар", "change-password": "Змінити пароль", - "change-permissions": "Змінити права доступу", + "change-permissions": "Change permissions", "change-settings": "Змінити налаштування", "changeAvatarPopup-title": "Змінити аватар", "changeLanguagePopup-title": "Змінити мову", "changePasswordPopup-title": "Змінити пароль", - "changePermissionsPopup-title": "Змінити права доступу", + "changePermissionsPopup-title": "Change Permissions", "changeSettingsPopup-title": "Змінити налаштування", "subtasks": "Підзадачі", - "checklists": "Контрольні списки", - "click-to-star": "Натисніть, щоб відзначити цю дошку зірочкою.", - "click-to-unstar": "Натисніть, щоб видалити зірочку з цієї дошки.", - "click-to-enable-auto-width": "Автоматична ширина списку вимкнена. Натисніть, щоб увімкнути.", - "click-to-disable-auto-width": "Увімкнено автоматичну ширину списку. Натисніть, щоб вимкнути.", - "auto-list-width": "Автоматична ширина списку", - "clipboard": "Буфер обміну або перетягнути і відпустити", + "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-board": "Закрити дошку", - "close-board-pop": "Ви зможете відновити дошку, натиснувши кнопку «Архів» в заголовку домашньої сторінки.", - "close-card": "Закрити картку", + "close-board": "Close Board", + "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.", + "close-card": "Close Card", "color-black": "чорний", "color-blue": "синій", - "color-crimson": "малиновий", - "color-darkgreen": "темно-зелений", - "color-gold": "золотий", - "color-gray": "сірий", + "color-crimson": "crimson", + "color-darkgreen": "darkgreen", + "color-gold": "gold", + "color-gray": "gray", "color-green": "зелений", - "color-indigo": "індиго", + "color-indigo": "indigo", "color-lime": "лайм", - "color-magenta": "пурпурний", - "color-mistyrose": "тьмяно-рожевий", - "color-navy": "темно-синій", + "color-magenta": "magenta", + "color-mistyrose": "mistyrose", + "color-navy": "navy", "color-orange": "помаранчевий", - "color-paleturquoise": "блідо-бірюзовий", - "color-peachpuff": "персиковий", + "color-paleturquoise": "paleturquoise", + "color-peachpuff": "peachpuff", "color-pink": "рожевий", - "color-plum": "сливовий", + "color-plum": "plum", "color-purple": "фіолетовий", "color-red": "червоний", - "color-saddlebrown": "шкіряно-коричневий", - "color-silver": "срібний", - "color-sky": "голубий", - "color-slateblue": "сіро-голубий", - "color-white": "білий", + "color-saddlebrown": "saddlebrown", + "color-silver": "silver", + "color-sky": "sky", + "color-slateblue": "slateblue", + "color-white": "white", "color-yellow": "жовтий", - "unset-color": "Скасувати колір", - "comments": "Коментарі", + "unset-color": "Unset", "comment": "Коментар", "comment-placeholder": "Написати коментар", - "comment-only": "Тільки коментарі", - "comment-only-desc": "Може коментувати тільки картки.", - "comment-delete": "Ви впевнені, що хочете видалити коментар?", - "deleteCommentPopup-title": "Видалити коментар?", + "comment-only": "Comment only", + "comment-only-desc": "Can comment on cards only.", + "comment-delete": "Are you sure you want to delete the comment?", + "deleteCommentPopup-title": "Delete comment?", "no-comments": "Немає коментарів", - "no-comments-desc": "Не може бачити коментарі та активність.", - "worker": "Робітник", - "worker-desc": "Може тільки переміщати картки, призначати себе до картки і коментувати.", - "computer": "Комп'ютер", - "confirm-subtask-delete-popup": "Ви впевнені, що хочете видалити підзадачу?", - "confirm-checklist-delete-popup": "Ви впевнені, що хочете видалити контрольний список?", - "subtaskDeletePopup-title": "Видалити підзадачу?", - "checklistDeletePopup-title": "Видалити контрольний список?", + "no-comments-desc": "Can not see comments and activities.", + "worker": "Worker", + "worker-desc": "Can only move cards, assign itself to card and comment.", + "computer": "Computer", + "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", + "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", + "subtaskDeletePopup-title": "Delete Subtask?", + "checklistDeletePopup-title": "Delete Checklist?", "copy-card-link-to-clipboard": "Скопіювати посилання на картку в буфер обміну", - "copy-text-to-clipboard": "Скопіювати текст у буфер обміну", - "linkCardPopup-title": "Зв'язати картку", - "searchElementPopup-title": "Пошук", - "copyCardPopup-title": "Скопіювати картку", - "copyManyCardsPopup-title": "Скопіювати шаблон на багато карток", - "copyManyCardsPopup-instructions": "Заголовки та описи карток призначення у цьому JSON форматі", - "copyManyCardsPopup-format": "[{\"title\": \"Перший заголовок картки\", \"description\":\"Перший опис картки\"}, {\"title\":\"Другий заголовок картки\",\"description\":\"Другий опис картки\"},{\"title\":\"Останній заголовок картки\",\"description\":\"Останній опис картки\"} ]", - "create": "Створити", - "createBoardPopup-title": "Створити дошку", - "chooseBoardSourcePopup-title": "Імпортувати дошку", - "createLabelPopup-title": "Створити мітку", - "createCustomField": "Створити поле", - "createCustomFieldPopup-title": "Створити поле", - "current": "поточний", - "custom-field-delete-pop": "Немає відкату. Це видалить це налаштоване поле з усіх карток і знищить його історію.", - "custom-field-checkbox": "Прапорець", - "custom-field-currency": "Валюта", - "custom-field-currency-option": "Код валюти", + "copy-text-to-clipboard": "Copy text to clipboard", + "linkCardPopup-title": "Link Card", + "searchElementPopup-title": "Шукати", + "copyCardPopup-title": "Copy Card", + "copyManyCardsPopup-title": "Copy Template to Many Cards", + "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", + "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", + "create": "Create", + "createBoardPopup-title": "Create Board", + "chooseBoardSourcePopup-title": "Import board", + "createLabelPopup-title": "Create Label", + "createCustomField": "Create Field", + "createCustomFieldPopup-title": "Create Field", + "current": "current", + "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", + "custom-field-checkbox": "Checkbox", + "custom-field-currency": "Currency", + "custom-field-currency-option": "Currency Code", "custom-field-date": "Дата", - "custom-field-dropdown": "Випадаючий список", - "custom-field-dropdown-none": "(жодного)", - "custom-field-dropdown-options": "Опції списку", - "custom-field-dropdown-options-placeholder": "Натисніть enter, щоб додати більше опцій", - "custom-field-dropdown-unknown": "(невідомо)", + "custom-field-dropdown": "Dropdown List", + "custom-field-dropdown-none": "(none)", + "custom-field-dropdown-options": "List Options", + "custom-field-dropdown-options-placeholder": "Press enter to add more options", + "custom-field-dropdown-unknown": "(unknown)", "custom-field-number": "Номер", "custom-field-text": "Текст", - "custom-fields": "Налаштовані поля", + "custom-fields": "Custom Fields", "date": "Дата", "decline": "Відхилити", "default-avatar": "Аватар за замовчуванням", "delete": "Видалити", - "deleteCustomFieldPopup-title": "Видалити налаштоване поле?", - "deleteLabelPopup-title": "Видалити мітку?", + "deleteCustomFieldPopup-title": "Delete Custom Field?", + "deleteLabelPopup-title": "Delete Label?", "description": "Опис", - "disambiguateMultiLabelPopup-title": "Розрізнити дію мітки", - "disambiguateMultiMemberPopup-title": "Розрізнити дію учасника", - "discard": "Відкинути", - "done": "Виконано", + "disambiguateMultiLabelPopup-title": "Disambiguate Label Action", + "disambiguateMultiMemberPopup-title": "Disambiguate Member Action", + "discard": "Відхилити", + "done": "Done", "download": "Завантажити", "edit": "Редагувати", "edit-avatar": "Змінити аватар", - "edit-profile": "Редагувати профіль", - "edit-wip-limit": "Редагувати ліміт WIP", - "soft-wip-limit": "М'який ліміт WIP", - "editCardStartDatePopup-title": "Змінити дату початку", - "editCardDueDatePopup-title": "Змінити кінцеву дату", - "editCustomFieldPopup-title": "Редагувати поле", - "addReactionPopup-title": "Додати реакцію", - "editCardSpentTimePopup-title": "Змінити витрачений час", - "editLabelPopup-title": "Змінити мітку", - "editNotificationPopup-title": "Редагувати сповіщення", - "editProfilePopup-title": "Редагувати профіль", + "edit-profile": "Редагувати Профіль", + "edit-wip-limit": "Edit WIP Limit", + "soft-wip-limit": "Soft WIP Limit", + "editCardStartDatePopup-title": "Change start date", + "editCardDueDatePopup-title": "Change due date", + "editCustomFieldPopup-title": "Edit Field", + "addReactionPopup-title": "Add reaction", + "editCardSpentTimePopup-title": "Change spent time", + "editLabelPopup-title": "Change Label", + "editNotificationPopup-title": "Edit Notification", + "editProfilePopup-title": "Редагувати Профіль", "email": "Email", - "email-enrollAccount-subject": "Акаунт створений для вас на __siteName__", - "email-enrollAccount-text": "Привіт __user__,\n\nЩоб почати користуватися сервісом, просто натисніть на посилання нижче.\n\n__url__\n\nДякуємо.", - "email-fail": "Невдача при відправленні email", - "email-fail-text": "Помилка при спробі відправити email", - "email-invalid": "Неправильний email", - "email-invite": "Запрошення через email", - "email-invite-subject": "__inviter__ відправив вам запрошення", - "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 відправлений", - "email-verifyEmail-subject": "Підтвердіть вашу email адресу на __siteName__", - "email-verifyEmail-text": "Привіт __user__,\n\nЩоб підтвердити ваш акаунт email, просто натисніть на посилання нижче.\n\n__url__\n\nДякуємо.", - "enable-vertical-scrollbars": "Увімкнути вертикальні скроллбари", - "enable-wip-limit": "Увімкнути ліміт WIP", - "error-board-doesNotExist": "Ця дошка не існує", - "error-board-notAdmin": "Вам потрібно бути адміністратором цієї дошки, щоб зробити це", - "error-board-notAMember": "Вам потрібно бути учасником цієї дошки, щоб зробити це", - "error-json-malformed": "Ваш текст не є дійсним JSON", - "error-json-schema": "Ваш JSON не включає інформації у коректному форматі", - "error-csv-schema": "Ваш CSV(Comma Separated Values)/TSV(Tab Separated Values) не включає інформації у коректному форматі", - "error-list-doesNotExist": "Цей список не існує", - "error-user-doesNotExist": "Цей користувач не існує", - "error-user-notAllowSelf": "Ви не можете запросити себе", - "error-user-notCreated": "Цей користувач не створений", - "error-username-taken": "Це ім'я користувача вже зайняте", - "error-orgname-taken": "Ця назва організації вже зайнята", - "error-teamname-taken": "Ця назва команди вже зайнята", - "error-email-taken": "Email вже зайнятий", - "export-board": "Експортувати дошку", - "export-board-json": "Експортувати дошку в JSON", - "export-board-csv": "Експортувати дошку в CSV", - "export-board-tsv": "Експортувати дошку в TSV", - "export-board-excel": "Експортувати дошку в Excel", - "user-can-not-export-excel": "Користувач не може експортувати Excel", - "export-board-html": "Експортувати дошку в HTML", - "export-card": "Експортувати картку", - "export-card-pdf": "Експортувати картку в PDF", - "user-can-not-export-card-to-pdf": "Користувач не може експортувати картку в PDF", - "exportBoardPopup-title": "Експортувати дошку", - "exportCardPopup-title": "Експортувати картку", - "sort": "Сортувати", - "sorted": "Відсортовано", - "remove-sort": "Прибрати сортування", - "sort-desc": "Натисніть для сортування списку", - "list-sort-by": "Сортувати список за:", - "list-label-modifiedAt": "Час останнього доступу", - "list-label-title": "Назва списку", - "list-label-sort": "Ваше ручне впорядкування", + "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-csv-schema": "Your CSV(Comma Separated Values)/TSV (Tab Separated Values) 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-orgname-taken": "This organization name is already taken", + "error-teamname-taken": "This team name is already taken", + "error-email-taken": "Email has already been taken", + "export-board": "Export board", + "export-board-json": "Export board to JSON", + "export-board-csv": "Export board to CSV", + "export-board-tsv": "Export board to TSV", + "export-board-excel": "Export board to Excel", + "user-can-not-export-excel": "User can not export Excel", + "export-board-html": "Export board to HTML", + "export-card": "Export card", + "export-card-pdf": "Export card to PDF", + "user-can-not-export-card-to-pdf": "User can not export card to PDF", + "exportBoardPopup-title": "Export board", + "exportCardPopup-title": "Export card", + "sort": "Sort", + "sorted": "Sorted", + "remove-sort": "Remove sort", + "sort-desc": "Click to Sort List", + "list-sort-by": "Sort the List By:", + "list-label-modifiedAt": "Last Access Time", + "list-label-title": "Name of the List", + "list-label-sort": "Your Manual Order", "list-label-short-modifiedAt": "(L)", "list-label-short-title": "(N)", "list-label-short-sort": "(M)", - "filter": "Фільтр", - "filter-cards": "Фільтрувати картки або списки", - "filter-dates-label": "Фільтр за датою", - "filter-no-due-date": "Без терміну", - "filter-overdue": "Прострочено", - "filter-due-today": "Термін сьогодні", - "filter-due-this-week": "Термін цього тижня", - "filter-due-next-week": "Зробити наступного тижня", - "filter-due-tomorrow": "Термін завтра", - "list-filter-label": "Фільтрувати список за назвою", - "filter-clear": "Очистити фільтр", - "filter-labels-label": "Фільтр за міткою", - "filter-no-label": "Без мітки", - "filter-member-label": "Фільтр за учасником", - "filter-no-member": "Без учасника", - "filter-assignee-label": "Фільтр за виконавцем", - "filter-no-assignee": "Без виконавця", - "filter-custom-fields-label": "Фільтр за налаштованими полями", - "filter-no-custom-fields": "Без налаштованих полів", - "filter-show-archive": "Показати архівовані списки", - "filter-hide-empty": "Сховати порожні списки", - "filter-on": "Фільтр увімкнено", - "filter-on-desc": "Ви фільтруєте картки на цій дошці. Натисніть тут, щоб редагувати фільтр.", - "filter-to-selection": "Фільтрувати до вибору", - "other-filters-label": "Інші фільтри", - "advanced-filter-label": "Розширений фільтр", - "advanced-filter-description": "Розширений фільтр дозволяє писати рядок, що включає наступні оператори: == != <= => && || () Пробіл використовується як розділювач між операторами. Ви можете фільтрувати для всіх інформацію для всіх користувацьких полів за допомогою написання їхніх імен та значень. Наприклад: Field1=='Value1'. Примітка: якщо поля або значення містять Вам потрібно інкапсулювати їх у одинарні лапки. Наприклад: 'Field 1' == 'Value 1'. Для пропуску окремих керуючих символів (' \\/) можна використовувати \\. Наприклад: Field1 == I\\'m. Також, Ви можете суміщати декілька умов. Наприклад: F1 == V1 || F1 == V2. Зазвичай, всі оператори інтерпретуються зліва направо. Ви можете змінити порядок поставивши дужки. Наприклад: F1 == V1 && (F2 == V2 || F2 == V3). Також ви можете шукати текстові поля використовуючи regex: F1 == /Tes.*/i", - "fullname": "Повне ім'я", - "header-logo-title": "Повернутися на вашу сторінку дошок.", - "show-activities": "Показати дії", - "headerBarCreateBoardPopup-title": "Створити дошку", - "home": "Головна", - "import": "Імпорт", - "impersonate-user": "Втілитися в користувача", - "link": "Посилання", - "import-board": "імпортувати дошку", - "import-board-c": "Імпортувати дошку", - "import-board-title-trello": "Імпортувати дошку з Trello", - "import-board-title-wekan": "Імпортувати дошку з попереднього експорту", - "import-board-title-csv": "Імпортувати дошку з CSV/TSV", - "from-trello": "З Trello", - "from-wekan": "З попереднього експорту", - "from-csv": "З CSV/TSV", - "import-board-instruction-trello": "На вашій дошці Trello перейдіть до 'Меню', потім 'Більше', 'Друк і експорт', 'Експорт JSON' та скопіюйте отриманий текст.", - "import-board-instruction-csv": "Вставте ваші значення, розділені комами (CSV)/ табуляцією (TSV).", - "import-board-instruction-wekan": "На вашій дошці перейдіть до 'Меню', потім 'Експорт дошки', і скопіюйте текст у завантаженому файлі.", - "import-board-instruction-about-errors": "Якщо ви отримаєте помилки під час імпорту дошки, іноді імпорт все ще працює, і дошка з'явиться на сторінці всіх дошок.", - "import-json-placeholder": "Вставте ваші дійсні дані JSON тут", - "import-csv-placeholder": "Вставте ваші дійсні дані CSV/TSV тут", - "import-map-members": "Зіставити учасників", - "import-members-map": "Ваша імпортована дошка має деяких учасників. Будь ласка, зіставте учасників, яких ви хочете імпортувати, з вашими користувачами", - "import-members-map-note": "Примітка: Незіставлені учасники будуть призначені поточному користувачу.", - "import-show-user-mapping": "Переглянути зіставлення учасників", - "import-user-select": "Виберіть вашого існуючого користувача, якого ви хочете використовувати як цього учасника", - "importMapMembersAddPopup-title": "Вибрати учасника", - "info": "Інформація", - "initials": "Ініціали", - "invalid-date": "Невірна дата", - "invalid-time": "Неправильний час", - "invalid-user": "Неправильний користувач", - "joined": "приєднався", + "filter": "Filter", + "filter-cards": "Filter Cards or Lists", + "filter-dates-label": "Filter by date", + "filter-no-due-date": "No due date", + "filter-overdue": "Overdue", + "filter-due-today": "Due today", + "filter-due-this-week": "Due this week", + "filter-due-next-week": "Due next week", + "filter-due-tomorrow": "Due tomorrow", + "list-filter-label": "Filter List by Title", + "filter-clear": "Clear filter", + "filter-labels-label": "Filter by label", + "filter-no-label": "No label", + "filter-member-label": "Filter by member", + "filter-no-member": "No member", + "filter-assignee-label": "Filter by assignee", + "filter-no-assignee": "No assignee", + "filter-custom-fields-label": "Filter by Custom Fields", + "filter-no-custom-fields": "No Custom Fields", + "filter-show-archive": "Show archived lists", + "filter-hide-empty": "Hide empty lists", + "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", + "other-filters-label": "Other Filters", + "advanced-filter-label": "Advanced Filter", + "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", + "fullname": "Full Name", + "header-logo-title": "Go back to your boards page.", + "hide-system-messages": "Hide system messages", + "headerBarCreateBoardPopup-title": "Create Board", + "home": "Home", + "import": "Import", + "impersonate-user": "Impersonate user", + "link": "Link", + "import-board": "import board", + "import-board-c": "Import board", + "import-board-title-trello": "Import board from Trello", + "import-board-title-wekan": "Import board from previous export", + "import-board-title-csv": "Import board from CSV/TSV", + "from-trello": "From Trello", + "from-wekan": "From previous export", + "from-csv": "From CSV/TSV", + "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", + "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", + "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", + "import-json-placeholder": "Paste your valid JSON data here", + "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", + "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", + "import-show-user-mapping": "Review members mapping", + "import-user-select": "Pick your existing user you want to use as this member", + "importMapMembersAddPopup-title": "Select member", + "info": "Версія", + "initials": "Initials", + "invalid-date": "Invalid date", + "invalid-time": "Invalid time", + "invalid-user": "Invalid user", + "joined": "приєднано", "just-invited": "Ви тільки що приєдналися до цієї дошки", - "keyboard-shortcuts": "Комбінації клавіш", - "label-create": "Створити мітку", - "label-default": "%s мітка (за замовчуванням)", - "label-delete-pop": "Немає відкату. Це видалить цю мітку з усіх карток і знищить її історію.", - "labels": "Мітки", + "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": "Мова", - "last-admin-desc": "Ви не можете змінити ролі, тому що повинен бути хоча б один адміністратор", - "leave-board": "Залишити дошку", - "leave-board-pop": "Ви впевнені, що хочете залишити __boardTitle__? Ви будете видалені з усіх карток на цій дошці.", - "leaveBoardPopup-title": "Залишити дошку?", + "last-admin-desc": "Ви не можете змінити ролі, бо повинен бути хоча б один адміністратор", + "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": "Залишити Дошку?", "link-card": "Посилання на цю картку", - "list-archive-cards": "Перенести всі картки в цьому списку до архіву", - "list-archive-cards-pop": "Це видалить усі картки в цьому списку з дошки. Щоб переглянути картки в архіві та повернути їх на дошку, натисніть «Меню» > «Архів».", - "list-move-cards": "Перемістити всі картки в цьому списку", - "list-select-cards": "Вибрати всі картки в цьому списку", - "set-color-list": "Встановити колір", - "listActionPopup-title": "Дії зі списком", - "settingsUserPopup-title": "Налаштування користувача", - "settingsTeamPopup-title": "Налаштування команди", - "settingsOrgPopup-title": "Налаштування організації", - "swimlaneActionPopup-title": "Дії зі свімлейном", - "swimlaneAddPopup-title": "Додати свімлейн нижче", - "listImportCardPopup-title": "Імпортувати картку з Trello", - "listImportCardsTsvPopup-title": "Імпортувати Excel CSV/TSV", - "listMorePopup-title": "Більше", - "link-list": "Посилання на цей список", - "list-delete-pop": "Усі дії будуть видалені з каналу активності, і ви не зможете відновити список. Немає відкату.", - "list-delete-suggest-archive": "Ви можете перемістити список до архіву, щоб прибрати його з дошки та зберегти активність.", - "lists": "Списки", - "swimlanes": "Свімлейни", - "log-out": "Вийти", - "log-in": "Увійти", - "loginPopup-title": "Увійти", + "list-archive-cards": "Перенести всі картки в цьому переліку до Архиву", + "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", + "list-move-cards": "Move all cards in this list", + "list-select-cards": "Select all cards in this list", + "set-color-list": "Встановити Колір", + "listActionPopup-title": "List Actions", + "settingsUserPopup-title": "User Settings", + "settingsTeamPopup-title": "Team Settings", + "settingsOrgPopup-title": "Organization Settings", + "swimlaneActionPopup-title": "Swimlane Actions", + "swimlaneAddPopup-title": "Add a Swimlane below", + "listImportCardPopup-title": "Import a Trello card", + "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", + "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 move a list to Archive to remove it from the board and preserve the activity.", + "lists": "Lists", + "swimlanes": "Swimlanes", + "log-out": "Log Out", + "log-in": "Log In", + "loginPopup-title": "Log In", "memberMenuPopup-title": "Налаштування користувачів", "members": "Користувачі", "menu": "Меню", - "move-selection": "Перенести вибране", - "moveCardPopup-title": "Перемістити картку", - "moveCardToBottom-title": "Перемістити на низ", - "moveCardToTop-title": "Перемістити на початок", - "moveSelectionPopup-title": "Перенести вибране", - "multi-selection": "Мультивибір", - "multi-selection-label": "Встановити мітку для вибору", - "multi-selection-member": "Встановити учасника для вибору", - "multi-selection-on": "Мультивибір увімкнено", - "muted": "Приглушено", - "muted-info": "Ви ніколи не отримаєте сповіщень про будь-які зміни на цій дошці", - "my-boards": "Мої дошки", - "name": "Ім'я", - "no-archived-cards": "Немає карток в архіві.", - "no-archived-lists": "Немає списків в архіві.", - "no-archived-swimlanes": "Немає свімлейнів в архіві.", - "no-results": "Немає результатів", - "normal": "Звичайний", - "normal-desc": "Може переглядати та редагувати картки. Не може змінювати налаштування.", - "not-accepted-yet": "Запрошення ще не прийнято", - "notify-participate": "Отримувати оновлення по будь-яких картках, де ви берете участь як творець або учасник", - "notify-watch": "Отримувати оновлення по будь-яких дошках, списках або картках, за якими ви спостерігаєте", - "optional": "необов'язково", - "or": "або", - "page-maybe-private": "Ця сторінка може бути приватною. Ви можете переглянути її, <a href='%s'>увійшовши в систему</a>.", - "page-not-found": "Сторінку не знайдено.", - "password": "Пароль", - "paste-or-dragdrop": "вставте або перетягніть файл зображення сюди (тільки зображення)", - "participating": "Бере участь", - "preview": "Попередній перегляд", - "previewAttachedImagePopup-title": "Попередній перегляд", - "previewClipboardImagePopup-title": "Попередній перегляд", - "private": "Приватна", - "private-desc": "Це приватна дошка. Тільки люди, додані до цієї дошки, можуть переглядати та редагувати її.", - "profile": "Профіль", - "public": "Публічна", - "public-desc": "Цю дошку можуть переглядати всі, у кого є посилання. Також ця дошка може бути проіндексована пошуковими системами. Зміни можуть вносити тільки учасники.", - "quick-access-description": "Додайте зірочку до дошки, щоб створити ярлик на цій панелі.", - "remove-cover": "Видалити фонове зображення з міні-картки", - "remove-from-board": "Видалити з дошки", - "remove-label": "Видалити мітку", - "listDeletePopup-title": "Видалити список?", - "remove-member": "Видалити учасника", - "remove-member-from-card": "Видалити з картки", - "remove-member-pop": "Видалити __name__ (__username__) з __boardTitle__? Учасника буде видалено з усіх карток на цій дошці. Він отримає повідомлення.", - "removeMemberPopup-title": "Видалити учасника?", + "move-selection": "Перенести обране", + "moveCardPopup-title": "Move Card", + "moveCardToBottom-title": "Перенести до Низу", + "moveCardToTop-title": "Перенести на Початок", + "moveSelectionPopup-title": "Перенести обране", + "multi-selection": "Multi-Selection", + "multi-selection-label": "Set label for selection", + "multi-selection-member": "Set member for 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 cards in Archive.", + "no-archived-lists": "No lists in Archive.", + "no-archived-swimlanes": "No swimlanes in Archive.", + "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 creator 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": "Це приватна дошка. Тільки люди, додані до цієї дошки можуть переглядати та редагувати її.", + "profile": "Profile", + "public": "Public", + "public-desc": "Цю дошку можуть переглядати усі, у кого є посилання. Також ця дошка може бути проіндексована пошуковими системами. Вносити зміни можуть тільки учасники.", + "quick-access-description": "Star a board to add a shortcut in this bar.", + "remove-cover": "Remove cover image from minicard", + "remove-from-board": "Remove from Board", + "remove-label": "Remove Label", + "listDeletePopup-title": "Видалити Список?", + "remove-member": "Видалити Учасника", + "remove-member-from-card": "Видалити з Картки", + "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.", + "removeMemberPopup-title": "Видалити Учасника?", "rename": "Перейменувати", "rename-board": "Перейменувати дошку", "restore": "Відновити", - "rescue-card-description": "Показувати діалог виправлення перед закриттям для незбережених описів карток", - "rescue-card-description-dialogue": "Перезаписати поточний опис картки вашими змінами?", + "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", + "rescue-card-description-dialogue": "Overwrite current card description with your changes?", "save": "Зберегти", "search": "Шукати", "rules": "Правила", - "search-cards": "Пошук по заголовках карток/списків, описах та налаштованих полях на цій дошці", - "search-example": "Введіть текст для пошуку та натисніть Enter", - "select-color": "Обрати колір", - "select-board": "Обрати дошку", - "set-wip-limit-value": "Встановіть ліміт максимальної кількості завдань у цьому списку", - "setWipLimitPopup-title": "Встановити WIP ліміт", - "shortcut-add-self": "Додати себе до поточної картки", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", + "search-example": "Write text you search and press Enter", + "select-color": "Оберіть Коліп", + "select-board": "Оберіть Дошку", + "set-wip-limit-value": "Встановіть обмеження максимальної кількості завдань в цьому списку", + "setWipLimitPopup-title": "Set WIP Limit", "shortcut-assign-self": "Призначити себе до поточної картки", - "shortcut-autocomplete-emoji": "Автозаповнення емодзі", + "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Автозавершення учасників", - "shortcut-clear-filters": "Очистити всі фільтри", - "shortcut-close-dialog": "Закрити діалог", + "shortcut-clear-filters": "Clear all filters", + "shortcut-close-dialog": "Close Dialog", "shortcut-filter-my-cards": "Фільтрувати мої картки", - "shortcut-filter-my-assigned-cards": "Фільтрувати мої призначені картки", - "shortcut-show-shortcuts": "Показати цей список ярликів", - "shortcut-toggle-filterbar": "Перемкнути бічну панель фільтра", - "shortcut-toggle-searchbar": "Перемкнути бічну панель пошуку", - "shortcut-toggle-sidebar": "Перемкнути бічну панель дошки", - "show-cards-minimum-count": "Показувати кількість карток, якщо список містить більше, ніж", - "sidebar-open": "Відкрити бічну панель", - "sidebar-close": "Закрити бічну панель", - "signupPopup-title": "Створити обліковий запис", - "star-board-title": "Натисніть, щоб додати дошку до обраних. Вона з'явиться у верхній частині списку ваших дошок.", - "starred-boards": "Обрані дошки", - "starred-boards-description": "Обрані дошки з'являються вгорі вашого списку дошок.", - "subscribe": "Підписатися", + "shortcut-show-shortcuts": "Bring up this shortcuts list", + "shortcut-toggle-filterbar": "Перемкнути бічну панель Фільтра", + "shortcut-toggle-searchbar": "Перемкнути бічну панель Пошуку", + "shortcut-toggle-sidebar": "Перемкнути бічну панель Дошки", + "show-cards-minimum-count": "Показувати кількість карток, якщо список містить більше, ніж", + "sidebar-open": "Відкрити бокову панель", + "sidebar-close": "Закрити бокову панель", + "signupPopup-title": "Створити Обліковий запис", + "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": "Команда", "this-board": "ця дошка", "this-card": "ця картка", - "spent-time-hours": "Витрачено часу (години)", - "overtime-hours": "Надурочний час (години)", - "overtime": "Надурочний час", - "has-overtime-cards": "Має картки з надурочним часом", - "has-spenttime-cards": "Має картки з витраченим часом", + "spent-time-hours": "Витрачено часу(годин)", + "overtime-hours": "Overtime (hours)", + "overtime": "Overtime", + "has-overtime-cards": "Has overtime cards", + "has-spenttime-cards": "Has spent time cards", "time": "Час", - "title": "Назва", - "toggle-assignees": "Перемикання призначень 1-9 для картки (за порядком додавання на дошку)", - "toggle-labels": "Перемкнути мітки 1-9 для картки. Мультивибір додає мітки 1-9", - "remove-labels-multiselect": "Мультивибір видаляє мітки 1-9", - "tracking": "Відстеження", - "tracking-info": "Ви будете повідомлені про будь-які зміни у тих картках, в яких ви є творцем або учасником.", + "title": "Title", + "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", + "remove-labels-multiselect": "Multi-Selection removes labels 1-9", + "tracking": "Tracking", + "tracking-info": "Ви будете повідомлені про будь-які зміни в тих картках, в яких ви є творцем або учасником.", "type": "Тип", - "unassign-member": "Відв'язати учасника", - "unsaved-description": "У вас є незбережений опис", - "unwatch": "Припинити спостереження", + "unassign-member": "Unassign member", + "unsaved-description": "Ви маєте незбрежений опис", + "unwatch": "Unwatch", "upload": "Завантажити", "upload-avatar": "Завантажити аватар", "uploaded-avatar": "Завантажений аватар", - "custom-top-left-corner-logo-image-url": "Спеціальне зображення логотипу в лівому верхньому кутку", - "custom-top-left-corner-logo-link-url": "Спеціальне посилання на логотип у лівому верхньому кутку", - "custom-top-left-corner-logo-height": "Спеціальна висота логотипу в лівому верхньому кутку. За замовчуванням: 27", - "custom-login-logo-image-url": "Спеціальне зображення логотипу на сторінці входу", - "custom-login-logo-link-url": "Спеціальне посилання на логотип на сторінці входу", - "custom-help-link-url": "Спеціальне посилання на довідку", - "text-below-custom-login-logo": "Текст під спеціальним логотипом на сторінці входу", - "automatic-linked-url-schemes": "Спеціальні URL-схеми, які автоматично мають бути клікабельними. Одна URL-схема на рядок", - "username": "Ім'я користувача", - "import-usernames": "Імпортувати імена користувачів", + "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", + "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", + "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", + "custom-login-logo-image-url": "Custom Login Logo Image URL", + "custom-login-logo-link-url": "Custom Login Logo Link URL", + "custom-help-link-url": "Custom Help Link URL", + "text-below-custom-login-logo": "Text below Custom Login Logo", + "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", + "username": "Username", + "import-usernames": "Import Usernames", "view-it": "Переглянути це", - "warn-list-archived": "попередження: ця картка знаходиться у списку в Архіві", - "watch": "Спостерігати", - "watching": "Спостереження", - "watching-info": "Ви будете повідомлені про будь-які зміни на цій дошці", - "welcome-board": "Ласкаво просимо на дошку", - "welcome-swimlane": "Етап 1", - "welcome-list1": "Основи", - "welcome-list2": "Продвинуті", - "card-templates-swimlane": "Шаблони карток", - "list-templates-swimlane": "Шаблони списків", - "board-templates-swimlane": "Шаблони дошок", + "warn-list-archived": "warning: this card is in an list at Archive", + "watch": "Watch", + "watching": "Watching", + "watching-info": "You will be notified of any change in this board", + "welcome-board": "Welcome Board", + "welcome-swimlane": "Milestone 1", + "welcome-list1": "Basics", + "welcome-list2": "Advanced", + "card-templates-swimlane": "Card Templates", + "list-templates-swimlane": "List Templates", + "board-templates-swimlane": "Шаблони Дошок", "what-to-do": "Що ви хочете зробити?", - "wipLimitErrorPopup-title": "Некоректне обмеження WIP", + "wipLimitErrorPopup-title": "Некоректне Обмеження WIP", "wipLimitErrorPopup-dialog-pt1": "Кількість завдань у цьому списку перевищує встановлений вами ліміт", "wipLimitErrorPopup-dialog-pt2": "Будь ласка, перенесіть деякі завдання з цього списку або збільште ліміт на кількість завдань", - "admin-panel": "Панель адміністратора", + "admin-panel": "Панель Адміністратора", "settings": "Налаштування", "people": "Люди", "registration": "Реєстрація", - "disable-self-registration": "Відключити самостійну реєстрацію", - "disable-forgot-password": "Відключити відновлення пароля", - "invite": "Запрошення", - "invite-people": "Запрошення людей", - "to-boards": "На дошки", - "email-addresses": "Email адреси", - "smtp-host-description": "Адреса сервера SMTP, який обробляє ваші email.", - "smtp-port-description": "Порт, який ваш SMTP сервер використовує для вихідних email.", - "smtp-tls-description": "Увімкнути підтримку TLS для SMTP сервера", - "smtp-host": "SMTP хост", - "smtp-port": "SMTP порт", - "smtp-username": "Ім'я користувача", - "smtp-password": "Пароль", - "smtp-tls": "Підтримка TLS", - "send-from": "Відправити від", - "send-smtp-test": "Надіслати тестовий email собі", - "invitation-code": "Код запрошення", - "email-invite-register-subject": "__inviter__ відправив вам запрошення", - "email-invite-register-text": "Дорогий __user__,\n\n__inviter__ запрошує вас до співпраці на дошці kanban.\n\nБудь ласка, перейдіть за посиланням нижче:\n__url__\n\nІ ваш код запрошення: __icode__\n\nДякуємо.", + "disable-self-registration": "Disable Self-Registration", + "disable-forgot-password": "Disable Forgot Password", + "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", "email-smtp-test-subject": "Лист перевірки SMTP", "email-smtp-test-text": "Ви успішно надіслали e-mail", "error-invitation-code-not-exist": "Код запрошення не існує", "error-notAuthorized": "Ви не авторизовані для перегляду цієї сторінки.", - "webhook-title": "Назва Webhook", - "webhook-token": "Токен (Необов'язково для автентифікації)", - "outgoing-webhooks": "Вихідні Webhooks", - "bidirectional-webhooks": "Двосторонні Webhooks", - "outgoingWebhooksPopup-title": "Вихідні Webhooks", - "boardCardTitlePopup-title": "Фільтр назви картки", - "disable-webhook": "Відключити цей Webhook", - "global-webhook": "Глобальні Webhooks", - "new-outgoing-webhook": "Новий вихідний Webhook", - "no-name": "(Невідомо)", - "Node_version": "Версія Node", - "Meteor_version": "Версія Meteor", - "MongoDB_version": "Версія MongoDB", - "MongoDB_storage_engine": "Двигун зберігання MongoDB", - "MongoDB_Oplog_enabled": "MongoDB Oplog увімкнено", - "OS_Arch": "Архітектура ОС", - "OS_Cpus": "Кількість процесорів ОС", - "OS_Freemem": "Вільна пам'ять ОС", - "OS_Loadavg": "Середнє навантаження ОС", - "OS_Platform": "Платформа ОС", - "OS_Release": "Випуск ОС", - "OS_Totalmem": "Загальна пам'ять ОС", - "OS_Type": "Тип ОС", - "OS_Uptime": "Час роботи ОС", - "days": "дні", - "hours": "години", - "minutes": "хвилини", - "seconds": "секунди", - "show-field-on-card": "Показати це поле на картці", - "automatically-field-on-card": "Додати поле до нових карток", - "always-field-on-card": "Додати поле до усіх карток", - "showLabel-field-on-card": "Показати назву поля на міні-картці", - "showSum-field-on-list": "Показати суму полів у верхній частині списку", - "yes": "Так", - "no": "Ні", - "accounts": "Облікові записи", - "accounts-allowEmailChange": "Дозволити зміну Email", - "accounts-allowUserNameChange": "Дозволити зміну імені користувача", - "tableVisibilityMode-allowPrivateOnly": "Видимість дошок: дозволити тільки приватні дошки", - "tableVisibilityMode" : "Видимість дошок", + "webhook-title": "Webhook Name", + "webhook-token": "Token (Optional for Authentication)", + "outgoing-webhooks": "Outgoing Webhooks", + "bidirectional-webhooks": "Two-Way Webhooks", + "outgoingWebhooksPopup-title": "Outgoing Webhooks", + "boardCardTitlePopup-title": "Card Title Filter", + "disable-webhook": "Disable This Webhook", + "global-webhook": "Global Webhooks", + "new-outgoing-webhook": "New Outgoing Webhook", + "no-name": "(Unknown)", + "Node_version": "Node version", + "Meteor_version": "Meteor version", + "MongoDB_version": "MongoDB version", + "MongoDB_storage_engine": "MongoDB storage engine", + "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", + "OS_Arch": "OS Arch", + "OS_Cpus": "OS CPU Count", + "OS_Freemem": "OS Free Memory", + "OS_Loadavg": "OS Load Average", + "OS_Platform": "OS Platform", + "OS_Release": "OS Release", + "OS_Totalmem": "OS Total Memory", + "OS_Type": "OS Type", + "OS_Uptime": "OS Uptime", + "days": "days", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "show-field-on-card": "Show this field on card", + "automatically-field-on-card": "Add field to new cards", + "always-field-on-card": "Add field to all cards", + "showLabel-field-on-card": "Show field label on minicard", + "showSum-field-on-list": "Show sum of fields at top of list", + "yes": "Yes", + "no": "No", + "accounts": "Accounts", + "accounts-allowEmailChange": "Дозволити Зміну Email", + "accounts-allowUserNameChange": "Дозволити Зміну Імені Користувача", + "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", + "tableVisibilityMode" : "Boards visibility", "createdAt": "Створено", - "modifiedAt": "Змінено", + "modifiedAt": "Modified at", "verified": "Перевірено", "active": "Активно", "card-received": "Отримано", - "card-received-on": "Отримано на", + "card-received-on": "Received on", "card-end": "Кінець", "card-end-on": "Закінчується на", "editCardReceivedDatePopup-title": "Змінити дату отримання", - "editCardEndDatePopup-title": "Змінити дату закінчення", - "setCardColorPopup-title": "Встановити колір", - "setCardActionsColorPopup-title": "Вибрати колір", - "setSwimlaneColorPopup-title": "Вибрати колір", - "setListColorPopup-title": "Вибрати колір", - "assigned-by": "Призначено", + "editCardEndDatePopup-title": "Change end date", + "setCardColorPopup-title": "Set color", + "setCardActionsColorPopup-title": "Оберіть колір", + "setSwimlaneColorPopup-title": "Оберіть колір", + "setListColorPopup-title": "Оберіть колір", + "assigned-by": "Assigned By", "requested-by": "Запитано", - "card-sorting-by-number": "Сортування карток за номером", - "board-delete-notice": "Це видалення назавжди. Ви втратите всі списки, картки та дії, пов'язані з цією дошкою.", - "delete-board-confirm-popup": "Усі списки, картки, мітки та діяльність будуть видалені, і ви не зможете відновити вміст дошки. Немає відкату.", - "boardDeletePopup-title": "Видалити дошку?", - "delete-board": "Видалити дошку", - "default-subtasks-board": "Підзадачі для дошки __board__", - "default": "За замовчуванням", - "defaultdefault": "За замовчуванням", - "queue": "Черга", - "subtask-settings": "Налаштування підзадач", - "card-settings": "Налаштування картки", - "minicard-settings": "Налаштування міні-картки", - "boardSubtaskSettingsPopup-title": "Налаштування підзадач дошки", - "boardCardSettingsPopup-title": "Налаштування картки", - "boardMinicardSettingsPopup-title": "Налаштування міні-картки", - "deposit-subtasks-board": "Перенести підзадачі на цю дошку:", - "deposit-subtasks-list": "Список приземлення для підзадач, що переносяться сюди:", - "show-parent-in-minicard": "Показати батька на міні-картці:", - "description-on-minicard": "Опис на міні-картці", - "cover-attachment-on-minicard": "Зображення обкладинки на міні-картці", - "badge-attachment-on-minicard": "Кількість вкладень на міні-картці", - "card-sorting-by-number-on-minicard": "Сортування за номерами на міні-картці", - "prefix-with-full-path": "Префікс з повним шляхом", - "prefix-with-parent": "Префікс з батьком", - "subtext-with-full-path": "Підтекст з повним шляхом", - "subtext-with-parent": "Підтекст з батьком", - "change-card-parent": "Змінити батька картки", - "parent-card": "Батьківська картка", - "source-board": "Джерельна дошка", - "no-parent": "Не показувати батька", - "activity-added-label": "додано мітку '%s' до %s", - "activity-removed-label": "видалено мітку '%s' з %s", - "activity-delete-attach": "видалено вкладення з %s", - "activity-added-label-card": "додано мітку '%s'", - "activity-removed-label-card": "видалено мітку '%s'", - "activity-delete-attach-card": "видалено вкладення", - "activity-set-customfield": "встановлено налаштоване поле '%s' до '%s' в %s", - "activity-unset-customfield": "видалено налаштоване поле '%s' з %s", + "card-sorting-by-number": "Card sorting by number", + "board-delete-notice": "Це видалення назавжди. Ви втратите всі листи, картки та дії, пов'язані з цією дошкою.", + "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", + "boardDeletePopup-title": "Delete Board?", + "delete-board": "Delete Board", + "default-subtasks-board": "Subtasks for __board__ board", + "default": "Default", + "defaultdefault": "Default", + "queue": "Queue", + "subtask-settings": "Subtasks Settings", + "card-settings": "Card Settings", + "minicard-settings": "Minicard Settings", + "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", + "boardCardSettingsPopup-title": "Card Settings", + "boardMinicardSettingsPopup-title": "Minicard Settings", + "deposit-subtasks-board": "Deposit subtasks to this board:", + "deposit-subtasks-list": "Landing list for subtasks deposited here:", + "show-parent-in-minicard": "Show parent in minicard:", + "description-on-minicard": "Description on minicard", + "cover-attachment-on-minicard": "Cover image on minicard", + "badge-attachment-on-minicard": "Count of attachments on minicard", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", + "prefix-with-full-path": "Prefix with full path", + "prefix-with-parent": "Prefix with parent", + "subtext-with-full-path": "Subtext with full path", + "subtext-with-parent": "Subtext with parent", + "change-card-parent": "Change card's parent", + "parent-card": "Parent card", + "source-board": "Source board", + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "activity-set-customfield": "set custom field '%s' to '%s' in %s", + "activity-unset-customfield": "unset custom field '%s' in %s", "r-rule": "Правило", - "r-add-trigger": "Додати тригер", - "r-add-action": "Додати дію", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", "r-board-rules": "Дошка правил", - "r-add-rule": "Додати правило", + "r-add-rule": "Add rule", "r-view-rule": "Переглянути правило", "r-delete-rule": "Видалити правило", - "r-new-rule-name": "Назва нового правила", - "r-no-rules": "Правила відсутні", - "r-trigger": "Тригер", - "r-action": "Дія", - "r-when-a-card": "Коли картка", - "r-is": "є", - "r-is-moved": "переміщена", - "r-added-to": "Додано до", - "r-removed-from": "Видалено з", - "r-the-board": "дошки", - "r-list": "список", - "set-filter": "Встановити фільтр", + "r-new-rule-name": "Заголовок нового правила", + "r-no-rules": "No rules", + "r-trigger": "Trigger", + "r-action": "Action", + "r-when-a-card": "When a card", + "r-is": "is", + "r-is-moved": "is moved", + "r-added-to": "Added to", + "r-removed-from": "Видалити з", + "r-the-board": "Дошка", + "r-list": "list", + "set-filter": "Set Filter", "r-moved-to": "переміщено до", "r-moved-from": "переміщено з", - "r-archived": "переміщено до архіву", - "r-unarchived": "відновлено з архіву", - "r-a-card": "картка", - "r-when-a-label-is": "Коли мітка", - "r-when-the-label": "Коли мітка", - "r-list-name": "назва списку", - "r-when-a-member": "Коли учасник", - "r-when-the-member": "Коли учасник", - "r-name": "назва", - "r-when-a-attach": "Коли вкладення", - "r-when-a-checklist": "Коли контрольний список", - "r-when-the-checklist": "Коли контрольний список", - "r-completed": "завершено", - "r-made-incomplete": "зроблено незавершеним", - "r-when-a-item": "Коли елемент контрольного списку", - "r-when-the-item": "Коли елемент", - "r-checked": "перевірено", - "r-unchecked": "неперевірено", - "r-move-card-to": "Перемістити картку до", - "r-top-of": "Верх", - "r-bottom-of": "Низ", - "r-its-list": "її список", - "r-archive": "Перемістити до архіву", - "r-unarchive": "Відновити з архіву", + "r-archived": "переміщено до Архіву", + "r-unarchived": "Відновлено з Архіву", + "r-a-card": "a card", + "r-when-a-label-is": "When a label is", + "r-when-the-label": "When the label", + "r-list-name": "list name", + "r-when-a-member": "When a member is", + "r-when-the-member": "When the member", + "r-name": "name", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Перенести до Архіву", + "r-unarchive": "Restore from Archive", "r-card": "Картка", "r-add": "Додати", "r-remove": "Видалити", - "r-label": "мітку", - "r-member": "учасника", - "r-remove-all": "Видалити всіх учасників картки", - "r-set-color": "Встановити колір", - "r-checklist": "контрольний список", - "r-check-all": "Перевірити всі", - "r-uncheck-all": "Скасувати всі відмітки", - "r-items-check": "елементи контрольного списку", + "r-label": "label", + "r-member": "Користувач", + "r-remove-all": "Видалити усіх учасників картки", + "r-set-color": "Set color to", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-items-check": "items of checklist", "r-check": "Обрати", - "r-uncheck": "Скасувати обрання", - "r-item": "елемент", - "r-of-checklist": "контрольного списку", - "r-send-email": "Відправити email", - "r-to": "до", - "r-of": "з", - "r-subject": "Тема", - "r-rule-details": "Деталі правила", - "r-d-move-to-top-gen": "Перемістити картку на верх її списку", - "r-d-move-to-top-spec": "Перемістити картку на верх списку", - "r-d-move-to-bottom-gen": "Перемістити картку на низ її списку", - "r-d-move-to-bottom-spec": "Перемістити картку на низ списку", + "r-uncheck": "Відхилити Обрання", + "r-item": "одиниця", + "r-of-checklist": "of checklist", + "r-send-email": "Send an email", + "r-to": "to", + "r-of": "of", + "r-subject": "Об'єкт", + "r-rule-details": "Rule details", + "r-d-move-to-top-gen": "Move card to top of its list", + "r-d-move-to-top-spec": "Move card to top of list", + "r-d-move-to-bottom-gen": "Move card to bottom of its list", + "r-d-move-to-bottom-spec": "Move card to bottom of list", "r-d-send-email": "Відправити email", - "r-d-send-email-to": "до", - "r-d-send-email-subject": "Тема", + "r-d-send-email-to": "to", + "r-d-send-email-subject": "Об'єкт", "r-d-send-email-message": "повідомлення", - "r-d-archive": "Перемістити картку до архіву", - "r-d-unarchive": "Відновити картку з архіву", - "r-d-add-label": "Додати мітку", + "r-d-archive": "Перенести Картку до Архиву", + "r-d-unarchive": "Відновити Картку з Архіву", + "r-d-add-label": "Додатку мітку", "r-d-remove-label": "Видалити мітку", "r-create-card": "Створити нову картку", - "r-in-list": "у списку", - "r-in-swimlane": "у свімлейні", - "r-d-add-member": "Додати учасника", - "r-d-remove-member": "Видалити учасника", + "r-in-list": "в переліку", + "r-in-swimlane": "in swimlane", + "r-d-add-member": "Додати користувача", + "r-d-remove-member": "Видалити користувача", "r-d-remove-all-member": "Видалити всіх учасників", - "r-d-check-all": "Відмітити всі елементи списку", - "r-d-uncheck-all": "Скасувати відмітки всіх елементів списку", - "r-d-check-one": "Відмітити елемент", - "r-d-uncheck-one": "Скасувати відмітку елемента", - "r-d-check-of-list": "контрольного списку", - "r-d-add-checklist": "Додати контрольний список", - "r-d-remove-checklist": "Видалити контрольний список", - "r-by": "від", - "r-add-checklist": "Додати контрольний список", - "r-with-items": "з елементами", - "r-items-list": "елемент1,елемент2,елемент3", - "r-add-swimlane": "Додати свімлейн", - "r-swimlane-name": "назва свімлейна", - "r-board-note": "Примітка: залиште поле порожнім, щоб відповідати будь-якому можливому значенню", - "r-checklist-note": "Примітка: елементи контрольного списку повинні бути записані через кому.", - "r-when-a-card-is-moved": "Коли картка переміщена в інший список", - "r-set": "Встановити", + "r-d-check-all": "Check all items of a list", + "r-d-uncheck-all": "Uncheck all items of a list", + "r-d-check-one": "Check item", + "r-d-uncheck-one": "Uncheck item", + "r-d-check-of-list": "of checklist", + "r-d-add-checklist": "Add checklist", + "r-d-remove-checklist": "Remove checklist", + "r-by": "by", + "r-add-checklist": "Add checklist", + "r-with-items": "with items", + "r-items-list": "item1,item2,item3", + "r-add-swimlane": "Add swimlane", + "r-swimlane-name": "swimlane name", + "r-board-note": "Note: leave a field empty to match every possible value. ", + "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", + "r-when-a-card-is-moved": "When a card is moved to another list", + "r-set": "Set", "r-update": "Оновити", - "r-datefield": "поле дати", + "r-datefield": "поле для дати", "r-df-start-at": "початок", - "r-df-due-at": "термін", + "r-df-due-at": "до", "r-df-end-at": "кінець", "r-df-received-at": "отримано", - "r-to-current-datetime": "до поточної дати/часу", - "r-remove-value-from": "Видалити значення з", - "r-link-card": "Зв'язати картку з", + "r-to-current-datetime": "to current date/time", + "r-remove-value-from": "Remove value from", + "r-link-card": "Link card to", "ldap": "LDAP", "oauth2": "OAuth2", "cas": "CAS", - "authentication-method": "метод автентифікації", - "authentication-type": "тип автентифікації", - "custom-product-name": "Назва спеціального продукту", - "layout": "Макет", - "hide-logo": "Сховати логотип", - "hide-card-counter-list": "Сховати лічильник карток на Всіх дошках", - "hide-board-member-list": "Сховати список учасників дошки на Всіх дошках", - "add-custom-html-after-body-start": "Додати спеціальний HTML після початку <body>", - "add-custom-html-before-body-end": "Додати спеціальний HTML перед кінцем </body>", - "error-undefined": "Щось пішло не так", - "error-ldap-login": "Помилка під час спроби входу", - "display-authentication-method": "Показати метод автентифікації", - "oidc-button-text": "Налаштувати текст кнопки OIDC", - "default-authentication-method": "Стандартний метод автентифікації", - "duplicate-board": "Дублювати дошку", - "org-number": "Кількість організацій:", - "team-number": "Кількість команд:", - "people-number": "Кількість людей:", - "swimlaneDeletePopup-title": "Видалити свімлейн?", - "swimlane-delete-pop": "Всі дії будуть видалені з журналу активності, і ви не зможете відновити свімлейн. Немає можливості відмінити.", + "authentication-method": "метод Автентифікації", + "authentication-type": "тип Автентифікації", + "custom-product-name": "Custom Product Name", + "layout": "Layout", + "hide-logo": "Hide Logo", + "hide-card-counter-list": "Hide card counter list on All Boards", + "hide-board-member-list": "Hide board member list on All Boards", + "add-custom-html-after-body-start": "Add Custom HTML after <body> start", + "add-custom-html-before-body-end": "Add Custom HTML before </body> end", + "error-undefined": "Something went wrong", + "error-ldap-login": "An error occurred while trying to login", + "display-authentication-method": "Display Authentication Method", + "oidc-button-text": "Customize the OIDC button text", + "default-authentication-method": "Default Authentication Method", + "duplicate-board": "Duplicate Board", + "org-number": "The number of organizations is: ", + "team-number": "The number of teams is: ", + "people-number": "The number of people is: ", + "swimlaneDeletePopup-title": "Delete Swimlane ?", + "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", "restore-all": "Відновити все", "delete-all": "Видалити все", - "loading": "Завантаження, будь ласка, зачекайте.", - "previous_as": "останній раз було", - "act-a-dueAt": "змінено час завершення на \nКоли: __timeValue__\nДе: __card__\n попередній термін був __timeOldValue__", - "act-a-endAt": "змінено час закінчення на __timeValue__ з (__timeOldValue__)", - "act-a-startAt": "змінено час початку на __timeValue__ з (__timeOldValue__)", - "act-a-receivedAt": "змінено час отримання на __timeValue__ з (__timeOldValue__)", - "a-dueAt": "змінено час завершення на", - "a-endAt": "змінено час закінчення на", - "a-startAt": "змінено час початку на", - "a-receivedAt": "змінено час отримання на", - "almostdue": "поточний час завершення %s наближається", - "pastdue": "поточний час завершення %s пройшов", - "duenow": "поточний час завершення %s сьогодні", - "act-newDue": "__list__/__card__ має перше нагадування про термін [__board__]", - "act-withDue": "__list__/__card__ нагадування про терміни [__board__]", - "act-almostdue": "нагадувало, що поточний термін (__timeValue__) __card__ наближається", - "act-pastdue": "нагадувало, що поточний термін (__timeValue__) __card__ пройшов", - "act-duenow": "нагадувало, що поточний термін (__timeValue__) __card__ зараз", - "act-atUserComment": "Вас згадали в [__board__] __list__/__card__", - "delete-user-confirm-popup": "Ви дійсно бажаєте видалити цей обліковий запис? Цю дію не можна скасувати.", - "delete-team-confirm-popup": "Ви впевнені, що хочете видалити цю команду? Немає можливості відмінити.", - "delete-org-confirm-popup": "Ви впевнені, що хочете видалити цю організацію? Немає можливості відмінити.", - "accounts-allowUserDelete": "Дозволити користувачам видаляти свої облікові записи", - "hide-minicard-label-text": "Сховати текст мітки міні-картки", - "show-desktop-drag-handles": "Показати ручки перетягування на робочому столі", - "assignee": "Виконавець", - "cardAssigneesPopup-title": "Виконавець", - "addmore-detail": "Додати більш детальний опис", - "show-on-card": "Показати на картці", - "show-on-minicard": "Показати на міні-картці", - "new": "Новий", - "editOrgPopup-title": "Редагувати організацію", - "newOrgPopup-title": "Нова організація", - "editTeamPopup-title": "Редагувати команду", - "newTeamPopup-title": "Нова команда", - "editUserPopup-title": "Редагувати користувача", - "newUserPopup-title": "Новий користувач", - "notifications": "Сповіщення", - "help": "Допомога", - "view-all": "Показати все", - "filter-by-unread": "Фільтрувати непрочитані", - "mark-all-as-read": "Позначити всі як прочитані", - "remove-all-read": "Видалити всі прочитані", - "allow-rename": "Дозволити перейменування", - "allowRenamePopup-title": "Дозволити перейменування", - "start-day-of-week": "Встановити день початку тижня", - "monday": "Понеділок", - "tuesday": "Вівторок", - "wednesday": "Середа", - "thursday": "Четвер", - "friday": "П'ятниця", - "saturday": "Субота", - "sunday": "Неділя", + "loading": "Завантаження, зачекайте будь-ласка.", + "previous_as": "last time was", + "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", + "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", + "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", + "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", + "a-dueAt": "modified due time to be", + "a-endAt": "modified ending time to be", + "a-startAt": "modified starting time to be", + "a-receivedAt": "modified received time to be", + "almostdue": "current due time %s is approaching", + "pastdue": "current due time %s is past", + "duenow": "current due time %s is today", + "act-newDue": "__list__/__card__ має 1-ше нагадування визначеного терміну [__board__]", + "act-withDue": "__list__/__card__ due reminders [__board__]", + "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", + "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", + "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", + "act-atUserComment": "Ви були згадані у [__board__] __list__/__card__", + "delete-user-confirm-popup": "Ви дійсно бажаєте видалити даний обліковий запис? Цю дію не можна відмінити.", + "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", + "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", + "accounts-allowUserDelete": "Дозволити користувачам видаляти їх власні облікові записи", + "hide-minicard-label-text": "Hide minicard label text", + "show-desktop-drag-handles": "Show desktop drag handles", + "assignee": "Assignee", + "cardAssigneesPopup-title": "Assignee", + "addmore-detail": "Add a more detailed description", + "show-on-card": "Show on Card", + "show-on-minicard": "Show on Minicard", + "new": "New", + "editOrgPopup-title": "Edit Organization", + "newOrgPopup-title": "New Organization", + "editTeamPopup-title": "Edit Team", + "newTeamPopup-title": "New Team", + "editUserPopup-title": "Edit User", + "newUserPopup-title": "New User", + "notifications": "Notifications", + "help": "Help", + "view-all": "View All", + "filter-by-unread": "Filter by Unread", + "mark-all-as-read": "Mark all as read", + "remove-all-read": "Remove all read", + "allow-rename": "Allow Rename", + "allowRenamePopup-title": "Allow Rename", + "start-day-of-week": "Set day of the week start", + "monday": "Monday", + "tuesday": "Tuesday", + "wednesday": "Wednesday", + "thursday": "Thursday", + "friday": "Friday", + "saturday": "Saturday", + "sunday": "Sunday", "status": "Статус", - "swimlane": "Лінія", + "swimlane": "Swimlane", "owner": "Власник", "last-modified-at": "Востаннє змінено", "last-activity": "Остання активність", "voting": "Голосування", "archived": "Архівовано", - "delete-linked-card-before-this-card": "Ви не можете видалити цю картку, поки не видалите пов'язану картку, яка має", - "delete-linked-cards-before-this-list": "Ви не можете видалити цей список, поки не видалите пов'язані картки, які вказують на картки в цьому списку", - "hide-checked-items": "Сховати відмічені елементи", - "hide-finished-checklist": "Сховати виконані контрольні списки", - "task": "Завдання", - "create-task": "Створити завдання", + "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Сховати обрані елементи", + "task": "Task", + "create-task": "Create Task", "ok": "OK", - "organizations": "Організації", - "teams": "Команди", - "displayName": "Відображене Ім'я", - "shortName": "Коротке Ім'я", - "autoAddUsersWithDomainName": "Автоматично додавати користувачів з доменним ім'ям", - "website": "Веб-сайт", - "person": "Особа", - "my-cards": "Мої картки", + "organizations": "Organizations", + "teams": "Teams", + "displayName": "Display Name", + "shortName": "Short Name", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", + "website": "Website", + "person": "Person", + "my-cards": "My Cards", "card": "Картка", - "list": "Список", - "board": "Дошка", + "list": "List", + "board": "Board", "context-separator": "/", - "myCardsViewChange-title": "Мій Погляд на Картки", - "myCardsViewChangePopup-title": "Мій Погляд на Картки", + "myCardsViewChange-title": "My Cards View", + "myCardsViewChangePopup-title": "My Cards View", "myCardsViewChange-choice-boards": "Дошки", - "myCardsViewChange-choice-table": "Таблиця", - "myCardsSortChange-title": "Моє Сортування Карток", - "myCardsSortChangePopup-title": "Моє Сортування Карток", - "myCardsSortChange-choice-board": "По Дошці", - "myCardsSortChange-choice-dueat": "По Терміну", - "dueCards-title": "Картки за Терміном", - "dueCardsViewChange-title": "Вид Карток за Терміном", - "dueCardsViewChangePopup-title": "Вид Карток за Терміном", - "dueCardsViewChange-choice-me": "Я", - "dueCardsViewChange-choice-all": "Усі Користувачі", - "dueCardsViewChange-choice-all-description": "Показує всі незавершені картки з датою Термін з дошок, для яких користувач має дозвіл.", - "broken-cards": "Пошкоджені Картки", - "board-title-not-found": "Дошку '%s' не знайдено.", - "swimlane-title-not-found": "Лінію '%s' не знайдено.", - "list-title-not-found": "Список '%s' не знайдено.", - "label-not-found": "Мітку '%s' не знайдено.", - "label-color-not-found": "Колір мітки %s не знайдено.", - "user-username-not-found": "Ім'я користувача '%s' не знайдено.", - "comment-not-found": "Картку з коментарем, що містить текст '%s', не знайдено.", - "org-name-not-found": "Організацію '%s' не знайдено.", - "team-name-not-found": "Команду '%s' не знайдено.", - "globalSearch-title": "Пошук по всіх дошках", - "no-cards-found": "Картки не знайдено", - "one-card-found": "Знайдено одну картку", - "n-cards-found": "Знайдено %s карток", - "n-n-of-n-cards-found": "start-end з total Карток знайдено", - "operator-board": "дошка", - "operator-board-abbrev": "д", - "operator-swimlane": "лінія", - "operator-swimlane-abbrev": "л", - "operator-list": "список", - "operator-list-abbrev": "с", - "operator-label": "мітка", + "myCardsViewChange-choice-table": "Table", + "myCardsSortChange-title": "My Cards Sort", + "myCardsSortChangePopup-title": "My Cards Sort", + "myCardsSortChange-choice-board": "By Board", + "myCardsSortChange-choice-dueat": "By Due Date", + "dueCards-title": "Due Cards", + "dueCardsViewChange-title": "Due Cards View", + "dueCardsViewChangePopup-title": "Due Cards View", + "dueCardsViewChange-choice-me": "Me", + "dueCardsViewChange-choice-all": "All Users", + "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", + "broken-cards": "Broken Cards", + "board-title-not-found": "Board '%s' not found.", + "swimlane-title-not-found": "Swimlane '%s' not found.", + "list-title-not-found": "List '%s' not found.", + "label-not-found": "Label '%s' not found.", + "label-color-not-found": "Label color %s not found.", + "user-username-not-found": "Username '%s' not found.", + "comment-not-found": "Card with comment containing text '%s' not found.", + "org-name-not-found": "Organization '%s' not found.", + "team-name-not-found": "Team '%s' not found.", + "globalSearch-title": "Search All Boards", + "no-cards-found": "No Cards Found", + "one-card-found": "One Card Found", + "n-cards-found": "%s Cards Found", + "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", + "operator-board": "board", + "operator-board-abbrev": "b", + "operator-swimlane": "swimlane", + "operator-swimlane-abbrev": "s", + "operator-list": "list", + "operator-list-abbrev": "l", + "operator-label": "label", "operator-label-abbrev": "#", - "operator-user": "користувач", + "operator-user": "user", "operator-user-abbrev": "@", "operator-member": "Користувач", - "operator-member-abbrev": "м", - "operator-assignee": "виконавець", - "operator-assignee-abbrev": "в", - "operator-creator": "автор", - "operator-status": "статус", + "operator-member-abbrev": "m", + "operator-assignee": "assignee", + "operator-assignee-abbrev": "a", + "operator-creator": "creator", + "operator-status": "status", "operator-due": "до", - "operator-created": "створено", - "operator-modified": "змінено", - "operator-sort": "сортувати", - "operator-comment": "коментар", - "operator-has": "має", - "operator-limit": "обмеження", - "operator-debug": "налагодження", - "operator-org": "орг", - "operator-team": "команда", - "predicate-archived": "архівовано", - "predicate-open": "відкрито", - "predicate-ended": "завершено", - "predicate-all": "всі", - "predicate-overdue": "прострочено", - "predicate-week": "тиждень", - "predicate-month": "місяць", - "predicate-quarter": "квартал", - "predicate-year": "рік", + "operator-created": "created", + "operator-modified": "modified", + "operator-sort": "sort", + "operator-comment": "comment", + "operator-has": "has", + "operator-limit": "limit", + "operator-debug": "debug", + "operator-org": "org", + "operator-team": "team", + "predicate-archived": "archived", + "predicate-open": "open", + "predicate-ended": "ended", + "predicate-all": "all", + "predicate-overdue": "overdue", + "predicate-week": "week", + "predicate-month": "month", + "predicate-quarter": "quarter", + "predicate-year": "year", "predicate-due": "до", - "predicate-modified": "змінено", - "predicate-created": "створено", - "predicate-attachment": "вкладення", - "predicate-description": "опис", - "predicate-checklist": "чеклист", + "predicate-modified": "modified", + "predicate-created": "created", + "predicate-attachment": "attachment", + "predicate-description": "description", + "predicate-checklist": "checklist", "predicate-start": "початок", "predicate-end": "кінець", - "predicate-assignee": "виконавець", + "predicate-assignee": "assignee", "predicate-member": "Користувач", - "predicate-public": "публічний", - "predicate-private": "приватний", - "predicate-selector": "селектор", - "predicate-projection": "проекція", - "operator-unknown-error": "%s не є оператором", - "operator-number-expected": "оператор operator очікував число, отримано 'value'", - "operator-sort-invalid": "сортування '%s' є недійсним", - "operator-status-invalid": "'%s' не є допустимим статусом", - "operator-has-invalid": "%s не є дійсною перевіркою існування", - "operator-limit-invalid": "%s не є дійсним обмеженням. Обмеження повинно бути додатнім цілим числом.", - "operator-debug-invalid": "%s не є дійсною налагоджувальною пропозицією", - "next-page": "Наступна сторінка", - "previous-page": "Попередня сторінка", - "heading-notes": "Нотатки", - "globalSearch-instructions-heading": "Інструкції пошуку", - "globalSearch-instructions-description": "Пошук може містити оператори для уточнення пошуку. Оператори вказуються шляхом запису назви оператора та значення, розділеного двокрапкою. Наприклад, специфікація оператора список:Заблоковано обмежить пошук карток, що містяться у списку з назвою Заблоковано. Якщо значення містить пробіли або спеціальні символи, воно повинно бути укладено в подвійні лапки (наприклад, список:\"На розгляд\").", - "globalSearch-instructions-operators": "Доступні оператори:", - "globalSearch-instructions-operator-board": "дошка:<назва> - картки на дошках, що відповідають вказаній <назві>", - "globalSearch-instructions-operator-list": "список:<назва> - картки у списках, що відповідають вказаній <назві>", - "globalSearch-instructions-operator-swimlane": "лінія:<назва> - картки в лініях, що відповідають вказаній <назві>", - "globalSearch-instructions-operator-comment": "коментар:<текст> - картки з коментарем, що містить <текст>.", - "globalSearch-instructions-operator-label": "мітка:<колір> мітка:<назва> - картки, які мають мітку, що відповідає <коліру> або <назві>", - "globalSearch-instructions-operator-hash": "#<назва|колір> - скорочення для мітка:<колір> або мітка:<назва>", - "globalSearch-instructions-operator-user": "користувач:<ім'я_користувача> - картки, де <ім'я_користувача> є членом або виконавцем", - "globalSearch-instructions-operator-at": "@<ім'я_користувача> - скорочення для користувач:<ім'я_користувача>", - "globalSearch-instructions-operator-member": "Користувач:<ім'я_користувача> - картки, де <ім'я_користувача> є членом", - "globalSearch-instructions-operator-assignee": "виконавець:<ім'я_користувача> - картки, де <ім'я_користувача> є виконавцем", - "globalSearch-instructions-operator-creator": "автор:<ім'я_користувача> - картки, де <ім'я_користувача> є автором картки", - "globalSearch-instructions-operator-org": "орг:<відображене_ім'я|коротке_ім'я> - картки, що належать до дошки, призначеної організації <назва>", - "globalSearch-instructions-operator-team": "команда:<відображене_ім'я|коротке_ім'я> - картки, що належать до дошки, призначеної команді <назва>", - "globalSearch-instructions-operator-due": "до:<n> - картки, які повинні бути виконані протягом <n> днів відтепер. до:прострочено перелічує всі картки, що минули свій термін виконання.", - "globalSearch-instructions-operator-created": "створено:<n> - картки, які були створені <n> днів тому або менше", - "globalSearch-instructions-operator-modified": "змінено:<n> - картки, які були змінені <n> днів тому або менше", - "globalSearch-instructions-operator-status": "статус:<статус> - де <статус> один із наступних:", - "globalSearch-instructions-status-archived": "архівовано - архівовані картки", - "globalSearch-instructions-status-all": "всі - всі архівовані та неархівовані картки", - "globalSearch-instructions-status-ended": "завершено - картки з кінцевою датою", - "globalSearch-instructions-status-public": "публічний - картки лише на публічних дошках", - "globalSearch-instructions-status-private": "приватний - картки лише на приватних дошках", - "globalSearch-instructions-operator-has": "має:<поле> - де <поле> одне з вкладення, чеклист, опис, початок, до, кінець, виконавець або член. Поставивши - перед <полем>, ви шукаєте картки без значення у цьому полі (наприклад, має:-до шукає картки без терміну виконання).", - "globalSearch-instructions-operator-sort": "сортування:<назва_сортування> - де <назва_сортування> одна з до, створено або змінено. Для сортування за зменшенням, перед назвою сортування поставте -.", - "globalSearch-instructions-operator-limit": "обмеження:<n> - де <n> - це додатне ціле число, що виражає кількість карток, які будуть відображені на сторінці.", - "globalSearch-instructions-notes-1": "Можна вказати кілька операторів.", - "globalSearch-instructions-notes-2": "Подібні оператори додаються ORразом. Повертаються картки, які відповідають будь-яким умовам.\nсписок:Доступно список:Заблоковано поверне картки, що містяться в будь-якому списку з назвою Доступно або Заблоковано.", - "globalSearch-instructions-notes-3": "Відмінні оператори додаються ANDразом. Повертаються лише картки, що відповідають усім відмінним операторам. список:Доступно мітка:червоний повертає лише картки у списку Доступно з червоною міткою.", - "globalSearch-instructions-notes-3-2": "Дні можна вказати як додатне або від'ємне ціле число або використовуючи тиждень, місяць, квартал або рік для поточного періоду.", - "globalSearch-instructions-notes-4": "Пошук тексту нечутливий до регістру.", - "globalSearch-instructions-notes-5": "За замовчуванням не архівуються картки.", - "link-to-search": "Посилання на цей пошук", + "predicate-public": "public", + "predicate-private": "private", + "predicate-selector": "selector", + "predicate-projection": "projection", + "operator-unknown-error": "%s is not an operator", + "operator-number-expected": "operator __operator__ expected a number, got '__value__'", + "operator-sort-invalid": "sort of '%s' is invalid", + "operator-status-invalid": "'%s' is not a valid status", + "operator-has-invalid": "%s is not a valid existence check", + "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", + "operator-debug-invalid": "%s is not a valid debug predicate", + "next-page": "Next Page", + "previous-page": "Previous Page", + "heading-notes": "Notes", + "globalSearch-instructions-heading": "Search Instructions", + "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", + "globalSearch-instructions-operators": "Available operators:", + "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", + "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", + "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", + "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", + "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", + "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", + "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", + "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", + "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", + "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", + "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", + "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", + "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", + "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", + "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", + "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", + "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", + "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", + "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", + "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", + "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", + "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", + "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", + "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", + "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", + "globalSearch-instructions-notes-1": "Multiple operators may be specified.", + "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", + "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", + "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", + "globalSearch-instructions-notes-4": "Text searches are case insensitive.", + "globalSearch-instructions-notes-5": "By default archived cards are not searched.", + "link-to-search": "Link to this search", "excel-font": "Arial", "number": "Номер", - "label-colors": "Кольори міток", - "label-names": "Назви міток", - "archived-at": "заархівовано", - "sort-cards": "Сортування карток", - "sort-is-on": "Сортування увімкнене", - "cardsSortPopup-title": "Сортування карток", - "due-date": "Термін виконання", - "server-error": "Помилка сервера", - "server-error-troubleshooting": "Будь ласка, надішліть помилку, що виникла на сервері.\nДля встановлення через Snap, виконайте: `sudo snap logs wekan.wekan`\nДля встановлення через Docker, виконайте: `sudo docker logs wekan-app`", - "title-alphabetically": "Назва (за алфавітом)", - "created-at-newest-first": "Створено (спочатку найновіші)", - "created-at-oldest-first": "Створено (спочатку найстаріші)", - "links-heading": "Посилання", - "hide-activities-of-all-boards": "Не показуйте дії дошки на всіх дошках", - "now-activities-of-all-boards-are-hidden": "Тепер усі дії всіх дощок приховані", - "move-swimlane": "Перемістити лінію плавання", - "moveSwimlanePopup-title": "Перемістити лінію плавання", - "custom-field-stringtemplate": "Строковий шаблон", - "custom-field-stringtemplate-format": "Формат (використовуйте %{value} як заповнювач)", - "custom-field-stringtemplate-separator": "Роздільник (використовуйте або для пробілу)", - "custom-field-stringtemplate-item-placeholder": "Натисніть Enter, щоб додати ще елементи", - "creator": "Автор", - "creator-on-minicard": "Автор на міні-картці", - "filesReportTitle": "Звіт про файли", - "reports": "Звіти", - "rulesReportTitle": "Звіт про правила", - "boardsReportTitle": "Звіт про дошки", - "cardsReportTitle": "Звіт про картки", - "copy-swimlane": "Копіювати лінію плавання", - "copySwimlanePopup-title": "Копіювати лінію плавання", - "display-card-creator": "Показати автора картки", - "wait-spinner": "Обертовий маркер очікування", - "Bounce": "Обертовий маркер очікування (Bounce)", - "Cube": "Обертовий маркер очікування (Cube)", - "Cube-Grid": "Обертовий маркер очікування (Cube-Grid)", - "Dot": "Обертовий маркер очікування (Dot)", - "Double-Bounce": "Обертовий маркер очікування (Double Bounce)", - "Rotateplane": "Обертовий маркер очікування (Rotateplane)", - "Scaleout": "Обертовий маркер очікування (Scaleout)", - "Wave": "Обертовий маркер очікування (Wave)", - "maximize-card": "Збільшити картку", - "minimize-card": "Зменшити картку", - "delete-org-warning-message": "Не можливо видалити цю організацію, є принаймні один користувач, який до неї належить", - "delete-team-warning-message": "Не можливо видалити цю команду, є принаймні один користувач, який до неї належить", - "subject": "Тема", - "details": "Деталі", - "carbon-copy": "Копія (Cc:)", - "ticket": "Заявка", - "tickets": "Заявки", - "ticket-number": "Номер заявки", - "open": "Відкрита", - "pending": "В очікуванні", - "closed": "Закрита", - "resolved": "Вирішена", - "cancelled": "Скасована", - "history": "Історія", - "request": "Запит", - "requests": "Запити", - "help-request": "Запит на допомогу", - "editCardSortOrderPopup-title": "Змінити порядок сортування", - "cardDetailsPopup-title": "Деталі картки", - "add-teams": "Додати команди", - "add-teams-label": "Додані команди відображаються нижче:", - "remove-team-from-table": "Ви впевнені, що хочете видалити цю команду з дошки?", - "confirm-btn": "Підтвердити", + "label-colors": "Label Colors", + "label-names": "Label Names", + "archived-at": "archived at", + "sort-cards": "Sort Cards", + "sort-is-on": "Sort is on", + "cardsSortPopup-title": "Sort Cards", + "due-date": "Due Date", + "server-error": "Server Error", + "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", + "title-alphabetically": "Title (Alphabetically)", + "created-at-newest-first": "Created At (Newest First)", + "created-at-oldest-first": "Created At (Oldest First)", + "links-heading": "Links", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", + "move-swimlane": "Move Swimlane", + "moveSwimlanePopup-title": "Move Swimlane", + "custom-field-stringtemplate": "String Template", + "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", + "custom-field-stringtemplate-separator": "Separator (use or   for a space)", + "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", + "creator": "Creator", + "filesReportTitle": "Files Report", + "reports": "Reports", + "rulesReportTitle": "Rules Report", + "boardsReportTitle": "Boards Report", + "cardsReportTitle": "Cards Report", + "copy-swimlane": "Copy Swimlane", + "copySwimlanePopup-title": "Copy Swimlane", + "display-card-creator": "Display Card Creator", + "wait-spinner": "Wait Spinner", + "Bounce": "Bounce Wait Spinner", + "Cube": "Cube Wait Spinner", + "Cube-Grid": "Cube-Grid Wait Spinner", + "Dot": "Dot Wait Spinner", + "Double-Bounce": "Double Bounce Wait Spinner", + "Rotateplane": "Rotateplane Wait Spinner", + "Scaleout": "Scaleout Wait Spinner", + "Wave": "Wave Wait Spinner", + "maximize-card": "Maximize Card", + "minimize-card": "Minimize Card", + "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", + "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", + "subject": "Subject", + "details": "Details", + "carbon-copy": "Carbon Copy (Cc:)", + "ticket": "Ticket", + "tickets": "Tickets", + "ticket-number": "Ticket Number", + "open": "Відкрити", + "pending": "Pending", + "closed": "Closed", + "resolved": "Resolved", + "cancelled": "Cancelled", + "history": "History", + "request": "Request", + "requests": "Requests", + "help-request": "Help Request", + "editCardSortOrderPopup-title": "Change Sorting", + "cardDetailsPopup-title": "Card Details", + "add-teams": "Add teams", + "add-teams-label": "Added teams are displayed below:", + "remove-team-from-table": "Are you sure you want to remove this team from the board ?", + "confirm-btn": "Confirm", "remove-btn": "Видалити", - "filter-card-title-label": "Фільтрувати за назвою картки", - "invite-people-success": "Запрошення на реєстрацію надіслано успішно", - "invite-people-error": "Помилка під час надсилання запрошення на реєстрацію", - "can-invite-if-same-mailDomainName": "Домен електронної пошти", - "to-create-teams-contact-admin": "Для створення команд зв'яжіться з адміністратором.", - "Node_heap_total_heap_size": "Пам'ять кучі Node: загальний розмір кучі", - "Node_heap_total_heap_size_executable": "Пам'ять кучі Node: загальний розмір виконуваного файлу кучі", - "Node_heap_total_physical_size": "Пам'ять кучі Node: загальний фізичний розмір", - "Node_heap_total_available_size": "Пам'ять кучі Node: загальний доступний розмір", - "Node_heap_used_heap_size": "Пам'ять кучі Node: використаний розмір кучі", - "Node_heap_heap_size_limit": "Пам'ять кучі Node: обмеження розміру кучі", - "Node_heap_malloced_memory": "Пам'ять кучі Node: видалена пам'ять", - "Node_heap_peak_malloced_memory": "Пам'ять кучі Node: пікова видалена пам'ять", - "Node_heap_does_zap_garbage": "Пам'ять кучі Node: зміни гарбиж-коллектора", - "Node_heap_number_of_native_contexts": "Пам'ять кучі Node: кількість контекстів Native", - "Node_heap_number_of_detached_contexts": "Пам'ять кучі Node: кількість відокремлених контекстів", - "Node_memory_usage_rss": "Використання пам'яті Node: резидентний розмір набору", - "Node_memory_usage_heap_total": "Використання пам'яті Node: загальний розмір виділеної кучі", - "Node_memory_usage_heap_used": "Використання пам'яті Node: фактично використана пам'ять", - "Node_memory_usage_external": "Використання пам'яті Node: зовнішня", - "add-organizations": "Додати організації", - "add-organizations-label": "Додані організації відображаються нижче:", - "remove-organization-from-board": "Ви впевнені, що хочете видалити цю організацію з цієї дошки?", - "to-create-organizations-contact-admin": "Для створення організацій, будь ласка, зв'яжіться з адміністратором.", - "custom-legal-notice-link-url": "URL сторінки зі спеціальним юридичним повідомленням", - "acceptance_of_our_legalNotice": "Продовжуючи, ви приймаєте наше", - "legalNotice": "юридичне повідомлення", - "copied": "Скопійовано!", - "checklistActionsPopup-title": "Дії з чек-листом", - "moveChecklist": "Перемістити чек-лист", - "moveChecklistPopup-title": "Переміщення чек-листу", - "newlineBecomesNewChecklistItem": "Кожен рядок тексту стає одним із пунктів контрольного списку", - "newLineNewItem": "Один рядок тексту = один пункт контрольного списку", - "newlineBecomesNewChecklistItemOriginOrder": "Кожен рядок тексту стає одним із пунктів контрольного списку, в оригінальному порядку", - "originOrder": "оригінальний порядок", - "copyChecklist": "Скопіювати чек-лист", - "copyChecklistPopup-title": "Копіювання чек-листу", - "card-show-lists": "Карта Показ списків", - "subtaskActionsPopup-title": "Дії з підзавданнями", - "attachmentActionsPopup-title": "Дії з вкладеннями", - "attachment-move-storage-fs": "Перемістити вкладення в файлову систему", - "attachment-move-storage-gridfs": "Перемістити вкладення в GridFS", - "attachment-move-storage-s3": "Перемістити вкладення в S3", - "attachment-move": "Перемістити вкладення", - "move-all-attachments-to-fs": "Перемістити всі вкладення в файлову систему", - "move-all-attachments-to-gridfs": "Перемістити всі вкладення в GridFS", - "move-all-attachments-to-s3": "Перемістити всі вкладення в S3", - "move-all-attachments-of-board-to-fs": "Перемістити всі вкладення дошки в файлову систему", - "move-all-attachments-of-board-to-gridfs": "Перемістити всі вкладення дошки в GridFS", - "move-all-attachments-of-board-to-s3": "Перемістити всі вкладення дошки в S3", - "path": "Шлях", - "version-name": "Назва версії", - "size": "Розмір", - "storage": "Сховище", - "action": "Дія", - "board-title": "Назва дошки", - "attachmentRenamePopup-title": "Перейменувати вкладення", - "uploading": "Завантаження", - "remaining_time": "Залишилось часу", - "speed": "Швидкість", - "progress": "Прогрес", - "password-again": "Пароль (ще раз)", - "if-you-already-have-an-account": "Якщо у вас вже є обліковий запис", - "register": "Реєстрація", - "forgot-password": "Забули пароль", - "minicardDetailsActionsPopup-title": "Дії з міні-карткою", - "Mongo_sessions_count": "Кількість сесій MongoDB", - "change-visibility": "Змінити видимість", - "max-upload-filesize": "Максимальний розмір файлу для завантаження (у байтах)", - "allowed-upload-filetypes": "Дозволені типи файлів для завантаження:", - "max-avatar-filesize": "Максимальний розмір аватара (у байтах):", - "allowed-avatar-filetypes": "Дозволені типи файлів для аватарів:", - "invalid-file": "Якщо ім'я файлу неправильне, завантаження або перейменування скасовується", - "preview-pdf-not-supported": "Попередній перегляд PDF не підтримується на вашому пристрої. Спробуйте завантажити файл", - "drag-board": "Перетягнути дошку", - "translation-number": "Кількість рядків для перекладу:", - "delete-translation-confirm-popup": "Ви впевнені, що хочете видалити користувацький рядок перекладу? Цю дію не можна скасувати.", - "newTranslationPopup-title": "Новий користувацький рядок перекладу", - "editTranslationPopup-title": "Редагування користувацького рядка перекладу", - "settingsTranslationPopup-title": "Видалити користувацький рядок перекладу?", - "translation": "Переклад", + "filter-card-title-label": "Filter by card title", + "invite-people-success": "Invitation to register sent with success", + "invite-people-error": "Error while sending invitation to register", + "can-invite-if-same-mailDomainName": "Email domain name", + "to-create-teams-contact-admin": "To create teams, please contact the administrator.", + "Node_heap_total_heap_size": "Node heap: total heap size", + "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", + "Node_heap_total_physical_size": "Node heap: total physical size", + "Node_heap_total_available_size": "Node heap: total available size", + "Node_heap_used_heap_size": "Node heap: used heap size", + "Node_heap_heap_size_limit": "Node heap: heap size limit", + "Node_heap_malloced_memory": "Node heap: malloced memory", + "Node_heap_peak_malloced_memory": "Node heap: peak malloced memory", + "Node_heap_does_zap_garbage": "Node heap: does zap garbage", + "Node_heap_number_of_native_contexts": "Node heap: number of native contexts", + "Node_heap_number_of_detached_contexts": "Node heap: number of detached contexts", + "Node_memory_usage_rss": "Node memory usage: resident set size", + "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", + "Node_memory_usage_heap_used": "Node memory usage: actual memory used", + "Node_memory_usage_external": "Node memory usage: external", + "add-organizations": "Додати організацію", + "add-organizations-label": "Added organizations are displayed below:", + "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", + "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", + "custom-legal-notice-link-url": "Custom legal notice page URL", + "acceptance_of_our_legalNotice": "By continuing, you accept our", + "legalNotice": "legal notice", + "copied": "Копійовано!", + "checklistActionsPopup-title": "Checklist Actions", + "moveChecklist": "Move Checklist", + "moveChecklistPopup-title": "Move Checklist", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", + "copyChecklist": "Copy Checklist", + "copyChecklistPopup-title": "Copy Checklist", + "card-show-lists": "Card Show Lists", + "subtaskActionsPopup-title": "Subtask Actions", + "attachmentActionsPopup-title": "Attachment Actions", + "attachment-move-storage-fs": "Move attachment to filesystem", + "attachment-move-storage-gridfs": "Move attachment to GridFS", + "attachment-move-storage-s3": "Move attachment to S3", + "attachment-move": "Move Attachment", + "move-all-attachments-to-fs": "Move all attachments to filesystem", + "move-all-attachments-to-gridfs": "Move all attachments to GridFS", + "move-all-attachments-to-s3": "Move all attachments to S3", + "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", + "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", + "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", + "path": "Path", + "version-name": "Version-Name", + "size": "Size", + "storage": "Storage", + "action": "Action", + "board-title": "Board Title", + "attachmentRenamePopup-title": "Перейменувати", + "uploading": "Uploading", + "remaining_time": "Remaining time", + "speed": "Speed", + "progress": "Progress", + "password-again": "Password (again)", + "if-you-already-have-an-account": "If you already have an account", + "register": "Register", + "forgot-password": "Forgot password", + "minicardDetailsActionsPopup-title": "Card Details", + "Mongo_sessions_count": "Mongo sessions count", + "change-visibility": "Change Visibility", + "max-upload-filesize": "Max upload filesize in bytes:", + "allowed-upload-filetypes": "Allowed upload filetypes:", + "max-avatar-filesize": "Max avatar filesize in bytes:", + "allowed-avatar-filetypes": "Allowed avatar filetypes:", + "invalid-file": "If filename is invalid, upload or rename is cancelled.", + "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", + "drag-board": "Drag board", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "Текст", - "translation-text": "Перекласти текст", - "show-subtasks-field": "Показати поле підзавдань", - "show-week-of-year": "Показати тиждень року (ISO 8601)", - "convert-to-markdown": "Конвертувати в Markdown", - "import-board-zip": "Додати файл .zip, який містить файли JSON дошки та підкаталоги з назвами дошок і вкладеннями", - "collapse": "Згорнути", - "uncollapse": "Розгорнути", - "hideCheckedChecklistItems": "Приховати відмічені елементи чек-листа", - "hideAllChecklistItems": "Приховати всі пункти чек-листа", - "support": "Підтримка", - "supportPopup-title": "Підтримка", - "accessibility-page-enabled": "Доступность сторінки ввімкнена", - "accessibility-title": "Доступность теми", - "accessibility-content": "Доступность вмісту" + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/uk.i18n.json b/imports/i18n/data/uk.i18n.json index 396f77407..b3ec67b58 100644 --- a/imports/i18n/data/uk.i18n.json +++ b/imports/i18n/data/uk.i18n.json @@ -1,7 +1,7 @@ { "accept": "Прийняти", "act-activity-notify": "Сповіщення про активність учасників", - "act-addAttachment": "додано вкладення __attachment__ до картки __card__ у списку __list__ на доріжці __swimlane__ дошки __board__", + "act-addAttachment": "прикріплено вкладення __attachment__ до картки__card__ у списку __list__ на доріжці __swimlane__ дошки__board__", "act-deleteAttachment": "видалено вкладення __attachment__ з картки __card__ у списку __list__ на доріжці __swimlane__ дошки __board__", "act-addSubtask": "додано підзадачу __subtask__ для картки __card__ у списку __list__ на доріжці __swimlane__ дошки __board__", "act-addLabel": "Додано мітку __label__ до картки __card__ у списку __list__ на доріжці __swimlane__ дошки __board__", @@ -19,38 +19,37 @@ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", "act-editComment": "edited comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", "act-deleteComment": "deleted comment on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__", - "act-createBoard": "Дошку __board__ створено", - "act-createSwimlane": "створено доріжку __swimlane__ на дошці __board__", - "act-createCard": "створено картку __card__ у списку __list__ на доріжці __swimlane__ на дошці __board__", - "act-createCustomField": "створено спеціальне поле __customField__ на дошці __board__", - "act-deleteCustomField": "видалено спеціальне поле __customField__ на дошці __board__", - "act-setCustomField": "відредаговано спеціальне поле __customField__: __customFieldValue__ у картці __card__ у списку __list__ на доріжці __swimlane__ на дошці __board__", - "act-createList": "додано список __list__ на дошці __board__", - "act-addBoardMember": "додано учасника __member__ до дошки __board__", + "act-createBoard": "Дошку __board__створено", + "act-createSwimlane": "created swimlane __swimlane__ to board __board__", + "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-createCustomField": "created custom field __customField__ at board __board__", + "act-deleteCustomField": "deleted custom field __customField__ at board __board__", + "act-setCustomField": "edited custom field __customField__: __customFieldValue__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-createList": "added list __list__ to board __board__", + "act-addBoardMember": "added member __member__ to board __board__", "act-archivedBoard": "Дошку __board__ переміщено до Архіву", - "act-archivedCard": "Картку __card__ у списку __list__ на доріжці __swimlane__ на дошці __board__ переміщено до Архіву", - "act-archivedList": "Список __list__ на доріжці __swimlane__ на дошці __board__ переміщено до Архіву", - "act-archivedSwimlane": "Доріжку __swimlane__ на дошці __board__ переміщено до Архіву", + "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive", + "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive", + "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive", "act-importBoard": "Імпортовано дошку __board__", - "act-importCard": "імпортовано картку __card__ у список __list__ на доріжку __swimlane__ до дошки __board__", - "act-importList": "імпортовано список __list__ у доріжку __swimlane__ на дошку __board__", - "act-joinMember": "додано учасника __member__ до картки __card__ у списку __list__ на доріжці __swimlane__ до дошки __board__", - "act-moveCard": "переміщено картку __card__ на дошці __board__ із списку __oldList__ на доріжку __oldSwimlane__ до списку __list__ на доріжку __swimlane__", - "act-moveCardToOtherBoard": "переміщено картку __card__ із списку __oldList__ на доріжку __oldSwimlane__ до дошки __oldBoard__ у список __list__ на доріжку __swimlane__ на дошці __board__", - "act-removeBoardMember": "видалено учасника __member__ з дошки __board__", - "act-restoredCard": "відновлено картку __card__ у список __list__ на доріжці __swimlane__ на дошці __board__", - "act-unjoinMember": "видалено учасника __member__ з картки __card__ у списку __list__ на доріжці __swimlane__ до дошки __board__", + "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__", + "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__", + "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__", + "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-removeBoardMember": "removed member __member__ from board __board__", + "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__", + "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "act-withBoardTitle": "__board__", "act-withCardTitle": "[__board__] __card__", "actions": "Дії", "activities": "Діяльності", - "activity": "Активність", + "activity": "Діяльність", "activity-added": "%s додано до %s", "activity-archived": "%s перенесено до архіву", "activity-attached": "%s прикріплено до %s", - "activity-created": "%s створено", - "activity-changedListTitle": "перейменовано список у %s", - "activity-customfield-created": "Створено спеціальне поле %s", + "activity-created": "%sстворено", + "activity-customfield-created": "Створено спеціальне поле%s", "activity-excluded": "%s виключено з %s", "activity-imported": "%s імпортовано до %s з %s", "activity-imported-board": "%s імпортовано з %s", @@ -61,8 +60,8 @@ "activity-sent": "%s відправлено до %s", "activity-unjoined": "unjoined %s", "activity-subtask-added": "Додано підзадачу до %s", - "activity-checked-item": "позначено виконаним %s у контрольному списку %s у картці %s у списку %s на доріжці %s дошки %s", - "activity-unchecked-item": "позначено як невиконане %s у контрольному списку %s у картці %s у списку %s на доріжці %s дошки %s", + "activity-checked-item": "checked %s in checklist %s of %s", + "activity-unchecked-item": "unchecked %s in checklist %s of %s", "activity-checklist-added": "Додано контрольний список до %s", "activity-checklist-removed": "removed a checklist from %s", "activity-checklist-completed": "completed checklist %s of %s", @@ -70,9 +69,9 @@ "activity-checklist-item-added": "added checklist item to '%s' in %s", "activity-checklist-item-removed": "removed a checklist item from '%s' in %s", "add": "Додати", - "activity-checked-item-card": "позначено виконаним %s у контрольному списку %s", - "activity-unchecked-item-card": "позначено як невиконане %s у контрольному списку %s", - "activity-checklist-completed-card": "completed checklist %s at card %s at list %s at swimlane %s at board %s", + "activity-checked-item-card": "checked %s in checklist %s", + "activity-unchecked-item-card": "unchecked %s in checklist %s", + "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__", "activity-checklist-uncompleted-card": "uncompleted the checklist %s", "activity-editComment": "відредаговано коментар %s", "activity-deleteComment": "видалено коментар %s", @@ -82,145 +81,143 @@ "activity-endDate": "edited end date to %s of %s", "add-attachment": "Додати вкладення", "add-board": "Додати дошку", - "add-template": "Додати шаблон", + "add-template": "Add Template", "add-card": "Додати картку", - "add-card-to-top-of-list": "Додати картку на початок списку", - "add-card-to-bottom-of-list": "Додати картку у кінець списку", - "setListWidthPopup-title": "Встановити ширину", - "set-list-width": "Встановити ширину", - "set-list-width-value": "Встановити мін. та макс. ширину (у пікселях)", - "list-width-error-message": "Ширина списку має бути цілим числом, більшим за 100", - "keyboard-shortcuts-enabled": "Комбінації клавіш увімкнено. Натисніть, щоб вимкнути.", - "keyboard-shortcuts-disabled": "Комбінації клавіш вимкнено. Натисніть, щоб увімкнути.", + "add-card-to-top-of-list": "Add Card to Top of List", + "add-card-to-bottom-of-list": "Add Card to Bottom of List", + "setListWidthPopup-title": "Встановити ширину списку", + "set-list-width": "Встановити ширину списку", + "set-list-width-value": "Ширина списку (у пікселях)", + "list-width-error-message": "Список має бути цілим числом, що є більше за 0", "setSwimlaneHeightPopup-title": "Встановити довжину доріжки", "set-swimlane-height": "Встановити довжину доріжки", "set-swimlane-height-value": "Висота доріжки (у пікселях)", "swimlane-height-error-message": "Висота доріжки мусить бути цілим числом більше 0", - "add-swimlane": "Додати доріжку", + "add-swimlane": "Add Swimlane", "add-subtask": "Додати підзадачу", - "add-checklist": "Додати контрольний список", + "add-checklist": "Add Checklist", "add-checklist-item": "Додати елемент в список", - "close-add-checklist-item": "Закрити форму додавання елемента до контрольного списку", - "close-edit-checklist-item": "Закрити форму редагування елемента контрольного списку", - "convertChecklistItemToCardPopup-title": "Перетворити у картку", - "add-cover": "Додати обкладинку", + "close-add-checklist-item": "Close add an item to checklist form", + "close-edit-checklist-item": "Close edit an item to checklist form", + "convertChecklistItemToCardPopup-title": "Convert to Card", + "add-cover": "Додати фонове зоображення до міні-картки", "add-label": "Додати мітку", "add-list": "Додати список", "add-after-list": "Додати після списку", - "add-members": "Додати учасників", - "added": "Додано", - "addMemberPopup-title": "Учасники", - "memberPopup-title": "Налаштування учасників", - "admin": "Адміністратор", - "admin-desc": "Може переглядати і редагувати картки, видаляти учасників та змінювати налаштування для дошки.", + "add-members": "Додати користувача", + "added": "Доданно", + "addMemberPopup-title": "Користувачі", + "memberPopup-title": "Member Settings", + "admin": "Адмін", + "admin-desc": "Може переглядати і редагувати картки, відаляти учасників та змінювати налаштування для дошки.", "admin-announcement": "Оголошення", - "admin-announcement-active": "Активне системне оголошення", - "admin-announcement-title": "Оголошення адміністратора", + "admin-announcement-active": "Active System-Wide Announcement", + "admin-announcement-title": "Announcement from Administrator", "all-boards": "Всі дошки", - "and-n-other-card": "і ще __count__ картка", - "and-n-other-card_plural": "і ще __count__ картки", - "apply": "Застосувати", - "app-is-offline": "Додаток офлайн. Зачекайте, будь ласка.", - "app-try-reconnect": "Спробувати з'єднатися знову", - "archive": "Перенести до архіву", - "archive-all": "Перенести все до архіву", - "archive-board": "Перенести дошку до архіву", - "archive-card": "Перенести картку до архіву", - "archive-list": "Перенести список до архіву", - "archive-swimlane": "Перенести доріжку до архіву", - "archive-selection": "Перенести вибране до архіву", - "archiveBoardPopup-title": "Перенести дошку до архіву?", + "and-n-other-card": "та __count__ інших карток", + "and-n-other-card_plural": "та __count__ інших карток", + "apply": "Прийняти", + "app-is-offline": "Завантаження, будь ласка, зачекайте. Оновлення сторінки призведе до втрати даних. Якщо завантаження не працює, перевірте, чи не зупинився сервер.", + "app-try-reconnect": "Try to reconnect.", + "archive": "Перенести до Архіву", + "archive-all": "Перенести Все до Архіву", + "archive-board": "Перенести Дошку до Архіву", + "archive-card": "Перенести Картку до Архіву", + "archive-list": "Перенести Список до Архіву", + "archive-swimlane": "Move Swimlane to Archive", + "archive-selection": "Move selection to Archive", + "archiveBoardPopup-title": "Перенести Дошку до Архіву?", "archived-items": "Архів", - "archived-boards": "Архівні дошки", + "archived-boards": "Дошки в архіві", "restore-board": "Відновити дошку", - "no-archived-boards": "Немає архівних дошок", + "no-archived-boards": "Немає дошок в архіві", "archives": "Архів", "template": "Шаблон", "templates": "Шаблони", - "template-container": "Шаблон контейнера", - "add-template-container": "Додати шаблон контейнера", + "template-container": "Template Container", + "add-template-container": "Add Template Container", "assign-member": "Призначити користувача", - "attached": "додано", + "attached": "доданно", "attachment": "Додаток", - "attachment-delete-pop": "Видалення додатку безповоротне. Відмінити не можна.", - "attachmentDeletePopup-title": "Видалити додаток?", + "attachment-delete-pop": "Видалення Додатку безповоротне. Тут нема відміні (undo).", + "attachmentDeletePopup-title": "Видалити Додаток?", "attachments": "Додатки", "auto-watch": "Автоматично дивитися дошки, коли вони створені", "avatar-too-big": "Аватар надто великий (__size__max)", "back": "Назад", "board-change-color": "Змінити колір", - "board-change-background-image": "Змінити фонове зображення", - "board-background-image-url": "Посилання на фонове зображення", - "add-background-image": "Додати фонове зображення", - "remove-background-image": "Видалити фонове зображення", - "show-at-all-boards-page" : "Показувати на сторінці всіх дошок", - "board-info-on-my-boards" : "Налаштування всіх дошок", - "boardInfoOnMyBoardsPopup-title" : "Налаштування всіх дошок", - "boardInfoOnMyBoards-title": "Налаштування всіх дошок", - "show-card-counter-per-list": "Показувати кількість карток у списку", - "show-board_members-avatar": "Показати аватари учасників дошки", - "board-nb-stars": "%s зірок", + "board-change-background-image": "Змінити Фонове Зоображення\n", + "board-background-image-url": "Посилання на Фонове зоображення", + "add-background-image": "Додати фонове зоображення", + "remove-background-image": "Видалити фонове зоображення", + "show-at-all-boards-page" : "Show at All Boards page", + "board-info-on-my-boards" : "All Boards Settings", + "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", + "boardInfoOnMyBoards-title": "All Boards Settings", + "show-card-counter-per-list": "Show card count per list", + "show-board_members-avatar": "Show Board members avatars", + "board-nb-stars": "%s stars", "board-not-found": "Дошка не знайдена", - "board-private-info": "Ця дошка буде <strong>приватною</strong>.", - "board-public-info": "Ця дошка буде <strong>публічною</strong>.", - "board-drag-drop-reorder-or-click-open": "Перетягніть та відпустіть, щоб змінити порядок іконок дошок. Натисніть на іконку дошки, щоб відкрити дошку.", - "boardChangeColorPopup-title": "Змінити фон дошки", - "boardChangeBackgroundImagePopup-title": "Змінити фонове зображення", + "board-private-info": "This board will be <strong>private</strong>.", + "board-public-info": "This board will be <strong>public</strong>.", + "board-drag-drop-reorder-or-click-open": "Drag and drop to reorder board icons. Click board icon to open board.", + "boardChangeColorPopup-title": "Змінити Фон Дошки", + "boardChangeBackgroundImagePopup-title": "Змінити Фонове Зоображення\n", "allBoardsChangeColorPopup-title": "Змінити колір", - "allBoardsChangeBackgroundImagePopup-title": "Змінити фонове зображення", + "allBoardsChangeBackgroundImagePopup-title": "Змінити Фонове Зоображення\n", "boardChangeTitlePopup-title": "Перейменувати дошку", - "boardChangeVisibilityPopup-title": "Змінити налаштування видимості", - "boardChangeWatchPopup-title": "Змінити налаштування спостереження", - "boardMenuPopup-title": "Налаштування дошки", + "boardChangeVisibilityPopup-title": "Change Visibility", + "boardChangeWatchPopup-title": "Change Watch", + "boardMenuPopup-title": "Board Settings", "allBoardsMenuPopup-title": "Налаштування", - "boardChangeViewPopup-title": "Вид дошки", + "boardChangeViewPopup-title": "Вид Дошки", "boards": "Дошки", - "board-view": "Вид дошки", + "board-view": "Вид Дошки", "board-view-cal": "Календар", - "board-view-swimlanes": "Свімлейни", - "board-view-collapse": "Згорнути", - "board-view-gantt": "Гантт", - "board-view-lists": "Списки", - "bucket-example": "Наприклад, 'Список бажань'", - "cancel": "Скасувати", - "card-archived": "Цю картку переміщено до архіву.", - "board-archived": "Цю дошку переміщено до архіву.", - "card-comments-title": "Ця картка має %s коментар.", + "board-view-swimlanes": "Swimlanes", + "board-view-collapse": "Collapse", + "board-view-gantt": "Gantt", + "board-view-lists": "Lists", + "bucket-example": "Like “Bucket List” for example", + "cancel": "Відміна", + "card-archived": "This card is moved to Archive.", + "board-archived": "This board is moved to Archive.", + "card-comments-title": "This card has %s comment.", "card-delete-notice": "Цю дію неможливо буде скасувати. Всі зміни, які ви вносили в картку будуть втрачені.", "card-delete-pop": "Усі дії буде видалено з каналу активності, і ви не зможете повторно відкрити картку. Цю дію не можна скасувати.", "card-delete-suggest-archive": "Ви можете перемістити картку до архіву, щоб прибрати її з дошки, зберігаючи всю історію дій учасників.", - "card-archive-pop": "Картка не буде видимою у цьому списку після переміщення до архіву.", - "card-archive-suggest-cancel": "Пізніше ви зможете відновити картку з архіву.", - "card-due": "Термін", - "card-due-on": "Термін на", + "card-archive-pop": "Card will not be visible at this list after archiving card.", + "card-archive-suggest-cancel": "You can later restore card from Archive.", + "card-due": "Due", + "card-due-on": "Due on", "card-spent": "Витрачено часу", - "card-edit-attachments": "Змінити вкладення", - "card-edit-custom-fields": "Редагувати налаштування", + "card-edit-attachments": "Edit attachments", + "card-edit-custom-fields": "Edit custom fields", "card-edit-labels": "Редагувати мітки", "card-edit-members": "Редагувати учасників", - "card-labels-title": "Змінити мітки для картки.", - "card-members-title": "Додати або видалити учасників дошки з картки.", - "card-start": "Початок", - "card-start-on": "Початок з", - "cardAttachmentsPopup-title": "Приєднати з", - "cardCustomField-datePopup-title": "Змінити дату", - "cardCustomFieldsPopup-title": "Редагувати налаштування", - "cardStartVotingPopup-title": "Розпочати голосування", - "positiveVoteMembersPopup-title": "Прихильники", - "negativeVoteMembersPopup-title": "Противники", - "card-edit-voting": "Редагувати голосування", - "editVoteEndDatePopup-title": "Змінити кінцеву дату голосування", - "allowNonBoardMembers": "Дозволити усім авторизованим користувачам", - "vote-question": "Питання для голосування", - "vote-public": "Показати, хто як голосував", - "vote-for-it": "за це", - "vote-against": "проти", - "deleteVotePopup-title": "Видалити голосування?", - "vote-delete-pop": "Видалення є безповоротним. Ви втратите всі дії, пов'язані з цим голосуванням.", - "cardStartPlanningPokerPopup-title": "Розпочати планувальний покер", - "card-edit-planning-poker": "Редагувати планувальний покер", - "editPokerEndDatePopup-title": "Змінити кінцеву дату голосування в планувальному покері", - "poker-question": "Планувальний покер", + "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", + "cardCustomField-datePopup-title": "Change date", + "cardCustomFieldsPopup-title": "Edit custom fields", + "cardStartVotingPopup-title": "Start a vote", + "positiveVoteMembersPopup-title": "Proponents", + "negativeVoteMembersPopup-title": "Opponents", + "card-edit-voting": "Edit voting", + "editVoteEndDatePopup-title": "Change vote end date", + "allowNonBoardMembers": "Allow all logged in users", + "vote-question": "Voting question", + "vote-public": "Show who voted what", + "vote-for-it": "for it", + "vote-against": "against", + "deleteVotePopup-title": "Delete vote?", + "vote-delete-pop": "Deleting is permanent. You will lose all actions associated with this vote.", + "cardStartPlanningPokerPopup-title": "Start a Planning Poker", + "card-edit-planning-poker": "Edit Planning Poker", + "editPokerEndDatePopup-title": "Change Planning Poker vote end date", + "poker-question": "Planning Poker", "poker-one": "1", "poker-two": "2", "poker-three": "3", @@ -231,1042 +228,1020 @@ "poker-forty": "40", "poker-oneHundred": "100", "poker-unsure": "?", - "poker-finish": "Завершити", - "poker-result-votes": "Голоси", - "poker-result-who": "Хто", - "poker-replay": "Повторити", - "set-estimation": "Встановити оцінку", - "deletePokerPopup-title": "Видалити планувальний покер?", - "poker-delete-pop": "Видалення є безповоротним. Ви втратите всі дії, пов'язані з цим планувальним покером.", + "poker-finish": "Finish", + "poker-result-votes": "Votes", + "poker-result-who": "Who", + "poker-replay": "Replay", + "set-estimation": "Set Estimation", + "deletePokerPopup-title": "Delete planning poker?", + "poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.", "cardDeletePopup-title": "Видалити картку?", - "cardArchivePopup-title": "Заархівувати картку?", - "cardDetailsActionsPopup-title": "Дії з карткою", - "cardLabelsPopup-title": "Мітки", - "cardMembersPopup-title": "Учасники", - "cardMorePopup-title": "Більше", - "cardTemplatePopup-title": "Створити шаблон", + "cardArchivePopup-title": "Archive Card?", + "cardDetailsActionsPopup-title": "Card Actions", + "cardLabelsPopup-title": "Labels", + "cardMembersPopup-title": "Користувачі", + "cardMorePopup-title": "More", + "cardTemplatePopup-title": "Create template", "cards": "Картки", "cards-count": "Картки", "cards-count-one": "Картка", - "casSignIn": "Увійти за допомогою CAS", + "casSignIn": "Sign In with CAS", "cardType-card": "Картка", - "cardType-linkedCard": "Пов'язана картка", - "cardType-linkedBoard": "Пов'язана дошка", + "cardType-linkedCard": "Linked Card", + "cardType-linkedBoard": "Linked Board", "change": "Змінити", "change-avatar": "Змінити аватар", "change-password": "Змінити пароль", - "change-permissions": "Змінити права доступу", + "change-permissions": "Change permissions", "change-settings": "Змінити налаштування", "changeAvatarPopup-title": "Змінити аватар", "changeLanguagePopup-title": "Змінити мову", "changePasswordPopup-title": "Змінити пароль", - "changePermissionsPopup-title": "Змінити права доступу", + "changePermissionsPopup-title": "Change Permissions", "changeSettingsPopup-title": "Змінити налаштування", "subtasks": "Підзадачі", - "checklists": "Контрольні списки", - "click-to-star": "Натисніть, щоб відзначити цю дошку зірочкою.", - "click-to-unstar": "Натисніть, щоб видалити зірочку з цієї дошки.", - "click-to-enable-auto-width": "Автоматична ширина списку вимкнена. Натисніть, щоб увімкнути.", - "click-to-disable-auto-width": "Автоматична ширина списку увімкнена. Натисніть, щоб вимкнути.", - "auto-list-width": "Автоматична ширина списку", - "clipboard": "Буфер обміну або перетягнути і відпустити", + "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-board": "Закрити дошку", - "close-board-pop": "Ви зможете відновити дошку, натиснувши кнопку «Архів» в заголовку домашньої сторінки.", - "close-card": "Закрити картку", + "close-board": "Close Board", + "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.", + "close-card": "Close Card", "color-black": "чорний", "color-blue": "синій", - "color-crimson": "малиновий", - "color-darkgreen": "темно-зелений", - "color-gold": "золотий", - "color-gray": "сірий", + "color-crimson": "crimson", + "color-darkgreen": "darkgreen", + "color-gold": "gold", + "color-gray": "gray", "color-green": "зелений", - "color-indigo": "індиго", + "color-indigo": "indigo", "color-lime": "лайм", - "color-magenta": "пурпурний", - "color-mistyrose": "тьмяно-рожевий", - "color-navy": "темно-синій", + "color-magenta": "magenta", + "color-mistyrose": "mistyrose", + "color-navy": "navy", "color-orange": "помаранчевий", - "color-paleturquoise": "блідо-бірюзовий", - "color-peachpuff": "персиковий", + "color-paleturquoise": "paleturquoise", + "color-peachpuff": "peachpuff", "color-pink": "рожевий", - "color-plum": "сливовий", + "color-plum": "plum", "color-purple": "фіолетовий", "color-red": "червоний", - "color-saddlebrown": "шкіряно-коричневий", - "color-silver": "срібний", - "color-sky": "голубий", - "color-slateblue": "сіро-голубий", - "color-white": "білий", + "color-saddlebrown": "saddlebrown", + "color-silver": "silver", + "color-sky": "sky", + "color-slateblue": "slateblue", + "color-white": "white", "color-yellow": "жовтий", - "unset-color": "Скасувати колір", - "comments": "Коментарі", + "unset-color": "Unset", "comment": "Коментар", "comment-placeholder": "Написати коментар", - "comment-only": "Тільки коментарі", - "comment-only-desc": "Може коментувати тільки картки.", - "comment-delete": "Ви впевнені, що хочете видалити коментар?", - "deleteCommentPopup-title": "Видалити коментар?", + "comment-only": "Comment only", + "comment-only-desc": "Can comment on cards only.", + "comment-delete": "Are you sure you want to delete the comment?", + "deleteCommentPopup-title": "Delete comment?", "no-comments": "Немає коментарів", - "no-comments-desc": "Не може бачити коментарі та активність.", - "worker": "Робітник", - "worker-desc": "Може тільки переміщати картки, призначати себе до картки і коментувати.", - "computer": "Комп'ютер", - "confirm-subtask-delete-popup": "Ви впевнені, що хочете видалити підзадачу?", - "confirm-checklist-delete-popup": "Ви впевнені, що хочете видалити контрольний список?", - "subtaskDeletePopup-title": "Видалити підзадачу?", - "checklistDeletePopup-title": "Видалити контрольний список?", + "no-comments-desc": "Can not see comments and activities.", + "worker": "Worker", + "worker-desc": "Can only move cards, assign itself to card and comment.", + "computer": "Computer", + "confirm-subtask-delete-popup": "Are you sure you want to delete subtask?", + "confirm-checklist-delete-popup": "Are you sure you want to delete the checklist?", + "subtaskDeletePopup-title": "Delete Subtask?", + "checklistDeletePopup-title": "Delete Checklist?", "copy-card-link-to-clipboard": "Скопіювати посилання на картку в буфер обміну", - "copy-text-to-clipboard": "Скопіювати текст у буфер обміну", - "linkCardPopup-title": "Зв'язати картку", - "searchElementPopup-title": "Пошук", - "copyCardPopup-title": "Скопіювати картку", - "copyManyCardsPopup-title": "Скопіювати шаблон на багато карток", - "copyManyCardsPopup-instructions": "Заголовки та описи карток призначення у цьому JSON форматі", - "copyManyCardsPopup-format": "[{\"title\": \"Перший заголовок картки\", \"description\":\"Перший опис картки\"}, {\"title\":\"Другий заголовок картки\",\"description\":\"Другий опис картки\"},{\"title\":\"Останній заголовок картки\",\"description\":\"Останній опис картки\"} ]", - "create": "Створити", - "createBoardPopup-title": "Створити дошку", - "chooseBoardSourcePopup-title": "Імпортувати дошку", - "createLabelPopup-title": "Створити мітку", - "createCustomField": "Створити поле", - "createCustomFieldPopup-title": "Створити поле", - "current": "поточний", - "custom-field-delete-pop": "Немає відкату. Це видалить це налаштоване поле з усіх карток і знищить його історію.", - "custom-field-checkbox": "Прапорець", - "custom-field-currency": "Валюта", - "custom-field-currency-option": "Код валюти", + "copy-text-to-clipboard": "Copy text to clipboard", + "linkCardPopup-title": "Link Card", + "searchElementPopup-title": "Шукати", + "copyCardPopup-title": "Copy Card", + "copyManyCardsPopup-title": "Copy Template to Many Cards", + "copyManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format", + "copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]", + "create": "Create", + "createBoardPopup-title": "Create Board", + "chooseBoardSourcePopup-title": "Import board", + "createLabelPopup-title": "Create Label", + "createCustomField": "Create Field", + "createCustomFieldPopup-title": "Create Field", + "current": "current", + "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.", + "custom-field-checkbox": "Checkbox", + "custom-field-currency": "Currency", + "custom-field-currency-option": "Currency Code", "custom-field-date": "Дата", - "custom-field-dropdown": "Випадаючий список", - "custom-field-dropdown-none": "(жодного)", - "custom-field-dropdown-options": "Опції списку", - "custom-field-dropdown-options-placeholder": "Натисніть enter, щоб додати більше опцій", - "custom-field-dropdown-unknown": "(невідомо)", + "custom-field-dropdown": "Dropdown List", + "custom-field-dropdown-none": "(none)", + "custom-field-dropdown-options": "List Options", + "custom-field-dropdown-options-placeholder": "Press enter to add more options", + "custom-field-dropdown-unknown": "(unknown)", "custom-field-number": "Номер", "custom-field-text": "Текст", - "custom-fields": "Налаштовані поля", + "custom-fields": "Custom Fields", "date": "Дата", "decline": "Відхилити", "default-avatar": "Аватар за замовчуванням", "delete": "Видалити", - "deleteCustomFieldPopup-title": "Видалити налаштоване поле?", - "deleteLabelPopup-title": "Видалити мітку?", + "deleteCustomFieldPopup-title": "Delete Custom Field?", + "deleteLabelPopup-title": "Delete Label?", "description": "Опис", - "disambiguateMultiLabelPopup-title": "Розрізнити дію мітки", - "disambiguateMultiMemberPopup-title": "Розрізнити дію учасника", - "discard": "Відкинути", - "done": "Виконано", + "disambiguateMultiLabelPopup-title": "Disambiguate Label Action", + "disambiguateMultiMemberPopup-title": "Disambiguate Member Action", + "discard": "Відхилити", + "done": "Done", "download": "Завантажити", "edit": "Редагувати", "edit-avatar": "Змінити аватар", - "edit-profile": "Редагувати профіль", - "edit-wip-limit": "Редагувати ліміт WIP", - "soft-wip-limit": "М'який ліміт WIP", - "editCardStartDatePopup-title": "Змінити дату початку", - "editCardDueDatePopup-title": "Змінити кінцеву дату", - "editCustomFieldPopup-title": "Редагувати поле", - "addReactionPopup-title": "Додати реакцію", - "editCardSpentTimePopup-title": "Змінити витрачений час", - "editLabelPopup-title": "Змінити мітку", - "editNotificationPopup-title": "Редагувати сповіщення", - "editProfilePopup-title": "Редагувати профіль", + "edit-profile": "Редагувати Профіль", + "edit-wip-limit": "Edit WIP Limit", + "soft-wip-limit": "Soft WIP Limit", + "editCardStartDatePopup-title": "Change start date", + "editCardDueDatePopup-title": "Change due date", + "editCustomFieldPopup-title": "Edit Field", + "addReactionPopup-title": "Add reaction", + "editCardSpentTimePopup-title": "Change spent time", + "editLabelPopup-title": "Change Label", + "editNotificationPopup-title": "Edit Notification", + "editProfilePopup-title": "Редагувати Профіль", "email": "Email", - "email-enrollAccount-subject": "Акаунт створений для вас на __siteName__", - "email-enrollAccount-text": "Привіт __user__,\n\nЩоб почати користуватися сервісом, просто натисніть на посилання нижче.\n\n__url__\n\nДякуємо.", - "email-fail": "Невдача при відправленні email", - "email-fail-text": "Помилка при спробі відправити email", - "email-invalid": "Неправильний email", - "email-invite": "Запрошення через email", - "email-invite-subject": "__inviter__ відправив вам запрошення", - "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 відправлений", - "email-verifyEmail-subject": "Підтвердіть вашу email адресу на __siteName__", - "email-verifyEmail-text": "Привіт __user__,\n\nЩоб підтвердити ваш акаунт email, просто натисніть на посилання нижче.\n\n__url__\n\nДякуємо.", - "enable-vertical-scrollbars": "Увімкнути вертикальні скроллбари", - "enable-wip-limit": "Увімкнути ліміт WIP", - "error-board-doesNotExist": "Ця дошка не існує", - "error-board-notAdmin": "Вам потрібно бути адміністратором цієї дошки, щоб зробити це", - "error-board-notAMember": "Вам потрібно бути учасником цієї дошки, щоб зробити це", - "error-json-malformed": "Ваш текст не є дійсним JSON", - "error-json-schema": "Ваш JSON не включає інформації у коректному форматі", + "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-csv-schema": "Ваш CSV(Comma Separated Values)/TSV(Tab Separated Values) не включає інформації у коректному форматі", - "error-list-doesNotExist": "Цей список не існує", - "error-user-doesNotExist": "Цей користувач не існує", - "error-user-notAllowSelf": "Ви не можете запросити себе", - "error-user-notCreated": "Цей користувач не створений", - "error-username-taken": "Це ім'я користувача вже зайняте", - "error-orgname-taken": "Ця назва організації вже зайнята", - "error-teamname-taken": "Ця назва команди вже зайнята", - "error-email-taken": "Email вже зайнятий", - "export-board": "Експортувати дошку", - "export-board-json": "Експортувати дошку в JSON", - "export-board-csv": "Експортувати дошку в CSV", - "export-board-tsv": "Експортувати дошку в TSV", - "export-board-excel": "Експортувати дошку в Excel", - "user-can-not-export-excel": "Користувач не може експортувати Excel", - "export-board-html": "Експортувати дошку в HTML", - "export-card": "Експортувати картку", - "export-card-pdf": "Експортувати картку в PDF", - "user-can-not-export-card-to-pdf": "Користувач не може експортувати картку в PDF", - "exportBoardPopup-title": "Експортувати дошку", - "exportCardPopup-title": "Експортувати картку", - "sort": "Сортувати", - "sorted": "Відсортовано", - "remove-sort": "Прибрати сортування", - "sort-desc": "Натисніть для сортування списку", - "list-sort-by": "Сортувати список за:", - "list-label-modifiedAt": "Час останнього доступу", - "list-label-title": "Назва списку", - "list-label-sort": "Ваше ручне впорядкування", + "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-orgname-taken": "This organization name is already taken", + "error-teamname-taken": "This team name is already taken", + "error-email-taken": "Email has already been taken", + "export-board": "Export board", + "export-board-json": "Export board to JSON", + "export-board-csv": "Export board to CSV", + "export-board-tsv": "Export board to TSV", + "export-board-excel": "Export board to Excel", + "user-can-not-export-excel": "User can not export Excel", + "export-board-html": "Export board to HTML", + "export-card": "Export card", + "export-card-pdf": "Export card to PDF", + "user-can-not-export-card-to-pdf": "User can not export card to PDF", + "exportBoardPopup-title": "Export board", + "exportCardPopup-title": "Export card", + "sort": "Sort", + "sorted": "Sorted", + "remove-sort": "Remove sort", + "sort-desc": "Click to Sort List", + "list-sort-by": "Sort the List By:", + "list-label-modifiedAt": "Last Access Time", + "list-label-title": "Name of the List", + "list-label-sort": "Your Manual Order", "list-label-short-modifiedAt": "(L)", "list-label-short-title": "(N)", "list-label-short-sort": "(M)", - "filter": "Фільтр", - "filter-cards": "Фільтрувати картки або списки", - "filter-dates-label": "Фільтр за датою", - "filter-no-due-date": "Без терміну", - "filter-overdue": "Прострочено", - "filter-due-today": "Термін сьогодні", - "filter-due-this-week": "Термін цього тижня", + "filter": "Filter", + "filter-cards": "Filter Cards or Lists", + "filter-dates-label": "Filter by date", + "filter-no-due-date": "No due date", + "filter-overdue": "Overdue", + "filter-due-today": "Due today", + "filter-due-this-week": "Due this week", "filter-due-next-week": "Зробити наступного тижня", - "filter-due-tomorrow": "Термін завтра", - "list-filter-label": "Фільтрувати список за назвою", - "filter-clear": "Очистити фільтр", - "filter-labels-label": "Фільтр за міткою", - "filter-no-label": "Без мітки", - "filter-member-label": "Фільтр за учасником", - "filter-no-member": "Без учасника", - "filter-assignee-label": "Фільтр за виконавцем", - "filter-no-assignee": "Без виконавця", - "filter-custom-fields-label": "Фільтр за налаштованими полями", - "filter-no-custom-fields": "Без налаштованих полів", - "filter-show-archive": "Показати архівовані списки", - "filter-hide-empty": "Сховати порожні списки", - "filter-on": "Фільтр увімкнено", - "filter-on-desc": "Ви фільтруєте картки на цій дошці. Натисніть тут, щоб редагувати фільтр.", - "filter-to-selection": "Фільтрувати до вибору", - "other-filters-label": "Інші фільтри", - "advanced-filter-label": "Розширений фільтр", - "advanced-filter-description": "Розширений фільтр дозволяє писати рядок, що включає наступні оператори: == != <= => && || () Пробіл використовується як розділювач між операторами. Ви можете фільтрувати для всіх інформацію для всіх користувацьких полів за допомогою написання їхніх імен та значень. Наприклад: Field1=='Value1'. Примітка: якщо поля або значення містять Вам потрібно інкапсулювати їх у одинарні лапки. Наприклад: 'Field 1' == 'Value 1'. Для пропуску окремих керуючих символів (' \\/) можна використовувати \\. Наприклад: Field1 == I\\'m. Також, Ви можете суміщати декілька умов. Наприклад: F1 == V1 || F1 == V2. Зазвичай, всі оператори інтерпретуються зліва направо. Ви можете змінити порядок поставивши дужки. Наприклад: F1 == V1 && (F2 == V2 || F2 == V3). Також ви можете шукати текстові поля використовуючи regex: F1 == /Tes.*/i", - "fullname": "Повне ім'я", - "header-logo-title": "Повернутися на вашу сторінку дошок.", - "show-activities": "Показати дії", - "headerBarCreateBoardPopup-title": "Створити дошку", - "home": "Головна", - "import": "Імпорт", - "impersonate-user": "Втілитися в користувача", - "link": "Посилання", - "import-board": "імпортувати дошку", - "import-board-c": "Імпортувати дошку", - "import-board-title-trello": "Імпортувати дошку з Trello", - "import-board-title-wekan": "Імпортувати дошку з попереднього експорту", - "import-board-title-csv": "Імпортувати дошку з CSV/TSV", - "from-trello": "З Trello", - "from-wekan": "З попереднього експорту", - "from-csv": "З CSV/TSV", - "import-board-instruction-trello": "На вашій дошці Trello перейдіть до 'Меню', потім 'Більше', 'Друк і експорт', 'Експорт JSON' та скопіюйте отриманий текст.", - "import-board-instruction-csv": "Вставте ваші значення, розділені комами (CSV)/ табуляцією (TSV).", - "import-board-instruction-wekan": "На вашій дошці перейдіть до 'Меню', потім 'Експорт дошки', і скопіюйте текст у завантаженому файлі.", - "import-board-instruction-about-errors": "Якщо ви отримаєте помилки під час імпорту дошки, іноді імпорт все ще працює, і дошка з'явиться на сторінці всіх дошок.", - "import-json-placeholder": "Вставте ваші дійсні дані JSON тут", - "import-csv-placeholder": "Вставте ваші дійсні дані CSV/TSV тут", - "import-map-members": "Зіставити учасників", - "import-members-map": "Ваша імпортована дошка має деяких учасників. Будь ласка, зіставте учасників, яких ви хочете імпортувати, з вашими користувачами", - "import-members-map-note": "Примітка: Незіставлені учасники будуть призначені поточному користувачу.", - "import-show-user-mapping": "Переглянути зіставлення учасників", - "import-user-select": "Виберіть вашого існуючого користувача, якого ви хочете використовувати як цього учасника", - "importMapMembersAddPopup-title": "Вибрати учасника", - "info": "Інформація", - "initials": "Ініціали", - "invalid-date": "Невірна дата", - "invalid-time": "Неправильний час", - "invalid-user": "Неправильний користувач", - "joined": "приєднався", + "filter-due-tomorrow": "Due tomorrow", + "list-filter-label": "Filter List by Title", + "filter-clear": "Clear filter", + "filter-labels-label": "Filter by label", + "filter-no-label": "No label", + "filter-member-label": "Filter by member", + "filter-no-member": "No member", + "filter-assignee-label": "Filter by assignee", + "filter-no-assignee": "No assignee", + "filter-custom-fields-label": "Filter by Custom Fields", + "filter-no-custom-fields": "No Custom Fields", + "filter-show-archive": "Show archived lists", + "filter-hide-empty": "Hide empty lists", + "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", + "other-filters-label": "Other Filters", + "advanced-filter-label": "Advanced Filter", + "advanced-filter-description": "Просунутий фільт дозволяє писати рядок, що включає наступні оператори: == != <= => && || () Пробіл використовується як розділювач між операторами. Ви можете фільтрувати для всіх інформацію для всіх користувацьких полів за допомогою написання їхніх імен та значень. Наприклад: Field1=='Value1'. Примітка: якщо поля або значення містять Вам потрібно інкапсулювати їх у одинарні лапки. Наприклад: 'Field 1' == 'Value 1'. Для пропуску окремих керуючих символів (' \\/) можна використовувати \\. Наприклад: Field1 == I\\'m. Також, Ви можете суміщати декілька умов. Наприклад: F1 == V1 || F1 == V2. Зазвичай, всі оператори інтерпретуються зліва направо. Ви можете змінити порядок поставивши дужки. Наприклад: F1 == V1 && (F2 == V2 || F2 == V3). Також ви можете шукати текстові поля використовуючи regex: F1 == /Tes.*/i", + "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", + "impersonate-user": "Impersonate user", + "link": "Link", + "import-board": "import board", + "import-board-c": "Import board", + "import-board-title-trello": "Import board from Trello", + "import-board-title-wekan": "Import board from previous export", + "import-board-title-csv": "Import board from CSV/TSV", + "from-trello": "From Trello", + "from-wekan": "From previous export", + "from-csv": "From CSV/TSV", + "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-csv": "Paste in your Comma Separated Values(CSV)/ Tab Separated Values (TSV) .", + "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.", + "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", + "import-json-placeholder": "Paste your valid JSON data here", + "import-csv-placeholder": "Paste your valid CSV/TSV 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 your users", + "import-members-map-note": "Note: Unmapped members will be assigned to the current user.", + "import-show-user-mapping": "Review members mapping", + "import-user-select": "Pick your existing user you want to use as this member", + "importMapMembersAddPopup-title": "Select member", + "info": "Версія", + "initials": "Initials", + "invalid-date": "Invalid date", + "invalid-time": "Invalid time", + "invalid-user": "Invalid user", + "joined": "приєднано", "just-invited": "Ви тільки що приєдналися до цієї дошки", - "keyboard-shortcuts": "Комбінації клавіш", - "label-create": "Створити мітку", - "label-default": "%s мітка (за замовчуванням)", - "label-delete-pop": "Немає відкату. Це видалить цю мітку з усіх карток і знищить її історію.", - "labels": "Мітки", + "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": "Мова", - "last-admin-desc": "Ви не можете змінити ролі, тому що повинен бути хоча б один адміністратор", - "leave-board": "Залишити дошку", - "leave-board-pop": "Ви впевнені, що хочете залишити __boardTitle__? Ви будете видалені з усіх карток на цій дошці.", - "leaveBoardPopup-title": "Залишити дошку?", + "last-admin-desc": "Ви не можете змінити ролі, бо повинен бути хоча б один адміністратор", + "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": "Залишити Дошку?", "link-card": "Посилання на цю картку", - "list-archive-cards": "Перенести всі картки в цьому списку до архіву", - "list-archive-cards-pop": "Це видалить усі картки в цьому списку з дошки. Щоб переглянути картки в архіві та повернути їх на дошку, натисніть «Меню» > «Архів».", - "list-move-cards": "Перемістити всі картки в цьому списку", - "list-select-cards": "Вибрати всі картки в цьому списку", - "set-color-list": "Встановити колір", - "listActionPopup-title": "Дії зі списком", - "settingsUserPopup-title": "Налаштування користувача", - "settingsTeamPopup-title": "Налаштування команди", - "settingsOrgPopup-title": "Налаштування організації", - "swimlaneActionPopup-title": "Дії зі свімлейном", - "swimlaneAddPopup-title": "Додати свімлейн нижче", - "listImportCardPopup-title": "Імпортувати картку з Trello", - "listImportCardsTsvPopup-title": "Імпортувати Excel CSV/TSV", - "listMorePopup-title": "Більше", - "link-list": "Посилання на цей список", - "list-delete-pop": "Усі дії будуть видалені з каналу активності, і ви не зможете відновити список. Немає відкату.", - "list-delete-suggest-archive": "Ви можете перемістити список до архіву, щоб прибрати його з дошки та зберегти активність.", - "lists": "Списки", - "swimlanes": "Свімлейни", - "log-out": "Вийти", - "log-in": "Увійти", - "loginPopup-title": "Увійти", - "memberMenuPopup-title": "Налаштування користувачів", + "list-archive-cards": "Перенести всі картки в цьому переліку до Архиву", + "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", + "list-move-cards": "Move all cards in this list", + "list-select-cards": "Select all cards in this list", + "set-color-list": "Встановити Колір", + "listActionPopup-title": "List Actions", + "settingsUserPopup-title": "User Settings", + "settingsTeamPopup-title": "Team Settings", + "settingsOrgPopup-title": "Organization Settings", + "swimlaneActionPopup-title": "Swimlane Actions", + "swimlaneAddPopup-title": "Add a Swimlane below", + "listImportCardPopup-title": "Import a Trello card", + "listImportCardsTsvPopup-title": "Import Excel CSV/TSV", + "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 move a list to Archive to remove it from the board and preserve the activity.", + "lists": "Lists", + "swimlanes": "Swimlanes", + "log-out": "Log Out", + "log-in": "Log In", + "loginPopup-title": "Log In", + "memberMenuPopup-title": "Member Settings", "members": "Користувачі", "menu": "Меню", - "move-selection": "Перенести вибране", - "moveCardPopup-title": "Перемістити картку", - "moveCardToBottom-title": "Перемістити на низ", - "moveCardToTop-title": "Перемістити на початок", - "moveSelectionPopup-title": "Перенести вибране", - "multi-selection": "Мультивибір", - "multi-selection-label": "Встановити мітку для вибору", - "multi-selection-member": "Встановити учасника для вибору", - "multi-selection-on": "Мультивибір увімкнено", - "muted": "Приглушено", - "muted-info": "Ви ніколи не отримаєте сповіщень про будь-які зміни на цій дошці", - "my-boards": "Мої дошки", - "name": "Ім'я", - "no-archived-cards": "Немає карток в архіві.", - "no-archived-lists": "Немає списків в архіві.", - "no-archived-swimlanes": "Немає свімлейнів в архіві.", - "no-results": "Немає результатів", - "normal": "Звичайний", - "normal-desc": "Може переглядати та редагувати картки. Не може змінювати налаштування.", - "not-accepted-yet": "Запрошення ще не прийнято", - "notify-participate": "Отримувати оновлення по будь-яких картках, де ви берете участь як творець або учасник", - "notify-watch": "Отримувати оновлення по будь-яких дошках, списках або картках, за якими ви спостерігаєте", - "optional": "необов'язково", - "or": "або", - "page-maybe-private": "Ця сторінка може бути приватною. Ви можете переглянути її, <a href='%s'>увійшовши в систему</a>.", - "page-not-found": "Сторінку не знайдено.", - "password": "Пароль", - "paste-or-dragdrop": "вставте або перетягніть файл зображення сюди (тільки зображення)", - "participating": "Бере участь", - "preview": "Попередній перегляд", - "previewAttachedImagePopup-title": "Попередній перегляд", - "previewClipboardImagePopup-title": "Попередній перегляд", - "private": "Приватна", - "private-desc": "Це приватна дошка. Тільки люди, додані до цієї дошки, можуть переглядати та редагувати її.", - "profile": "Профіль", - "public": "Публічна", - "public-desc": "Цю дошку можуть переглядати всі, у кого є посилання. Також ця дошка може бути проіндексована пошуковими системами. Зміни можуть вносити тільки учасники.", - "quick-access-description": "Додайте зірочку до дошки, щоб створити ярлик на цій панелі.", - "remove-cover": "Видалити фонове зображення з міні-картки", - "remove-from-board": "Видалити з дошки", - "remove-label": "Видалити мітку", - "listDeletePopup-title": "Видалити список?", - "remove-member": "Видалити учасника", - "remove-member-from-card": "Видалити з картки", - "remove-member-pop": "Видалити __name__ (__username__) з __boardTitle__? Учасника буде видалено з усіх карток на цій дошці. Він отримає повідомлення.", - "removeMemberPopup-title": "Видалити учасника?", + "move-selection": "Перенести обране", + "moveCardPopup-title": "Move Card", + "moveCardToBottom-title": "Перенести до Низу", + "moveCardToTop-title": "Перенести на Початок", + "moveSelectionPopup-title": "Перенести обране", + "multi-selection": "Multi-Selection", + "multi-selection-label": "Set label for selection", + "multi-selection-member": "Set member for 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 cards in Archive.", + "no-archived-lists": "No lists in Archive.", + "no-archived-swimlanes": "No swimlanes in Archive.", + "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 creator 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": "Це приватна дошка. Тільки люди, додані до цієї дошки можуть переглядати та редагувати її.", + "profile": "Profile", + "public": "Public", + "public-desc": "Цю дошку можуть переглядати усі, у кого є посилання. Також ця дошка може бути проіндексована пошуковими системами. Вносити зміни можуть тільки учасники.", + "quick-access-description": "Star a board to add a shortcut in this bar.", + "remove-cover": "Видалити фонове зоображення з міні-карти", + "remove-from-board": "Remove from Board", + "remove-label": "Remove Label", + "listDeletePopup-title": "Видалити Список?", + "remove-member": "Видалити Учасника", + "remove-member-from-card": "Видалити з Картки", + "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.", + "removeMemberPopup-title": "Видалити Учасника?", "rename": "Перейменувати", "rename-board": "Перейменувати дошку", "restore": "Відновити", - "rescue-card-description": "Показувати діалог виправлення перед закриттям для незбережених описів карток", - "rescue-card-description-dialogue": "Перезаписати поточний опис картки вашими змінами?", + "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", + "rescue-card-description-dialogue": "Overwrite current card description with your changes?", "save": "Зберегти", "search": "Шукати", "rules": "Правила", - "search-cards": "Пошук по заголовках карток/списків, описах та налаштованих полях на цій дошці", - "search-example": "Введіть текст для пошуку та натисніть Enter", - "select-color": "Обрати колір", - "select-board": "Обрати дошку", - "set-wip-limit-value": "Встановіть ліміт максимальної кількості завдань у цьому списку", - "setWipLimitPopup-title": "Встановити WIP ліміт", - "shortcut-add-self": "Додати себе до поточної картки", + "search-cards": "Search from card/list titles, descriptions and custom fields on this board", + "search-example": "Write text you search and press Enter", + "select-color": "Оберіть Коліп", + "select-board": "Оберіть Дошку", + "set-wip-limit-value": "Встановіть обмеження максимальної кількості завдань в цьому списку", + "setWipLimitPopup-title": "Set WIP Limit", "shortcut-assign-self": "Призначити себе до поточної картки", - "shortcut-autocomplete-emoji": "Автозаповнення емодзі", + "shortcut-autocomplete-emoji": "Autocomplete emoji", "shortcut-autocomplete-members": "Автозавершення учасників", - "shortcut-clear-filters": "Очистити всі фільтри", - "shortcut-close-dialog": "Закрити діалог", + "shortcut-clear-filters": "Clear all filters", + "shortcut-close-dialog": "Close Dialog", "shortcut-filter-my-cards": "Фільтрувати мої картки", - "shortcut-filter-my-assigned-cards": "Фільтрувати мої призначені картки", - "shortcut-show-shortcuts": "Показати цей список ярликів", - "shortcut-toggle-filterbar": "Перемкнути бічну панель фільтра", - "shortcut-toggle-searchbar": "Перемкнути бічну панель пошуку", - "shortcut-toggle-sidebar": "Перемкнути бічну панель дошки", - "show-cards-minimum-count": "Показувати кількість карток, якщо список містить більше, ніж", - "sidebar-open": "Відкрити бічну панель", - "sidebar-close": "Закрити бічну панель", - "signupPopup-title": "Створити обліковий запис", - "star-board-title": "Натисніть, щоб додати дошку до обраних. Вона з'явиться у верхній частині списку ваших дошок.", - "starred-boards": "Обрані дошки", - "starred-boards-description": "Обрані дошки з'являються вгорі вашого списку дошок.", - "subscribe": "Підписатися", + "shortcut-show-shortcuts": "Bring up this shortcuts list", + "shortcut-toggle-filterbar": "Перемкнути бічну панель Фільтра", + "shortcut-toggle-searchbar": "Перемкнути бічну панель Пошуку", + "shortcut-toggle-sidebar": "Перемкнути бічну панель Дошки", + "show-cards-minimum-count": "Показувати кількість карток, якщо список містить більше, ніж", + "sidebar-open": "Відкрити бокову панель", + "sidebar-close": "Закрити бокову панель", + "signupPopup-title": "Створити Обліковий запис", + "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": "Команда", "this-board": "ця дошка", "this-card": "ця картка", - "spent-time-hours": "Витрачено часу (години)", - "overtime-hours": "Надурочний час (години)", - "overtime": "Надурочний час", - "has-overtime-cards": "Має картки з надурочним часом", - "has-spenttime-cards": "Має картки з витраченим часом", + "spent-time-hours": "Витрачено часу(годин)", + "overtime-hours": "Overtime (hours)", + "overtime": "Overtime", + "has-overtime-cards": "Has overtime cards", + "has-spenttime-cards": "Has spent time cards", "time": "Час", - "title": "Назва", - "toggle-assignees": "Перемикання призначень 1-9 для картки (за порядком додавання на дошку)", - "toggle-labels": "Перемкнути мітки 1-9 для картки. Мультивибір додає мітки 1-9", - "remove-labels-multiselect": "Мультивибір видаляє мітки 1-9", - "tracking": "Відстеження", - "tracking-info": "Ви будете повідомлені про будь-які зміни у тих картках, в яких ви є творцем або учасником.", + "title": "Title", + "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", + "remove-labels-multiselect": "Multi-Selection removes labels 1-9", + "tracking": "Tracking", + "tracking-info": "Ви будете повідомлені про будь-які зміни в тих картках, в яких ви є творцем або учасником.", "type": "Тип", - "unassign-member": "Відв'язати учасника", - "unsaved-description": "У вас є незбережений опис", - "unwatch": "Припинити спостереження", + "unassign-member": "Unassign member", + "unsaved-description": "Ви маєте незбрежений опис", + "unwatch": "Unwatch", "upload": "Завантажити", "upload-avatar": "Завантажити аватар", "uploaded-avatar": "Завантажений аватар", - "custom-top-left-corner-logo-image-url": "Спеціальне зображення логотипу в лівому верхньому кутку", - "custom-top-left-corner-logo-link-url": "Спеціальне посилання на логотип у лівому верхньому кутку", - "custom-top-left-corner-logo-height": "Спеціальна висота логотипу в лівому верхньому кутку. За замовчуванням: 27", - "custom-login-logo-image-url": "Спеціальне зображення логотипу на сторінці входу", - "custom-login-logo-link-url": "Спеціальне посилання на логотип на сторінці входу", - "custom-help-link-url": "Спеціальне посилання на довідку", - "text-below-custom-login-logo": "Текст під спеціальним логотипом на сторінці входу", - "automatic-linked-url-schemes": "Спеціальні URL-схеми, які автоматично мають бути клікабельними. Одна URL-схема на рядок", - "username": "Ім'я користувача", - "import-usernames": "Імпортувати імена користувачів", + "custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL", + "custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL", + "custom-top-left-corner-logo-height": "Custom Top Left Corner Logo Height. Default: 27", + "custom-login-logo-image-url": "Custom Login Logo Image URL", + "custom-login-logo-link-url": "Custom Login Logo Link URL", + "custom-help-link-url": "Custom Help Link URL", + "text-below-custom-login-logo": "Text below Custom Login Logo", + "automatic-linked-url-schemes": "Custom URL Schemes which should automatically be clickable. One URL Scheme per line", + "username": "Username", + "import-usernames": "Import Usernames", "view-it": "Переглянути це", - "warn-list-archived": "попередження: ця картка знаходиться у списку в Архіві", - "watch": "Спостерігати", - "watching": "Спостереження", - "watching-info": "Ви будете повідомлені про будь-які зміни на цій дошці", - "welcome-board": "Ласкаво просимо на дошку", - "welcome-swimlane": "Етап 1", - "welcome-list1": "Основи", - "welcome-list2": "Продвинуті", - "card-templates-swimlane": "Шаблони карток", - "list-templates-swimlane": "Шаблони списків", - "board-templates-swimlane": "Шаблони дошок", + "warn-list-archived": "warning: this card is in an list at Archive", + "watch": "Watch", + "watching": "Watching", + "watching-info": "You will be notified of any change in this board", + "welcome-board": "Welcome Board", + "welcome-swimlane": "Milestone 1", + "welcome-list1": "Basics", + "welcome-list2": "Advanced", + "card-templates-swimlane": "Card Templates", + "list-templates-swimlane": "List Templates", + "board-templates-swimlane": "Шаблони Дошок", "what-to-do": "Що ви хочете зробити?", - "wipLimitErrorPopup-title": "Некоректне обмеження WIP", + "wipLimitErrorPopup-title": "Некоректне Обмеження WIP", "wipLimitErrorPopup-dialog-pt1": "Кількість завдань у цьому списку перевищує встановлений вами ліміт", "wipLimitErrorPopup-dialog-pt2": "Будь ласка, перенесіть деякі завдання з цього списку або збільште ліміт на кількість завдань", - "admin-panel": "Панель адміністратора", + "admin-panel": "Панель Адміністратора", "settings": "Налаштування", "people": "Люди", "registration": "Реєстрація", - "disable-self-registration": "Відключити самостійну реєстрацію", - "disable-forgot-password": "Відключити відновлення пароля", - "invite": "Запрошення", - "invite-people": "Запрошення людей", - "to-boards": "На дошки", - "email-addresses": "Email адреси", - "smtp-host-description": "Адреса сервера SMTP, який обробляє ваші email.", - "smtp-port-description": "Порт, який ваш SMTP сервер використовує для вихідних email.", - "smtp-tls-description": "Увімкнути підтримку TLS для SMTP сервера", - "smtp-host": "SMTP хост", - "smtp-port": "SMTP порт", - "smtp-username": "Ім'я користувача", - "smtp-password": "Пароль", - "smtp-tls": "Підтримка TLS", - "send-from": "Відправити від", - "send-smtp-test": "Надіслати тестовий email собі", - "invitation-code": "Код запрошення", - "email-invite-register-subject": "__inviter__ відправив вам запрошення", - "email-invite-register-text": "Дорогий __user__,\n\n__inviter__ запрошує вас до співпраці на дошці kanban.\n\nБудь ласка, перейдіть за посиланням нижче:\n__url__\n\nІ ваш код запрошення: __icode__\n\nДякуємо.", + "disable-self-registration": "Disable Self-Registration", + "disable-forgot-password": "Disable Forgot Password", + "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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.", "email-smtp-test-subject": "Лист перевірки SMTP", "email-smtp-test-text": "Ви успішно надіслали e-mail", "error-invitation-code-not-exist": "Код запрошення не існує", "error-notAuthorized": "Ви не авторизовані для перегляду цієї сторінки.", - "webhook-title": "Назва Webhook", - "webhook-token": "Токен (Необов'язково для автентифікації)", - "outgoing-webhooks": "Вихідні Webhooks", - "bidirectional-webhooks": "Двосторонні Webhooks", - "outgoingWebhooksPopup-title": "Вихідні Webhooks", - "boardCardTitlePopup-title": "Фільтр назви картки", - "disable-webhook": "Відключити цей Webhook", - "global-webhook": "Глобальні Webhooks", - "new-outgoing-webhook": "Новий вихідний Webhook", - "no-name": "(Невідомо)", - "Node_version": "Версія Node", - "Meteor_version": "Версія Meteor", - "MongoDB_version": "Версія MongoDB", - "MongoDB_storage_engine": "Двигун зберігання MongoDB", - "MongoDB_Oplog_enabled": "MongoDB Oplog увімкнено", - "OS_Arch": "Архітектура ОС", - "OS_Cpus": "Кількість процесорів ОС", - "OS_Freemem": "Вільна пам'ять ОС", - "OS_Loadavg": "Середнє навантаження ОС", - "OS_Platform": "Платформа ОС", - "OS_Release": "Випуск ОС", - "OS_Totalmem": "Загальна пам'ять ОС", - "OS_Type": "Тип ОС", - "OS_Uptime": "Час роботи ОС", - "days": "дні", - "hours": "години", - "minutes": "хвилини", - "seconds": "секунди", - "show-field-on-card": "Показати це поле на картці", - "automatically-field-on-card": "Додати поле до нових карток", - "always-field-on-card": "Додати поле до усіх карток", - "showLabel-field-on-card": "Показати назву поля на міні-картці", - "showSum-field-on-list": "Показати суму полів у верхній частині списку", - "yes": "Так", - "no": "Ні", - "accounts": "Облікові записи", - "accounts-allowEmailChange": "Дозволити зміну Email", - "accounts-allowUserNameChange": "Дозволити зміну імені користувача", - "tableVisibilityMode-allowPrivateOnly": "Видимість дошок: дозволити тільки приватні дошки", - "tableVisibilityMode" : "Видимість дошок", + "webhook-title": "Webhook Name", + "webhook-token": "Token (Optional for Authentication)", + "outgoing-webhooks": "Outgoing Webhooks", + "bidirectional-webhooks": "Two-Way Webhooks", + "outgoingWebhooksPopup-title": "Outgoing Webhooks", + "boardCardTitlePopup-title": "Card Title Filter", + "disable-webhook": "Disable This Webhook", + "global-webhook": "Global Webhooks", + "new-outgoing-webhook": "New Outgoing Webhook", + "no-name": "(Unknown)", + "Node_version": "Node version", + "Meteor_version": "Meteor version", + "MongoDB_version": "MongoDB version", + "MongoDB_storage_engine": "MongoDB storage engine", + "MongoDB_Oplog_enabled": "MongoDB Oplog enabled", + "OS_Arch": "OS Arch", + "OS_Cpus": "OS CPU Count", + "OS_Freemem": "OS Free Memory", + "OS_Loadavg": "OS Load Average", + "OS_Platform": "OS Platform", + "OS_Release": "OS Release", + "OS_Totalmem": "OS Total Memory", + "OS_Type": "OS Type", + "OS_Uptime": "OS Uptime", + "days": "days", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "show-field-on-card": "Show this field on card", + "automatically-field-on-card": "Add field to new cards", + "always-field-on-card": "Add field to all cards", + "showLabel-field-on-card": "Show field label on minicard", + "showSum-field-on-list": "Show sum of fields at top of list", + "yes": "Yes", + "no": "No", + "accounts": "Accounts", + "accounts-allowEmailChange": "Дозволити Зміну Email", + "accounts-allowUserNameChange": "Дозволити Зміну Імені Користувача", + "tableVisibilityMode-allowPrivateOnly": "Boards visibility: Allow private boards only", + "tableVisibilityMode" : "Boards visibility", "createdAt": "Створено", - "modifiedAt": "Змінено", + "modifiedAt": "Modified at", "verified": "Перевірено", "active": "Активно", "card-received": "Отримано", - "card-received-on": "Отримано на", + "card-received-on": "Received on", "card-end": "Кінець", "card-end-on": "Закінчується на", "editCardReceivedDatePopup-title": "Змінити дату отримання", - "editCardEndDatePopup-title": "Змінити дату закінчення", - "setCardColorPopup-title": "Встановити колір", - "setCardActionsColorPopup-title": "Вибрати колір", - "setSwimlaneColorPopup-title": "Вибрати колір", - "setListColorPopup-title": "Вибрати колір", - "assigned-by": "Призначено", + "editCardEndDatePopup-title": "Change end date", + "setCardColorPopup-title": "Set color", + "setCardActionsColorPopup-title": "Оберіть колір", + "setSwimlaneColorPopup-title": "Оберіть колір", + "setListColorPopup-title": "Оберіть колір", + "assigned-by": "Assigned By", "requested-by": "Запитано", - "card-sorting-by-number": "Сортування карток за номером", - "board-delete-notice": "Це видалення назавжди. Ви втратите всі списки, картки та дії, пов'язані з цією дошкою.", - "delete-board-confirm-popup": "Усі списки, картки, мітки та діяльність будуть видалені, і ви не зможете відновити вміст дошки. Немає відкату.", - "boardDeletePopup-title": "Видалити дошку?", - "delete-board": "Видалити дошку", - "default-subtasks-board": "Підзадачі для дошки __board__", - "default": "За замовчуванням", - "defaultdefault": "За замовчуванням", - "queue": "Черга", - "subtask-settings": "Налаштування підзадач", - "card-settings": "Налаштування картки", - "minicard-settings": "Налаштування міні-картки", - "boardSubtaskSettingsPopup-title": "Налаштування підзадач дошки", - "boardCardSettingsPopup-title": "Налаштування картки", - "boardMinicardSettingsPopup-title": "Налаштування міні-картки", - "deposit-subtasks-board": "Перенести підзадачі на цю дошку:", - "deposit-subtasks-list": "Список приземлення для підзадач, що переносяться сюди:", - "show-parent-in-minicard": "Показати батька на міні-картці:", - "description-on-minicard": "Опис на міні-картці", - "cover-attachment-on-minicard": "Зображення обкладинки на міні-картці", - "badge-attachment-on-minicard": "Кількість вкладень на міні-картці", - "card-sorting-by-number-on-minicard": "Сортування за номерами на міні-картці", - "prefix-with-full-path": "Префікс з повним шляхом", - "prefix-with-parent": "Префікс з батьком", - "subtext-with-full-path": "Підтекст з повним шляхом", - "subtext-with-parent": "Підтекст з батьком", - "change-card-parent": "Змінити батька картки", - "parent-card": "Батьківська картка", - "source-board": "Джерельна дошка", - "no-parent": "Не показувати батька", - "activity-added-label": "додано мітку '%s' до %s", - "activity-removed-label": "видалено мітку '%s' з %s", - "activity-delete-attach": "видалено вкладення з %s", - "activity-added-label-card": "додано мітку '%s'", - "activity-removed-label-card": "видалено мітку '%s'", - "activity-delete-attach-card": "видалено вкладення", - "activity-set-customfield": "встановлено налаштоване поле '%s' до '%s' в %s", - "activity-unset-customfield": "видалено налаштоване поле '%s' з %s", + "card-sorting-by-number": "Card sorting by number", + "board-delete-notice": "Це видалення назавжди. Ви втратите всі листи, картки та дії, пов'язані з цією дошкою.", + "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", + "boardDeletePopup-title": "Delete Board?", + "delete-board": "Delete Board", + "default-subtasks-board": "Subtasks for __board__ board", + "default": "Default", + "defaultdefault": "Default", + "queue": "Queue", + "subtask-settings": "Subtasks Settings", + "card-settings": "Card Settings", + "minicard-settings": "Minicard Settings", + "boardSubtaskSettingsPopup-title": "Board Subtasks Settings", + "boardCardSettingsPopup-title": "Card Settings", + "boardMinicardSettingsPopup-title": "Minicard Settings", + "deposit-subtasks-board": "Deposit subtasks to this board:", + "deposit-subtasks-list": "Landing list for subtasks deposited here:", + "show-parent-in-minicard": "Show parent in minicard:", + "description-on-minicard": "Description on minicard", + "cover-attachment-on-minicard": "Зоображення обкладинки міні-карти", + "badge-attachment-on-minicard": "Кількість вкладень на міні-карті", + "card-sorting-by-number-on-minicard": "Сортування по номерах на міні-картці", + "prefix-with-full-path": "Prefix with full path", + "prefix-with-parent": "Prefix with parent", + "subtext-with-full-path": "Subtext with full path", + "subtext-with-parent": "Subtext with parent", + "change-card-parent": "Change card's parent", + "parent-card": "Parent card", + "source-board": "Source board", + "no-parent": "Don't show parent", + "activity-added-label": "added label '%s' to %s", + "activity-removed-label": "removed label '%s' from %s", + "activity-delete-attach": "deleted an attachment from %s", + "activity-added-label-card": "added label '%s'", + "activity-removed-label-card": "removed label '%s'", + "activity-delete-attach-card": "deleted an attachment", + "activity-set-customfield": "set custom field '%s' to '%s' in %s", + "activity-unset-customfield": "unset custom field '%s' in %s", "r-rule": "Правило", - "r-add-trigger": "Додати тригер", - "r-add-action": "Додати дію", + "r-add-trigger": "Add trigger", + "r-add-action": "Add action", "r-board-rules": "Дошка правил", - "r-add-rule": "Додати правило", + "r-add-rule": "Add rule", "r-view-rule": "Переглянути правило", "r-delete-rule": "Видалити правило", - "r-new-rule-name": "Назва нового правила", - "r-no-rules": "Правила відсутні", - "r-trigger": "Тригер", - "r-action": "Дія", - "r-when-a-card": "Коли картка", - "r-is": "є", - "r-is-moved": "переміщена", - "r-added-to": "Додано до", - "r-removed-from": "Видалено з", - "r-the-board": "дошки", - "r-list": "список", - "set-filter": "Встановити фільтр", + "r-new-rule-name": "Заголовок нового правила", + "r-no-rules": "No rules", + "r-trigger": "Trigger", + "r-action": "Action", + "r-when-a-card": "When a card", + "r-is": "is", + "r-is-moved": "is moved", + "r-added-to": "Added to", + "r-removed-from": "Видалити з", + "r-the-board": "Дошка", + "r-list": "list", + "set-filter": "Set Filter", "r-moved-to": "переміщено до", "r-moved-from": "переміщено з", - "r-archived": "переміщено до архіву", - "r-unarchived": "відновлено з архіву", - "r-a-card": "картка", - "r-when-a-label-is": "Коли мітка", - "r-when-the-label": "Коли мітка", - "r-list-name": "назва списку", - "r-when-a-member": "Коли учасник", - "r-when-the-member": "Коли учасник", - "r-name": "назва", - "r-when-a-attach": "Коли вкладення", - "r-when-a-checklist": "Коли контрольний список", - "r-when-the-checklist": "Коли контрольний список", - "r-completed": "завершено", - "r-made-incomplete": "зроблено незавершеним", - "r-when-a-item": "Коли елемент контрольного списку", - "r-when-the-item": "Коли елемент", - "r-checked": "перевірено", - "r-unchecked": "неперевірено", - "r-move-card-to": "Перемістити картку до", - "r-top-of": "Верх", - "r-bottom-of": "Низ", - "r-its-list": "її список", - "r-archive": "Перемістити до архіву", - "r-unarchive": "Відновити з архіву", + "r-archived": "переміщено до Архіву", + "r-unarchived": "Відновлено з Архіву", + "r-a-card": "a card", + "r-when-a-label-is": "When a label is", + "r-when-the-label": "When the label", + "r-list-name": "list name", + "r-when-a-member": "When a member is", + "r-when-the-member": "When the member", + "r-name": "name", + "r-when-a-attach": "When an attachment", + "r-when-a-checklist": "When a checklist is", + "r-when-the-checklist": "When the checklist", + "r-completed": "Completed", + "r-made-incomplete": "Made incomplete", + "r-when-a-item": "When a checklist item is", + "r-when-the-item": "When the checklist item", + "r-checked": "Checked", + "r-unchecked": "Unchecked", + "r-move-card-to": "Move card to", + "r-top-of": "Top of", + "r-bottom-of": "Bottom of", + "r-its-list": "its list", + "r-archive": "Перенести до Архіву", + "r-unarchive": "Restore from Archive", "r-card": "Картка", "r-add": "Додати", "r-remove": "Видалити", - "r-label": "мітку", - "r-member": "учасника", - "r-remove-all": "Видалити всіх учасників картки", - "r-set-color": "Встановити колір", - "r-checklist": "контрольний список", - "r-check-all": "Перевірити всі", - "r-uncheck-all": "Скасувати всі відмітки", - "r-items-check": "елементи контрольного списку", + "r-label": "label", + "r-member": "Користувач", + "r-remove-all": "Видалити усіх учасників картки", + "r-set-color": "Set color to", + "r-checklist": "checklist", + "r-check-all": "Check all", + "r-uncheck-all": "Uncheck all", + "r-items-check": "items of checklist", "r-check": "Обрати", - "r-uncheck": "Скасувати обрання", - "r-item": "елемент", - "r-of-checklist": "контрольного списку", - "r-send-email": "Відправити email", - "r-to": "до", - "r-of": "з", - "r-subject": "Тема", - "r-rule-details": "Деталі правила", - "r-d-move-to-top-gen": "Перемістити картку на верх її списку", - "r-d-move-to-top-spec": "Перемістити картку на верх списку", - "r-d-move-to-bottom-gen": "Перемістити картку на низ її списку", - "r-d-move-to-bottom-spec": "Перемістити картку на низ списку", + "r-uncheck": "Відхилити Обрання", + "r-item": "одиниця", + "r-of-checklist": "of checklist", + "r-send-email": "Send an email", + "r-to": "to", + "r-of": "of", + "r-subject": "Об'єкт", + "r-rule-details": "Rule details", + "r-d-move-to-top-gen": "Move card to top of its list", + "r-d-move-to-top-spec": "Move card to top of list", + "r-d-move-to-bottom-gen": "Move card to bottom of its list", + "r-d-move-to-bottom-spec": "Move card to bottom of list", "r-d-send-email": "Відправити email", - "r-d-send-email-to": "до", - "r-d-send-email-subject": "Тема", + "r-d-send-email-to": "to", + "r-d-send-email-subject": "Об'єкт", "r-d-send-email-message": "повідомлення", - "r-d-archive": "Перемістити картку до архіву", - "r-d-unarchive": "Відновити картку з архіву", - "r-d-add-label": "Додати мітку", + "r-d-archive": "Перенести Картку до Архиву", + "r-d-unarchive": "Відновити Картку з Архіву", + "r-d-add-label": "Додатку мітку", "r-d-remove-label": "Видалити мітку", "r-create-card": "Створити нову картку", - "r-in-list": "у списку", - "r-in-swimlane": "у свімлейні", - "r-d-add-member": "Додати учасника", - "r-d-remove-member": "Видалити учасника", + "r-in-list": "в переліку", + "r-in-swimlane": "in swimlane", + "r-d-add-member": "Додати користувача", + "r-d-remove-member": "Видалити користувача", "r-d-remove-all-member": "Видалити всіх учасників", - "r-d-check-all": "Відмітити всі елементи списку", - "r-d-uncheck-all": "Скасувати відмітки всіх елементів списку", - "r-d-check-one": "Відмітити елемент", - "r-d-uncheck-one": "Скасувати відмітку елемента", - "r-d-check-of-list": "контрольного списку", - "r-d-add-checklist": "Додати контрольний список", - "r-d-remove-checklist": "Видалити контрольний список", - "r-by": "від", - "r-add-checklist": "Додати контрольний список", - "r-with-items": "з елементами", - "r-items-list": "елемент1,елемент2,елемент3", - "r-add-swimlane": "Додати свімлейн", - "r-swimlane-name": "назва свімлейна", - "r-board-note": "Примітка: залиште поле порожнім, щоб відповідати будь-якому можливому значенню", - "r-checklist-note": "Примітка: елементи контрольного списку повинні бути записані через кому.", - "r-when-a-card-is-moved": "Коли картка переміщена в інший список", - "r-set": "Встановити", + "r-d-check-all": "Check all items of a list", + "r-d-uncheck-all": "Uncheck all items of a list", + "r-d-check-one": "Check item", + "r-d-uncheck-one": "Uncheck item", + "r-d-check-of-list": "of checklist", + "r-d-add-checklist": "Add checklist", + "r-d-remove-checklist": "Remove checklist", + "r-by": "by", + "r-add-checklist": "Add checklist", + "r-with-items": "with items", + "r-items-list": "item1,item2,item3", + "r-add-swimlane": "Add swimlane", + "r-swimlane-name": "swimlane name", + "r-board-note": "Примітка: залиште поле пустим, щоб відповідати кожному можливому значенню ", + "r-checklist-note": "Note: checklist's items have to be written as comma separated values.", + "r-when-a-card-is-moved": "When a card is moved to another list", + "r-set": "Set", "r-update": "Оновити", - "r-datefield": "поле дати", + "r-datefield": "поле для дати", "r-df-start-at": "початок", - "r-df-due-at": "термін", + "r-df-due-at": "до", "r-df-end-at": "кінець", "r-df-received-at": "отримано", - "r-to-current-datetime": "до поточної дати/часу", - "r-remove-value-from": "Видалити значення з", - "r-link-card": "Зв'язати картку з", + "r-to-current-datetime": "to current date/time", + "r-remove-value-from": "Remove value from", + "r-link-card": "Link card to", "ldap": "LDAP", "oauth2": "OAuth2", "cas": "CAS", - "authentication-method": "метод автентифікації", - "authentication-type": "тип автентифікації", - "custom-product-name": "Назва спеціального продукту", - "layout": "Макет", - "hide-logo": "Сховати логотип", - "hide-card-counter-list": "Сховати лічильник карток на Всіх дошках", - "hide-board-member-list": "Сховати список учасників дошки на Всіх дошках", - "add-custom-html-after-body-start": "Додати спеціальний HTML після початку <body>", - "add-custom-html-before-body-end": "Додати спеціальний HTML перед кінцем </body>", - "error-undefined": "Щось пішло не так", - "error-ldap-login": "Помилка під час спроби входу", - "display-authentication-method": "Показати метод автентифікації", - "oidc-button-text": "Налаштувати текст кнопки OIDC", - "default-authentication-method": "Стандартний метод автентифікації", - "duplicate-board": "Дублювати дошку", - "org-number": "Кількість організацій:", - "team-number": "Кількість команд:", - "people-number": "Кількість людей:", - "swimlaneDeletePopup-title": "Видалити свімлейн?", - "swimlane-delete-pop": "Всі дії будуть видалені з журналу активності, і ви не зможете відновити свімлейн. Немає можливості відмінити.", + "authentication-method": "метод Автентифікації", + "authentication-type": "тип Автентифікації", + "custom-product-name": "Custom Product Name", + "layout": "Layout", + "hide-logo": "Hide Logo", + "hide-card-counter-list": "Hide card counter list on All Boards", + "hide-board-member-list": "Hide board member list on All Boards", + "add-custom-html-after-body-start": "Add Custom HTML after <body> start", + "add-custom-html-before-body-end": "Add Custom HTML before </body> end", + "error-undefined": "Something went wrong", + "error-ldap-login": "An error occurred while trying to login", + "display-authentication-method": "Display Authentication Method", + "oidc-button-text": "Customize the OIDC button text", + "default-authentication-method": "Default Authentication Method", + "duplicate-board": "Duplicate Board", + "org-number": "Число організацій:", + "team-number": "Число команд:", + "people-number": "Число людей:", + "swimlaneDeletePopup-title": "Delete Swimlane ?", + "swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.", "restore-all": "Відновити все", "delete-all": "Видалити все", - "loading": "Завантаження, будь ласка, зачекайте.", - "previous_as": "останній раз було", - "act-a-dueAt": "змінено час завершення на \nКоли: __timeValue__\nДе: __card__\n попередній термін був __timeOldValue__", - "act-a-endAt": "змінено час закінчення на __timeValue__ з (__timeOldValue__)", - "act-a-startAt": "змінено час початку на __timeValue__ з (__timeOldValue__)", - "act-a-receivedAt": "змінено час отримання на __timeValue__ з (__timeOldValue__)", - "a-dueAt": "змінено час завершення на", - "a-endAt": "змінено час закінчення на", - "a-startAt": "змінено час початку на", - "a-receivedAt": "змінено час отримання на", - "almostdue": "поточний час завершення %s наближається", - "pastdue": "поточний час завершення %s пройшов", - "duenow": "поточний час завершення %s сьогодні", - "act-newDue": "__list__/__card__ має перше нагадування про термін [__board__]", - "act-withDue": "__list__/__card__ нагадування про терміни [__board__]", - "act-almostdue": "нагадувало, що поточний термін (__timeValue__) __card__ наближається", - "act-pastdue": "нагадувало, що поточний термін (__timeValue__) __card__ пройшов", - "act-duenow": "нагадувало, що поточний термін (__timeValue__) __card__ зараз", - "act-atUserComment": "Вас згадали в [__board__] __list__/__card__", - "delete-user-confirm-popup": "Ви дійсно бажаєте видалити цей обліковий запис? Цю дію не можна скасувати.", - "delete-team-confirm-popup": "Ви впевнені, що хочете видалити цю команду? Немає можливості відмінити.", - "delete-org-confirm-popup": "Ви впевнені, що хочете видалити цю організацію? Немає можливості відмінити.", - "accounts-allowUserDelete": "Дозволити користувачам видаляти свої облікові записи", - "hide-minicard-label-text": "Сховати текст мітки міні-картки", - "show-desktop-drag-handles": "Показати ручки перетягування на робочому столі", - "assignee": "Виконавець", - "cardAssigneesPopup-title": "Виконавець", - "addmore-detail": "Додати більш детальний опис", - "show-on-card": "Показати на картці", - "show-on-minicard": "Показати на міні-картці", - "new": "Новий", - "editOrgPopup-title": "Редагувати організацію", - "newOrgPopup-title": "Нова організація", - "editTeamPopup-title": "Редагувати команду", - "newTeamPopup-title": "Нова команда", - "editUserPopup-title": "Редагувати користувача", - "newUserPopup-title": "Новий користувач", - "notifications": "Сповіщення", - "help": "Допомога", - "view-all": "Показати все", - "filter-by-unread": "Фільтрувати непрочитані", - "mark-all-as-read": "Позначити всі як прочитані", - "remove-all-read": "Видалити всі прочитані", - "allow-rename": "Дозволити перейменування", - "allowRenamePopup-title": "Дозволити перейменування", - "start-day-of-week": "Встановити день початку тижня", - "monday": "Понеділок", - "tuesday": "Вівторок", - "wednesday": "Середа", - "thursday": "Четвер", - "friday": "П'ятниця", - "saturday": "Субота", - "sunday": "Неділя", + "loading": "Завантаження, зачекайте будь-ласка.", + "previous_as": "last time was", + "act-a-dueAt": "modified due time to \nWhen: __timeValue__\nWhere: __card__\n previous due was __timeOldValue__", + "act-a-endAt": "modified ending time to __timeValue__ from (__timeOldValue__)", + "act-a-startAt": "modified starting time to __timeValue__ from (__timeOldValue__)", + "act-a-receivedAt": "modified received time to __timeValue__ from (__timeOldValue__)", + "a-dueAt": "modified due time to be", + "a-endAt": "modified ending time to be", + "a-startAt": "modified starting time to be", + "a-receivedAt": "modified received time to be", + "almostdue": "current due time %s is approaching", + "pastdue": "current due time %s is past", + "duenow": "current due time %s is today", + "act-newDue": "__list__/__card__ має 1-ше нагадування визначеного терміну [__board__]", + "act-withDue": "__list__/__card__ due reminders [__board__]", + "act-almostdue": "was reminding the current due (__timeValue__) of __card__ is approaching", + "act-pastdue": "was reminding the current due (__timeValue__) of __card__ is past", + "act-duenow": "was reminding the current due (__timeValue__) of __card__ is now", + "act-atUserComment": "Ви були згадані у [__board__] __list__/__card__", + "delete-user-confirm-popup": "Ви дійсно бажаєте видалити даний обліковий запис? Цю дію не можна відмінити.", + "delete-team-confirm-popup": "Are you sure you want to delete this team? There is no undo.", + "delete-org-confirm-popup": "Are you sure you want to delete this organization? There is no undo.", + "accounts-allowUserDelete": "Дозволити користувачам видаляти їх власні облікові записи", + "hide-minicard-label-text": "Hide minicard label text", + "show-desktop-drag-handles": "Show desktop drag handles", + "assignee": "Assignee", + "cardAssigneesPopup-title": "Assignee", + "addmore-detail": "Add a more detailed description", + "show-on-card": "Show on Card", + "show-on-minicard": "Show on Minicard", + "new": "New", + "editOrgPopup-title": "Edit Organization", + "newOrgPopup-title": "New Organization", + "editTeamPopup-title": "Edit Team", + "newTeamPopup-title": "New Team", + "editUserPopup-title": "Edit User", + "newUserPopup-title": "New User", + "notifications": "Notifications", + "help": "Help", + "view-all": "View All", + "filter-by-unread": "Filter by Unread", + "mark-all-as-read": "Mark all as read", + "remove-all-read": "Remove all read", + "allow-rename": "Allow Rename", + "allowRenamePopup-title": "Allow Rename", + "start-day-of-week": "Set day of the week start", + "monday": "Monday", + "tuesday": "Tuesday", + "wednesday": "Wednesday", + "thursday": "Thursday", + "friday": "Friday", + "saturday": "Saturday", + "sunday": "Sunday", "status": "Статус", - "swimlane": "Лінія", + "swimlane": "Swimlane", "owner": "Власник", "last-modified-at": "Востаннє змінено", "last-activity": "Остання активність", "voting": "Голосування", "archived": "Архівовано", - "delete-linked-card-before-this-card": "Ви не можете видалити цю картку, поки не видалите пов'язану картку, яка має", - "delete-linked-cards-before-this-list": "Ви не можете видалити цей список, поки не видалите пов'язані картки, які вказують на картки в цьому списку", - "hide-checked-items": "Сховати відмічені елементи", - "hide-finished-checklist": "Сховати виконані контрольні списки", - "task": "Завдання", - "create-task": "Створити завдання", + "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", + "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", + "hide-checked-items": "Сховати обрані елементи", + "task": "Task", + "create-task": "Create Task", "ok": "OK", - "organizations": "Організації", - "teams": "Команди", - "displayName": "Відображене Ім'я", - "shortName": "Коротке Ім'я", - "autoAddUsersWithDomainName": "Автоматично додавати користувачів з доменним ім'ям", - "website": "Веб-сайт", - "person": "Особа", - "my-cards": "Мої картки", + "organizations": "Organizations", + "teams": "Teams", + "displayName": "Display Name", + "shortName": "Short Name", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", + "website": "Website", + "person": "Person", + "my-cards": "My Cards", "card": "Картка", - "list": "Список", - "board": "Дошка", + "list": "List", + "board": "Board", "context-separator": "/", - "myCardsViewChange-title": "Мій Погляд на Картки", - "myCardsViewChangePopup-title": "Мій Погляд на Картки", + "myCardsViewChange-title": "My Cards View", + "myCardsViewChangePopup-title": "My Cards View", "myCardsViewChange-choice-boards": "Дошки", - "myCardsViewChange-choice-table": "Таблиця", - "myCardsSortChange-title": "Моє Сортування Карток", - "myCardsSortChangePopup-title": "Моє Сортування Карток", - "myCardsSortChange-choice-board": "По Дошці", - "myCardsSortChange-choice-dueat": "По Терміну", - "dueCards-title": "Картки за Терміном", - "dueCardsViewChange-title": "Вид Карток за Терміном", - "dueCardsViewChangePopup-title": "Вид Карток за Терміном", - "dueCardsViewChange-choice-me": "Я", - "dueCardsViewChange-choice-all": "Усі Користувачі", - "dueCardsViewChange-choice-all-description": "Показує всі незавершені картки з датою Термін з дошок, для яких користувач має дозвіл.", - "broken-cards": "Пошкоджені Картки", - "board-title-not-found": "Дошку '%s' не знайдено.", - "swimlane-title-not-found": "Лінію '%s' не знайдено.", - "list-title-not-found": "Список '%s' не знайдено.", - "label-not-found": "Мітку '%s' не знайдено.", - "label-color-not-found": "Колір мітки %s не знайдено.", - "user-username-not-found": "Ім'я користувача '%s' не знайдено.", - "comment-not-found": "Картку з коментарем, що містить текст '%s', не знайдено.", - "org-name-not-found": "Організацію '%s' не знайдено.", - "team-name-not-found": "Команду '%s' не знайдено.", - "globalSearch-title": "Пошук по всіх дошках", - "no-cards-found": "Картки не знайдено", - "one-card-found": "Знайдено одну картку", - "n-cards-found": "Знайдено %s карток", - "n-n-of-n-cards-found": "start-end з total Карток знайдено", - "operator-board": "дошка", - "operator-board-abbrev": "д", - "operator-swimlane": "лінія", - "operator-swimlane-abbrev": "л", - "operator-list": "список", - "operator-list-abbrev": "с", - "operator-label": "мітка", + "myCardsViewChange-choice-table": "Table", + "myCardsSortChange-title": "My Cards Sort", + "myCardsSortChangePopup-title": "My Cards Sort", + "myCardsSortChange-choice-board": "By Board", + "myCardsSortChange-choice-dueat": "By Due Date", + "dueCards-title": "Due Cards", + "dueCardsViewChange-title": "Due Cards View", + "dueCardsViewChangePopup-title": "Due Cards View", + "dueCardsViewChange-choice-me": "Me", + "dueCardsViewChange-choice-all": "All Users", + "dueCardsViewChange-choice-all-description": "Shows all incomplete cards with a *Due* date from boards for which the user has permission.", + "broken-cards": "Broken Cards", + "board-title-not-found": "Board '%s' not found.", + "swimlane-title-not-found": "Swimlane '%s' not found.", + "list-title-not-found": "List '%s' not found.", + "label-not-found": "Label '%s' not found.", + "label-color-not-found": "Label color %s not found.", + "user-username-not-found": "Username '%s' not found.", + "comment-not-found": "Card with comment containing text '%s' not found.", + "org-name-not-found": "Organization '%s' not found.", + "team-name-not-found": "Team '%s' not found.", + "globalSearch-title": "Search All Boards", + "no-cards-found": "No Cards Found", + "one-card-found": "One Card Found", + "n-cards-found": "%s Cards Found", + "n-n-of-n-cards-found": "__start__-__end__ of __total__ Cards Found", + "operator-board": "board", + "operator-board-abbrev": "b", + "operator-swimlane": "swimlane", + "operator-swimlane-abbrev": "s", + "operator-list": "list", + "operator-list-abbrev": "l", + "operator-label": "label", "operator-label-abbrev": "#", - "operator-user": "користувач", + "operator-user": "user", "operator-user-abbrev": "@", "operator-member": "Користувач", - "operator-member-abbrev": "м", - "operator-assignee": "виконавець", - "operator-assignee-abbrev": "в", - "operator-creator": "автор", - "operator-status": "статус", + "operator-member-abbrev": "m", + "operator-assignee": "assignee", + "operator-assignee-abbrev": "a", + "operator-creator": "creator", + "operator-status": "status", "operator-due": "до", - "operator-created": "створено", - "operator-modified": "змінено", - "operator-sort": "сортувати", - "operator-comment": "коментар", - "operator-has": "має", - "operator-limit": "обмеження", - "operator-debug": "налагодження", - "operator-org": "орг", - "operator-team": "команда", - "predicate-archived": "архівовано", - "predicate-open": "відкрито", - "predicate-ended": "завершено", - "predicate-all": "всі", - "predicate-overdue": "прострочено", - "predicate-week": "тиждень", - "predicate-month": "місяць", - "predicate-quarter": "квартал", - "predicate-year": "рік", + "operator-created": "created", + "operator-modified": "modified", + "operator-sort": "sort", + "operator-comment": "comment", + "operator-has": "has", + "operator-limit": "limit", + "operator-debug": "debug", + "operator-org": "org", + "operator-team": "team", + "predicate-archived": "archived", + "predicate-open": "open", + "predicate-ended": "ended", + "predicate-all": "all", + "predicate-overdue": "overdue", + "predicate-week": "week", + "predicate-month": "month", + "predicate-quarter": "quarter", + "predicate-year": "year", "predicate-due": "до", - "predicate-modified": "змінено", - "predicate-created": "створено", - "predicate-attachment": "вкладення", - "predicate-description": "опис", - "predicate-checklist": "чеклист", + "predicate-modified": "modified", + "predicate-created": "created", + "predicate-attachment": "attachment", + "predicate-description": "description", + "predicate-checklist": "checklist", "predicate-start": "початок", "predicate-end": "кінець", - "predicate-assignee": "виконавець", + "predicate-assignee": "assignee", "predicate-member": "Користувач", - "predicate-public": "публічний", - "predicate-private": "приватний", - "predicate-selector": "селектор", - "predicate-projection": "проекція", - "operator-unknown-error": "%s не є оператором", - "operator-number-expected": "оператор operator очікував число, отримано 'value'", - "operator-sort-invalid": "сортування '%s' є недійсним", - "operator-status-invalid": "'%s' не є допустимим статусом", - "operator-has-invalid": "%s не є дійсною перевіркою існування", - "operator-limit-invalid": "%s не є дійсним обмеженням. Обмеження повинно бути додатнім цілим числом.", - "operator-debug-invalid": "%s не є дійсною налагоджувальною пропозицією", - "next-page": "Наступна сторінка", - "previous-page": "Попередня сторінка", - "heading-notes": "Нотатки", - "globalSearch-instructions-heading": "Інструкції пошуку", - "globalSearch-instructions-description": "Пошук може містити оператори для уточнення пошуку. Оператори вказуються шляхом запису назви оператора та значення, розділеного двокрапкою. Наприклад, специфікація оператора список:Заблоковано обмежить пошук карток, що містяться у списку з назвою Заблоковано. Якщо значення містить пробіли або спеціальні символи, воно повинно бути укладено в подвійні лапки (наприклад, список:\"На розгляд\").", - "globalSearch-instructions-operators": "Доступні оператори:", - "globalSearch-instructions-operator-board": "дошка:<назва> - картки на дошках, що відповідають вказаній <назві>", - "globalSearch-instructions-operator-list": "список:<назва> - картки у списках, що відповідають вказаній <назві>", - "globalSearch-instructions-operator-swimlane": "лінія:<назва> - картки в лініях, що відповідають вказаній <назві>", - "globalSearch-instructions-operator-comment": "коментар:<текст> - картки з коментарем, що містить <текст>.", - "globalSearch-instructions-operator-label": "мітка:<колір> мітка:<назва> - картки, які мають мітку, що відповідає <коліру> або <назві>", - "globalSearch-instructions-operator-hash": "#<назва|колір> - скорочення для мітка:<колір> або мітка:<назва>", - "globalSearch-instructions-operator-user": "користувач:<ім'я_користувача> - картки, де <ім'я_користувача> є членом або виконавцем", - "globalSearch-instructions-operator-at": "@<ім'я_користувача> - скорочення для користувач:<ім'я_користувача>", - "globalSearch-instructions-operator-member": "Користувач:<ім'я_користувача> - картки, де <ім'я_користувача> є членом", - "globalSearch-instructions-operator-assignee": "виконавець:<ім'я_користувача> - картки, де <ім'я_користувача> є виконавцем", - "globalSearch-instructions-operator-creator": "автор:<ім'я_користувача> - картки, де <ім'я_користувача> є автором картки", - "globalSearch-instructions-operator-org": "орг:<відображене_ім'я|коротке_ім'я> - картки, що належать до дошки, призначеної організації <назва>", - "globalSearch-instructions-operator-team": "команда:<відображене_ім'я|коротке_ім'я> - картки, що належать до дошки, призначеної команді <назва>", - "globalSearch-instructions-operator-due": "до:<n> - картки, які повинні бути виконані протягом <n> днів відтепер. до:прострочено перелічує всі картки, що минули свій термін виконання.", - "globalSearch-instructions-operator-created": "створено:<n> - картки, які були створені <n> днів тому або менше", - "globalSearch-instructions-operator-modified": "змінено:<n> - картки, які були змінені <n> днів тому або менше", - "globalSearch-instructions-operator-status": "статус:<статус> - де <статус> один із наступних:", - "globalSearch-instructions-status-archived": "архівовано - архівовані картки", - "globalSearch-instructions-status-all": "всі - всі архівовані та неархівовані картки", - "globalSearch-instructions-status-ended": "завершено - картки з кінцевою датою", - "globalSearch-instructions-status-public": "публічний - картки лише на публічних дошках", - "globalSearch-instructions-status-private": "приватний - картки лише на приватних дошках", - "globalSearch-instructions-operator-has": "має:<поле> - де <поле> одне з вкладення, чеклист, опис, початок, до, кінець, виконавець або член. Поставивши - перед <полем>, ви шукаєте картки без значення у цьому полі (наприклад, має:-до шукає картки без терміну виконання).", - "globalSearch-instructions-operator-sort": "сортування:<назва_сортування> - де <назва_сортування> одна з до, створено або змінено. Для сортування за зменшенням, перед назвою сортування поставте -.", - "globalSearch-instructions-operator-limit": "обмеження:<n> - де <n> - це додатне ціле число, що виражає кількість карток, які будуть відображені на сторінці.", - "globalSearch-instructions-notes-1": "Можна вказати кілька операторів.", - "globalSearch-instructions-notes-2": "Подібні оператори додаються ORразом. Повертаються картки, які відповідають будь-яким умовам.\nсписок:Доступно список:Заблоковано поверне картки, що містяться в будь-якому списку з назвою Доступно або Заблоковано.", - "globalSearch-instructions-notes-3": "Відмінні оператори додаються ANDразом. Повертаються лише картки, що відповідають усім відмінним операторам. список:Доступно мітка:червоний повертає лише картки у списку Доступно з червоною міткою.", - "globalSearch-instructions-notes-3-2": "Дні можна вказати як додатне або від'ємне ціле число або використовуючи тиждень, місяць, квартал або рік для поточного періоду.", - "globalSearch-instructions-notes-4": "Пошук тексту нечутливий до регістру.", - "globalSearch-instructions-notes-5": "За замовчуванням не архівуються картки.", - "link-to-search": "Посилання на цей пошук", + "predicate-public": "public", + "predicate-private": "private", + "predicate-selector": "selector", + "predicate-projection": "projection", + "operator-unknown-error": "%s is not an operator", + "operator-number-expected": "operator __operator__ expected a number, got '__value__'", + "operator-sort-invalid": "sort of '%s' is invalid", + "operator-status-invalid": "'%s' is not a valid status", + "operator-has-invalid": "%s is not a valid existence check", + "operator-limit-invalid": "%s is not a valid limit. Limit should be a positive integer.", + "operator-debug-invalid": "%s is not a valid debug predicate", + "next-page": "Next Page", + "previous-page": "Previous Page", + "heading-notes": "Notes", + "globalSearch-instructions-heading": "Search Instructions", + "globalSearch-instructions-description": "Searches can include operators to refine the search. Operators are specified by writing the operator name and value separated by a colon. For example, an operator specification of `list:Blocked` would limit the search to cards that are contained in a list named *Blocked*. If the value contains spaces or special characters it must be enclosed in quotation marks (e.g. `__operator_list__:\"To Review\"`).", + "globalSearch-instructions-operators": "Available operators:", + "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - cards in boards matching the specified *<title>*", + "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - cards in lists matching the specified *<title>*", + "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - cards in swimlanes matching the specified *<title>*", + "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - cards with a comment containing *<text>*.", + "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - cards that have a label matching *<color>* or *<name>", + "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - shorthand for `__operator_label__:<color>` or `__operator_label__:<name>`", + "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", + "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", + "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", + "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", + "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", + "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", + "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", + "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", + "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", + "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", + "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", + "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", + "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", + "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", + "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", + "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", + "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", + "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", + "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", + "globalSearch-instructions-notes-1": "Multiple operators may be specified.", + "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", + "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", + "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", + "globalSearch-instructions-notes-4": "Text searches are case insensitive.", + "globalSearch-instructions-notes-5": "By default archived cards are not searched.", + "link-to-search": "Link to this search", "excel-font": "Arial", "number": "Номер", - "label-colors": "Кольори міток", - "label-names": "Назви міток", - "archived-at": "заархівовано", - "sort-cards": "Сортування карток", + "label-colors": "Label Colors", + "label-names": "Label Names", + "archived-at": "archived at", + "sort-cards": "Sort Cards", "sort-is-on": "Сортування увімкнене", - "cardsSortPopup-title": "Сортування карток", - "due-date": "Термін виконання", - "server-error": "Помилка сервера", - "server-error-troubleshooting": "Будь ласка, надішліть помилку, що виникла на сервері.\nДля встановлення через Snap, виконайте: `sudo snap logs wekan.wekan`\nДля встановлення через Docker, виконайте: `sudo docker logs wekan-app`", - "title-alphabetically": "Назва (за алфавітом)", - "created-at-newest-first": "Створено (спочатку найновіші)", - "created-at-oldest-first": "Створено (спочатку найстаріші)", - "links-heading": "Посилання", - "hide-activities-of-all-boards": "Не показуйте дії дошки на всіх дошках", - "now-activities-of-all-boards-are-hidden": "Тепер усі дії всіх дощок приховані", - "move-swimlane": "Перемістити лінію плавання", - "moveSwimlanePopup-title": "Перемістити лінію плавання", - "custom-field-stringtemplate": "Строковий шаблон", - "custom-field-stringtemplate-format": "Формат (використовуйте %{value} як заповнювач)", - "custom-field-stringtemplate-separator": "Роздільник (використовуйте або для пробілу)", - "custom-field-stringtemplate-item-placeholder": "Натисніть Enter, щоб додати ще елементи", - "creator": "Автор", - "creator-on-minicard": "Автор на міні-картці", - "filesReportTitle": "Звіт про файли", - "reports": "Звіти", - "rulesReportTitle": "Звіт про правила", - "boardsReportTitle": "Звіт про дошки", - "cardsReportTitle": "Звіт про картки", - "copy-swimlane": "Копіювати лінію плавання", - "copySwimlanePopup-title": "Копіювати лінію плавання", - "display-card-creator": "Показати автора картки", - "wait-spinner": "Обертовий маркер очікування", - "Bounce": "Обертовий маркер очікування (Bounce)", - "Cube": "Обертовий маркер очікування (Cube)", - "Cube-Grid": "Обертовий маркер очікування (Cube-Grid)", - "Dot": "Обертовий маркер очікування (Dot)", - "Double-Bounce": "Обертовий маркер очікування (Double Bounce)", - "Rotateplane": "Обертовий маркер очікування (Rotateplane)", - "Scaleout": "Обертовий маркер очікування (Scaleout)", - "Wave": "Обертовий маркер очікування (Wave)", - "maximize-card": "Збільшити картку", - "minimize-card": "Зменшити картку", - "delete-org-warning-message": "Не можливо видалити цю організацію, є принаймні один користувач, який до неї належить", - "delete-team-warning-message": "Не можливо видалити цю команду, є принаймні один користувач, який до неї належить", - "subject": "Тема", - "details": "Деталі", - "carbon-copy": "Копія (Cc:)", - "ticket": "Заявка", - "tickets": "Заявки", - "ticket-number": "Номер заявки", - "open": "Відкрита", - "pending": "В очікуванні", - "closed": "Закрита", - "resolved": "Вирішена", - "cancelled": "Скасована", - "history": "Історія", - "request": "Запит", - "requests": "Запити", - "help-request": "Запит на допомогу", - "editCardSortOrderPopup-title": "Змінити порядок сортування", - "cardDetailsPopup-title": "Деталі картки", - "add-teams": "Додати команди", - "add-teams-label": "Додані команди відображаються нижче:", - "remove-team-from-table": "Ви впевнені, що хочете видалити цю команду з дошки?", - "confirm-btn": "Підтвердити", + "cardsSortPopup-title": "Sort Cards", + "due-date": "Due Date", + "server-error": "Server Error", + "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", + "title-alphabetically": "Title (Alphabetically)", + "created-at-newest-first": "Created At (Newest First)", + "created-at-oldest-first": "Created At (Oldest First)", + "links-heading": "Links", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", + "move-swimlane": "Move Swimlane", + "moveSwimlanePopup-title": "Move Swimlane", + "custom-field-stringtemplate": "String Template", + "custom-field-stringtemplate-format": "Format (use %{value} as placeholder)", + "custom-field-stringtemplate-separator": "Separator (use or   for a space)", + "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", + "creator": "Creator", + "filesReportTitle": "Files Report", + "reports": "Reports", + "rulesReportTitle": "Rules Report", + "boardsReportTitle": "Boards Report", + "cardsReportTitle": "Cards Report", + "copy-swimlane": "Copy Swimlane", + "copySwimlanePopup-title": "Copy Swimlane", + "display-card-creator": "Display Card Creator", + "wait-spinner": "Wait Spinner", + "Bounce": "Bounce Wait Spinner", + "Cube": "Cube Wait Spinner", + "Cube-Grid": "Cube-Grid Wait Spinner", + "Dot": "Dot Wait Spinner", + "Double-Bounce": "Double Bounce Wait Spinner", + "Rotateplane": "Rotateplane Wait Spinner", + "Scaleout": "Scaleout Wait Spinner", + "Wave": "Wave Wait Spinner", + "maximize-card": "Maximize Card", + "minimize-card": "Minimize Card", + "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", + "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", + "subject": "Subject", + "details": "Details", + "carbon-copy": "Carbon Copy (Cc:)", + "ticket": "Ticket", + "tickets": "Tickets", + "ticket-number": "Ticket Number", + "open": "Open", + "pending": "Pending", + "closed": "Closed", + "resolved": "Resolved", + "cancelled": "Cancelled", + "history": "History", + "request": "Request", + "requests": "Requests", + "help-request": "Help Request", + "editCardSortOrderPopup-title": "Change Sorting", + "cardDetailsPopup-title": "Card Details", + "add-teams": "Add teams", + "add-teams-label": "Added teams are displayed below:", + "remove-team-from-table": "Are you sure you want to remove this team from the board ?", + "confirm-btn": "Confirm", "remove-btn": "Видалити", - "filter-card-title-label": "Фільтрувати за назвою картки", - "invite-people-success": "Запрошення на реєстрацію надіслано успішно", - "invite-people-error": "Помилка під час надсилання запрошення на реєстрацію", - "can-invite-if-same-mailDomainName": "Домен електронної пошти", - "to-create-teams-contact-admin": "Для створення команд зв'яжіться з адміністратором.", - "Node_heap_total_heap_size": "Пам'ять кучі Node: загальний розмір кучі", - "Node_heap_total_heap_size_executable": "Пам'ять кучі Node: загальний розмір виконуваного файлу кучі", - "Node_heap_total_physical_size": "Пам'ять кучі Node: загальний фізичний розмір", - "Node_heap_total_available_size": "Пам'ять кучі Node: загальний доступний розмір", - "Node_heap_used_heap_size": "Пам'ять кучі Node: використаний розмір кучі", - "Node_heap_heap_size_limit": "Пам'ять кучі Node: обмеження розміру кучі", - "Node_heap_malloced_memory": "Пам'ять кучі Node: видалена пам'ять", - "Node_heap_peak_malloced_memory": "Пам'ять кучі Node: пікова видалена пам'ять", - "Node_heap_does_zap_garbage": "Пам'ять кучі Node: зміни гарбиж-коллектора", - "Node_heap_number_of_native_contexts": "Пам'ять кучі Node: кількість контекстів Native", - "Node_heap_number_of_detached_contexts": "Пам'ять кучі Node: кількість відокремлених контекстів", - "Node_memory_usage_rss": "Використання пам'яті Node: резидентний розмір набору", - "Node_memory_usage_heap_total": "Використання пам'яті Node: загальний розмір виділеної кучі", - "Node_memory_usage_heap_used": "Використання пам'яті Node: фактично використана пам'ять", - "Node_memory_usage_external": "Використання пам'яті Node: зовнішня", - "add-organizations": "Додати організації", - "add-organizations-label": "Додані організації відображаються нижче:", - "remove-organization-from-board": "Ви впевнені, що хочете видалити цю організацію з цієї дошки?", - "to-create-organizations-contact-admin": "Для створення організацій, будь ласка, зв'яжіться з адміністратором.", - "custom-legal-notice-link-url": "URL сторінки зі спеціальним юридичним повідомленням", - "acceptance_of_our_legalNotice": "Продовжуючи, ви приймаєте наше", - "legalNotice": "юридичне повідомлення", - "copied": "Скопійовано!", - "checklistActionsPopup-title": "Дії з чек-листом", - "moveChecklist": "Перемістити чек-лист", - "moveChecklistPopup-title": "Переміщення чек-листу", - "newlineBecomesNewChecklistItem": "Кожен рядок тексту стає одним із пунктів контрольного списку", - "newLineNewItem": "Один рядок тексту = один пункт контрольного списку", - "newlineBecomesNewChecklistItemOriginOrder": "Кожен рядок тексту стає одним із пунктів контрольного списку, в оригінальному порядку", - "originOrder": "оригінальний порядок", - "copyChecklist": "Скопіювати чек-лист", - "copyChecklistPopup-title": "Копіювання чек-листу", - "card-show-lists": "Карта Показ списків", - "subtaskActionsPopup-title": "Дії з підзавданнями", - "attachmentActionsPopup-title": "Дії з вкладеннями", - "attachment-move-storage-fs": "Перемістити вкладення в файлову систему", - "attachment-move-storage-gridfs": "Перемістити вкладення в GridFS", - "attachment-move-storage-s3": "Перемістити вкладення в S3", - "attachment-move": "Перемістити вкладення", - "move-all-attachments-to-fs": "Перемістити всі вкладення в файлову систему", - "move-all-attachments-to-gridfs": "Перемістити всі вкладення в GridFS", - "move-all-attachments-to-s3": "Перемістити всі вкладення в S3", - "move-all-attachments-of-board-to-fs": "Перемістити всі вкладення дошки в файлову систему", - "move-all-attachments-of-board-to-gridfs": "Перемістити всі вкладення дошки в GridFS", - "move-all-attachments-of-board-to-s3": "Перемістити всі вкладення дошки в S3", - "path": "Шлях", - "version-name": "Назва версії", - "size": "Розмір", - "storage": "Сховище", - "action": "Дія", - "board-title": "Назва дошки", - "attachmentRenamePopup-title": "Перейменувати вкладення", - "uploading": "Завантаження", - "remaining_time": "Залишилось часу", - "speed": "Швидкість", - "progress": "Прогрес", - "password-again": "Пароль (ще раз)", - "if-you-already-have-an-account": "Якщо у вас вже є обліковий запис", - "register": "Реєстрація", - "forgot-password": "Забули пароль", - "minicardDetailsActionsPopup-title": "Дії з міні-карткою", - "Mongo_sessions_count": "Кількість сесій MongoDB", - "change-visibility": "Змінити видимість", - "max-upload-filesize": "Максимальний розмір файлу для завантаження (у байтах)", - "allowed-upload-filetypes": "Дозволені типи файлів для завантаження:", - "max-avatar-filesize": "Максимальний розмір аватара (у байтах):", + "filter-card-title-label": "Filter by card title", + "invite-people-success": "Invitation to register sent with success", + "invite-people-error": "Error while sending invitation to register", + "can-invite-if-same-mailDomainName": "Email domain name", + "to-create-teams-contact-admin": "To create teams, please contact the administrator.", + "Node_heap_total_heap_size": "Node heap: total heap size", + "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", + "Node_heap_total_physical_size": "Node heap: total physical size", + "Node_heap_total_available_size": "Node heap: total available size", + "Node_heap_used_heap_size": "Node heap: used heap size", + "Node_heap_heap_size_limit": "Node heap: heap size limit", + "Node_heap_malloced_memory": "Node heap: malloced memory", + "Node_heap_peak_malloced_memory": "Node heap: peak malloced memory", + "Node_heap_does_zap_garbage": "Node heap: does zap garbage", + "Node_heap_number_of_native_contexts": "Node heap: number of native contexts", + "Node_heap_number_of_detached_contexts": "Node heap: number of detached contexts", + "Node_memory_usage_rss": "Node memory usage: resident set size", + "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", + "Node_memory_usage_heap_used": "Node memory usage: actual memory used", + "Node_memory_usage_external": "Node memory usage: external", + "add-organizations": "Add organizations", + "add-organizations-label": "Added organizations are displayed below:", + "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", + "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", + "custom-legal-notice-link-url": "Custom legal notice page URL", + "acceptance_of_our_legalNotice": "By continuing, you accept our", + "legalNotice": "legal notice", + "copied": "Copied!", + "checklistActionsPopup-title": "Checklist Actions", + "moveChecklist": "Move Checklist", + "moveChecklistPopup-title": "Move Checklist", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", + "copyChecklist": "Copy Checklist", + "copyChecklistPopup-title": "Copy Checklist", + "card-show-lists": "Card Show Lists", + "subtaskActionsPopup-title": "Subtask Actions", + "attachmentActionsPopup-title": "Attachment Actions", + "attachment-move-storage-fs": "Move attachment to filesystem", + "attachment-move-storage-gridfs": "Move attachment to GridFS", + "attachment-move-storage-s3": "Move attachment to S3", + "attachment-move": "Move Attachment", + "move-all-attachments-to-fs": "Move all attachments to filesystem", + "move-all-attachments-to-gridfs": "Move all attachments to GridFS", + "move-all-attachments-to-s3": "Move all attachments to S3", + "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", + "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", + "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", + "path": "Path", + "version-name": "Version-Name", + "size": "Size", + "storage": "Storage", + "action": "Action", + "board-title": "Board Title", + "attachmentRenamePopup-title": "Перейменувати", + "uploading": "Uploading", + "remaining_time": "Remaining time", + "speed": "Speed", + "progress": "Progress", + "password-again": "Password (again)", + "if-you-already-have-an-account": "If you already have an account", + "register": "Register", + "forgot-password": "Forgot password", + "minicardDetailsActionsPopup-title": "Card Details", + "Mongo_sessions_count": "Mongo sessions count", + "change-visibility": "Change Visibility", + "max-upload-filesize": "Максимальний розмір завантаження у байтах", + "allowed-upload-filetypes": "Дозволені для завантаження типи файлів:", + "max-avatar-filesize": "Максимальний розмір аватара у байтах:", "allowed-avatar-filetypes": "Дозволені типи файлів для аватарів:", - "invalid-file": "Якщо ім'я файлу неправильне, завантаження або перейменування скасовується", - "preview-pdf-not-supported": "Попередній перегляд PDF не підтримується на вашому пристрої. Спробуйте завантажити файл", + "invalid-file": "Якщо назва файлу неправильна, завантаження або переіменування відміняється", + "preview-pdf-not-supported": "Ваш девайс не підтримує попередній перегляд PDF. Натомість, спробуйте завантажити файл", "drag-board": "Перетягнути дошку", - "translation-number": "Кількість рядків для перекладу:", - "delete-translation-confirm-popup": "Ви впевнені, що хочете видалити користувацький рядок перекладу? Цю дію не можна скасувати.", + "translation-number": "Кількість користувацьких рядків перекладу:", + "delete-translation-confirm-popup": "Ви впевнені, що ви хочете видалити користувацький рядок перекладу? Цю дію неможливо відмінити", "newTranslationPopup-title": "Новий користувацький рядок перекладу", - "editTranslationPopup-title": "Редагування користувацького рядка перекладу", - "settingsTranslationPopup-title": "Видалити користувацький рядок перекладу?", + "editTranslationPopup-title": "Редагувати користувацький рядок перекладу", + "settingsTranslationPopup-title": "Видалити користувацький рядок перекладу? ", "translation": "Переклад", "text": "Текст", "translation-text": "Перекласти текст", - "show-subtasks-field": "Показати поле підзавдань", - "show-week-of-year": "Показати тиждень року (ISO 8601)", - "convert-to-markdown": "Конвертувати в Markdown", - "import-board-zip": "Додати файл .zip, який містить файли JSON дошки та підкаталоги з назвами дошок і вкладеннями", - "collapse": "Згорнути", - "uncollapse": "Розгорнути", - "hideCheckedChecklistItems": "Приховати відмічені елементи чек-листа", - "hideAllChecklistItems": "Приховати всі пункти чек-листа", - "support": "Підтримка", - "supportPopup-title": "Підтримка", - "accessibility-page-enabled": "Увімкнено сторінку доступності", - "accessibility-title": "Тема доступності", - "accessibility-content": "Доступність контенту" + "show-at-minicard": "Показати на міні-карті ", + "show-checklist-at-minicard": "Показати чеклист на міні-картці", + "show-subtasks-field": "Показати поле підзадач", + "convert-to-markdown": "Конвертувати у markdown" } diff --git a/imports/i18n/data/uz-AR.i18n.json b/imports/i18n/data/uz-AR.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/uz-AR.i18n.json +++ b/imports/i18n/data/uz-AR.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/uz-LA.i18n.json b/imports/i18n/data/uz-LA.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/uz-LA.i18n.json +++ b/imports/i18n/data/uz-LA.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/uz-UZ.i18n.json b/imports/i18n/data/uz-UZ.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/uz-UZ.i18n.json +++ b/imports/i18n/data/uz-UZ.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/uz.i18n.json b/imports/i18n/data/uz.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/uz.i18n.json +++ b/imports/i18n/data/uz.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ve-CC.i18n.json b/imports/i18n/data/ve-CC.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/ve-CC.i18n.json +++ b/imports/i18n/data/ve-CC.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ve-PP.i18n.json b/imports/i18n/data/ve-PP.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/ve-PP.i18n.json +++ b/imports/i18n/data/ve-PP.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/ve.i18n.json b/imports/i18n/data/ve.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/ve.i18n.json +++ b/imports/i18n/data/ve.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/vi-VN.i18n.json b/imports/i18n/data/vi-VN.i18n.json index f9b4c798e..171be6969 100644 --- a/imports/i18n/data/vi-VN.i18n.json +++ b/imports/i18n/data/vi-VN.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "Tất cả các bảng", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Bộ lọc Nâng cao cho phép viết một chuỗi chứa các toán tử sau: == != <= >= && || ( ) Một khoảng trắng được sử dụng làm dấu phân cách giữa các Toán tử. Bạn có thể lọc tất cả các Trường tùy chỉnh bằng cách nhập tên và giá trị của chúng. Ví dụ: Field1 == Value1. Chú ý: Nếu các trường hoặc giá trị chứa khoảng trắng, bạn cần phải đóng gói chúng thành các dấu ngoặc kép. Ví dụ: 'Field 1' == 'Value 1'. Để bỏ qua các ký tự điều khiển đơn (' \\\\/) bạn có thể sử dụng \\\\. Ví dụ: Field1 == I\\\\'m. Ngoài ra bạn có thể kết hợp nhiều điều kiện. Ví dụ: F1 == V1 || F1 == V2. Thông thường tất cả các toán tử được giải thích từ trái sang phải. Bạn có thể thay đổi thứ tự bằng cách đặt dấu ngoặc. Ví dụ: F1 == V1 && ( F2 == V2 || F2 == V3 ). Ngoài ra, bạn có thể tìm kiếm các trường văn bản bằng cách sử dụng regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/vi.i18n.json b/imports/i18n/data/vi.i18n.json index b13110496..0d2b2a546 100644 --- a/imports/i18n/data/vi.i18n.json +++ b/imports/i18n/data/vi.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "đã chuyển %s đến Lưu trữ", "activity-attached": "đã đính kèm %s vào %s", "activity-created": "đã tạo %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "đã tạo trường tuỳ chỉnh %s", "activity-excluded": "đã loại bỏ %s khỏi %s", "activity-imported": "đã nạp %s vào %s từ %s", @@ -86,12 +85,10 @@ "add-card": "Thêm Thẻ", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -266,9 +263,6 @@ "checklists": "Danh sách việc cần hoàn thành", "click-to-star": "Bấm để gắn dấu sao bảng này.", "click-to-unstar": "Bấm để bỏ gắn bảng này.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard hoặc kéo và thả", "close": "Đóng", "close-board": "Đóng bảng", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Không đặt", - "comments": "Comments", "comment": "Bình luận", "comment-placeholder": "Viết Bình Luận", "comment-only": "Chỉ bình luận", @@ -383,7 +376,6 @@ "email-sent": "Đã gửi email", "email-verifyEmail-subject": "Xác minh địa chỉ email của bạn trên __siteName__", "email-verifyEmail-text": "Chào __user__,\n\nĐể xác minh email tài khoản của bạn, chỉ cần nhấp vào liên kết bên dưới.\n\n__url__\n\nCảm ơn.", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "Bật giới hạn WIP", "error-board-doesNotExist": "Bảng này không tồn tại", "error-board-notAdmin": "Bạn cần phải là quản trị viên của bảng này để làm điều đó", @@ -451,7 +443,7 @@ "advanced-filter-description": "Bộ lọc Nâng cao cho phép viết một chuỗi chứa các toán tử sau: == != <= >= && || ( ) Một khoảng trắng được sử dụng làm dấu phân cách giữa các Toán tử. Bạn có thể lọc tất cả các Trường tùy chỉnh bằng cách nhập tên và giá trị của chúng. Ví dụ: Field1 == Value1. Chú ý: Nếu các trường hoặc giá trị chứa khoảng trắng, bạn cần phải đóng gói chúng thành các dấu ngoặc kép. Ví dụ: 'Field 1' == 'Value 1'. Để bỏ qua các ký tự điều khiển đơn (' \\\\/) bạn có thể sử dụng \\\\. Ví dụ: Field1 == I\\\\'m. Ngoài ra bạn có thể kết hợp nhiều điều kiện. Ví dụ: F1 == V1 || F1 == V2. Thông thường tất cả các toán tử được giải thích từ trái sang phải. Bạn có thể thay đổi thứ tự bằng cách đặt dấu ngoặc. Ví dụ: F1 == V1 && ( F2 == V2 || F2 == V3 ). Ngoài ra, bạn có thể tìm kiếm các trường văn bản bằng cách sử dụng regex: F1 == /Tes.*/i", "fullname": "Họ và tên", "header-logo-title": "Quay lại trang bảng của bạn.", - "show-activities": "Show Activities", + "hide-system-messages": "Ẩn tin nhắn hệ thống", "headerBarCreateBoardPopup-title": "Tạo Bảng", "home": "Trang Chủ", "import": "Nhập khẩu", @@ -580,14 +572,12 @@ "select-board": "Chọn Bảng", "set-wip-limit-value": "Đặt giới hạn cho số lượng nhiệm vụ tối đa trong danh sách này", "setWipLimitPopup-title": "Đặt giới hạn WIP", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "Chỉ định bạn vào thẻ hiện tại", "shortcut-autocomplete-emoji": "Tự động điền biểu tượng cảm xúc", "shortcut-autocomplete-members": "Tự động điền Thành viên", "shortcut-clear-filters": "Xóa tất cả các bộ lọc", "shortcut-close-dialog": "Đóng hộp thoại", "shortcut-filter-my-cards": "Lọc thẻ của tôi", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Hiển thị danh sách phím tắt", "shortcut-toggle-filterbar": "Chuyển đổi Thanh bên Bộ lọc", "shortcut-toggle-searchbar": "Chuyển đổi Thanh bên Tìm kiếm", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Đã sử dụng thẻ thời gian", "time": "Thời gian", "title": "Tiêu đề", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Đang theo dõi", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "Bạn không thể xóa thẻ này trước khi xóa lần đầu tiên thẻ được liên kết có", "delete-linked-cards-before-this-list": "Bạn không thể xóa danh sách này trước khi xóa lần đầu tiên các thẻ được liên kết trỏ đến các thẻ trong danh sách này", "hide-checked-items": "Ẩn đã hoàn thành", - "hide-finished-checklist": "Hide finished checklist", "task": "Nhiệm vụ", "create-task": "Tạo Nhiệm Vụ", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Được tạo lúc (Mới nhất đầu tiên)", "created-at-oldest-first": "Được tạo lúc (Cũ nhất trước)", "links-heading": "Liên kết", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Ẩn thông báo hệ thống của tất cả người dùng", + "now-system-messages-of-all-users-are-hidden": "Bây giờ thông báo hệ thống của tất cả người dùng bị ẩn", "move-swimlane": "Di chuyển Làn ngang", "moveSwimlanePopup-title": "Di chuyển Làn ngang", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Dấu phân cách (sử dụng hoặc   cho một khoảng trắng)", "custom-field-stringtemplate-item-placeholder": "Nhấn enter để thêm các mục khác", "creator": "Người tạo", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Tệp báo cáo", "reports": "Báo cáo", "rulesReportTitle": "Quy tắc Báo cáo", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Văn bản", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Thu gọn", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/vl-SS.i18n.json b/imports/i18n/data/vl-SS.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/vl-SS.i18n.json +++ b/imports/i18n/data/vl-SS.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/vo.i18n.json b/imports/i18n/data/vo.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/vo.i18n.json +++ b/imports/i18n/data/vo.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/wa-RR.i18n.json b/imports/i18n/data/wa-RR.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/wa-RR.i18n.json +++ b/imports/i18n/data/wa-RR.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/wa.i18n.json b/imports/i18n/data/wa.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/wa.i18n.json +++ b/imports/i18n/data/wa.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/wo.i18n.json b/imports/i18n/data/wo.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/wo.i18n.json +++ b/imports/i18n/data/wo.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/xh.i18n.json b/imports/i18n/data/xh.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/xh.i18n.json +++ b/imports/i18n/data/xh.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/yi.i18n.json b/imports/i18n/data/yi.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/yi.i18n.json +++ b/imports/i18n/data/yi.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/yo.i18n.json b/imports/i18n/data/yo.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/yo.i18n.json +++ b/imports/i18n/data/yo.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/yue_CN.i18n.json b/imports/i18n/data/yue_CN.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/yue_CN.i18n.json +++ b/imports/i18n/data/yue_CN.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zgh.i18n.json b/imports/i18n/data/zgh.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/zgh.i18n.json +++ b/imports/i18n/data/zgh.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zh-CN.i18n.json b/imports/i18n/data/zh-CN.i18n.json index 238e15892..3ac828df6 100644 --- a/imports/i18n/data/zh-CN.i18n.json +++ b/imports/i18n/data/zh-CN.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s 已被移入归档", "activity-attached": "添加附件 %s 至 %s", "activity-created": "创建 %s", - "activity-changedListTitle": "重命名列表至%s", "activity-customfield-created": "创建了自定义字段 %s", "activity-excluded": "排除 %s 从 %s", "activity-imported": "导入 %s 至 %s 从 %s 中", @@ -86,12 +85,10 @@ "add-card": "添加卡片", "add-card-to-top-of-list": "添加卡片到列表顶部", "add-card-to-bottom-of-list": "添加卡片到列表底部", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "设置列表宽度", + "set-list-width": "设置列表宽度", + "set-list-width-value": "列表宽度(px)", + "list-width-error-message": "列表宽度需要设置数字类型", "setSwimlaneHeightPopup-title": "设置泳道高度", "set-swimlane-height": "设置泳道高度", "set-swimlane-height-value": "泳道高度(px)", @@ -266,9 +263,6 @@ "checklists": "清单", "click-to-star": "点此来标记该看板", "click-to-unstar": "点此来去除该看板的标记", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "剪贴板或者拖放文件", "close": "关闭", "close-board": "关闭看板", @@ -300,7 +294,6 @@ "color-white": "白", "color-yellow": "黄色", "unset-color": "复原", - "comments": "评论", "comment": "评论", "comment-placeholder": "添加评论", "comment-only": "仅能评论", @@ -383,7 +376,6 @@ "email-sent": "邮件已发送", "email-verifyEmail-subject": "在 __siteName__ 验证您的邮件地址", "email-verifyEmail-text": "尊敬的 __user__,\n\n点击下面的链接,验证您的邮件地址:\n\n__url__\n\n谢谢。", - "enable-vertical-scrollbars": "Enable vertical scrollbars", "enable-wip-limit": "启用最大任务数限制", "error-board-doesNotExist": "该看板不存在", "error-board-notAdmin": "需要成为管理员才能执行此操作", @@ -451,7 +443,7 @@ "advanced-filter-description": "高级过滤器可以使用包含如下操作符的字符串进行过滤:== != <= >= && || ( ) 。操作符之间用空格隔开。输入字段名和数值就可以过滤所有自定义字段。例如:Field1 == Value1。注意如果字段名或数值包含空格,需要用单引号。例如: 'Field 1' == 'Value 1'。要跳过单个控制字符(' \\\\/),请使用 \\\\ 转义字符。例如: Field1 = I\\\\'m。支持组合使用多个条件,例如: F1 == V1 || F1 == V2。通常以从左到右的顺序进行判断。可以通过括号修改顺序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支持使用正则表达式搜索文本字段。", "fullname": "全称", "header-logo-title": "返回您的看板页", - "show-activities": "显示活动", + "hide-system-messages": "隐藏系统消息", "headerBarCreateBoardPopup-title": "创建看板", "home": "首页", "import": "导入", @@ -580,14 +572,12 @@ "select-board": "选择看板", "set-wip-limit-value": "设置此列表中的最大任务数", "setWipLimitPopup-title": "设置最大任务数", - "shortcut-add-self": "Add yourself to current card", "shortcut-assign-self": "指派当前卡片给自己", "shortcut-autocomplete-emoji": "表情符号自动补全", "shortcut-autocomplete-members": "自动补全成员", "shortcut-clear-filters": "清空全部过滤器", "shortcut-close-dialog": "关闭对话框", "shortcut-filter-my-cards": "过滤我的卡片", - "shortcut-filter-my-assigned-cards": "过滤我分配的卡片", "shortcut-show-shortcuts": "显示此快捷键列表", "shortcut-toggle-filterbar": "切换过滤器边栏", "shortcut-toggle-searchbar": "切换查询边栏", @@ -610,7 +600,6 @@ "has-spenttime-cards": "耗时卡", "time": "时间", "title": "标题", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "切换卡片标签1-9,多选添加标签1-9", "remove-labels-multiselect": "多选移除标签1-9", "tracking": "跟踪", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "在你首次删除卡片前你无法删除此选项卡片", "delete-linked-cards-before-this-list": "在首先删除指向此列表中的卡的链接卡之前,不能删除此列表", "hide-checked-items": "隐藏选中项", - "hide-finished-checklist": "隐藏完成清单", "task": "任务", "create-task": "创建任务", "ok": "确认", @@ -974,7 +962,7 @@ "teams": "团队", "displayName": "显示名称", "shortName": "简称", - "autoAddUsersWithDomainName": "自动添加带域名的用户\n ", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "网站", "person": "人员", "my-cards": "我的卡片", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "创建时间(最新)", "created-at-oldest-first": "创建时间(最旧)", "links-heading": "链接", - "hide-activities-of-all-boards": "不要显示看板活动在所有看板", - "now-activities-of-all-boards-are-hidden": "现在所有板的所有活动都隐藏了", + "hide-system-messages-of-all-users": "对所有用户隐藏系统消息", + "now-system-messages-of-all-users-are-hidden": "系统消息已对所有用户隐藏。", "move-swimlane": "移动泳道", "moveSwimlanePopup-title": "移动泳道", "custom-field-stringtemplate": "字符串模板", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "分隔符(使用 或者   表示空格)", "custom-field-stringtemplate-item-placeholder": "按 enter 键添加更多项目", "creator": "创建者", - "creator-on-minicard": "迷你卡显示创建人", "filesReportTitle": "文件报告", "reports": "报告", "rulesReportTitle": "规则报告", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "清单操作", "moveChecklist": "移动待办清单", "moveChecklistPopup-title": "移动待办清单", - "newlineBecomesNewChecklistItem": "文本每行都变成一个清单条目", - "newLineNewItem": "一行文本=一个清单项", - "newlineBecomesNewChecklistItemOriginOrder": "清单文本每行都变成一个清单条目,保持排序", - "originOrder": "保持排序", + "newlineBecomesNewChecklistItem": "可换行来新增一个待办清单项", "copyChecklist": "复制待办清单", "copyChecklistPopup-title": "复制待办清单", "card-show-lists": "卡片显示列表", @@ -1256,17 +1240,8 @@ "translation": "翻译", "text": "文本", "translation-text": "翻译文本", + "show-at-minicard": "在小卡片上显示", + "show-checklist-at-minicard": "小卡片显示清单", "show-subtasks-field": "显示子任务字段", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "转换成markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "崩溃", - "uncollapse": "展开", - "hideCheckedChecklistItems": "隐藏勾选的清单项", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "转换成markdown" } diff --git a/imports/i18n/data/zh-GB.i18n.json b/imports/i18n/data/zh-GB.i18n.json index 8c1e2a4a8..f60c72eae 100644 --- a/imports/i18n/data/zh-GB.i18n.json +++ b/imports/i18n/data/zh-GB.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "高级过滤器可以使用包含如下操作符的字符串进行过滤:== != <= >= && || ( ) 。操作符之间用空格隔开。输入字段名和数值就可以过滤所有自定义字段。例如:Field1 == Value1。注意如果字段名或数值包含空格,需要用单引号。例如: 'Field 1' == 'Value 1'。要跳过单个控制字符(' \\\\/),请使用 \\\\ 转义字符。例如: Field1 = I\\\\'m。支持组合使用多个条件,例如: F1 == V1 || F1 == V2。通常以从左到右的顺序进行判断。可以通过括号修改顺序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支持使用正则表达式搜索文本字段。", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zh-HK.i18n.json b/imports/i18n/data/zh-HK.i18n.json index 22a0cb1e5..97acd957e 100644 --- a/imports/i18n/data/zh-HK.i18n.json +++ b/imports/i18n/data/zh-HK.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "高级过滤器可以使用包含如下操作符的字符串进行过滤:== != <= >= && || ( ) 。操作符之间用空格隔开。输入字段名和数值就可以过滤所有自定义字段。例如:Field1 == Value1。注意如果字段名或数值包含空格,需要用单引号。例如: 'Field 1' == 'Value 1'。要跳过单个控制字符(' \\\\/),请使用 \\\\ 转义字符。例如: Field1 = I\\\\'m。支持组合使用多个条件,例如: F1 == V1 || F1 == V2。通常以从左到右的顺序进行判断。可以通过括号修改顺序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支持使用正则表达式搜索文本字段。", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zh-Hans.i18n.json b/imports/i18n/data/zh-Hans.i18n.json index ccc880855..49e06f2dd 100644 --- a/imports/i18n/data/zh-Hans.i18n.json +++ b/imports/i18n/data/zh-Hans.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "進階篩選可以使用包含如下運算子的字串進行過濾:== != <= >= && || ( ) 。運算子之間用空格隔開。輸入文字和數值就可以過濾所有自訂內容。例如:Field1 == Value1。注意:如果內容或數值包含空格,需要用單引號。例如: 'Field 1' == 'Value 1'。要跳過單個控制字元(' \\\\/),請使用 \\\\ 跳脫字元。例如: Field1 = I\\\\'m。支援組合使用多個條件,例如: F1 == V1 || F1 == V2。通常以從左到右的順序進行判斷。可以透過括號修改順序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支援使用 正規表示式 (Regex) 搜尋內容。", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "创建看板", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "文本", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zh-Hant.i18n.json b/imports/i18n/data/zh-Hant.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/zh-Hant.i18n.json +++ b/imports/i18n/data/zh-Hant.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zh-TW.i18n.json b/imports/i18n/data/zh-TW.i18n.json index 79ac8f358..560c090a5 100644 --- a/imports/i18n/data/zh-TW.i18n.json +++ b/imports/i18n/data/zh-TW.i18n.json @@ -1,7 +1,7 @@ { "accept": "接受", "act-activity-notify": "活動通知", - "act-addAttachment": "附件 __attachment__ 已新增到卡片 __card__ 位於清單 __list__ 泳道 __swimlane__ 看板 __board__", + "act-addAttachment": "附件 __attachment__ 已新增到卡片 __card__ 位於清單 __list__  泳道  __swimlane__ 看板 __board__", "act-deleteAttachment": "已刪除的附件__附件__卡片上__卡片__在清單__清單__at swimlane__swimlane__在看板__看板__", "act-addSubtask": "新增子任務 __子任務 __ to card __卡片__ at list_清單__ at swimlane __分隔線__ at board __看板__", "act-addLabel": "新增標籤 __label__ 到看板 __board__ 中的泳道 __swimlane__ 中的清單 __list__ 中的卡片 __card__ 中", @@ -49,7 +49,6 @@ "activity-archived": "%s 已被移到封存", "activity-attached": "已新增附件 %s 到 %s", "activity-created": "新增 %s", - "activity-changedListTitle": "重新命名清單為 %s", "activity-customfield-created": "已建立的自訂欄位 %s", "activity-excluded": "排除 %s 從 %s", "activity-imported": "匯入 %s 到 %s 從 %s 中", @@ -86,27 +85,25 @@ "add-card": "新增卡片", "add-card-to-top-of-list": "新增卡片至清單頂部", "add-card-to-bottom-of-list": "新增卡片至清單底部", - "setListWidthPopup-title": "設定寬度", - "set-list-width": "設定寬度", - "set-list-width-value": "設定最小與最大寬度(畫素)", - "list-width-error-message": "清單寬度必須為大於 100 的整數", - "keyboard-shortcuts-enabled": "已啟用鍵盤快捷鍵。點選以停用。", - "keyboard-shortcuts-disabled": "已停用鍵盤快捷鍵。點選以啟用。", - "setSwimlaneHeightPopup-title": "設定泳道高度", - "set-swimlane-height": "設定泳道高度", - "set-swimlane-height-value": "泳道高度(畫素)", - "swimlane-height-error-message": "泳道高度必須為正整數", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", + "setSwimlaneHeightPopup-title": "Set Swimlane Height", + "set-swimlane-height": "Set Swimlane Height", + "set-swimlane-height-value": "Swimlane Height (pixels)", + "swimlane-height-error-message": "Swimlane height must be a positive integer", "add-swimlane": "新增泳道", "add-subtask": "新增子任務", "add-checklist": "新增待辦清單", "add-checklist-item": "新增項目", - "close-add-checklist-item": "關閉向檢查清單表單新增項目", - "close-edit-checklist-item": "關閉編輯檢查清單表單的項目", + "close-add-checklist-item": "Close add an item to checklist form", + "close-edit-checklist-item": "Close edit an item to checklist form", "convertChecklistItemToCardPopup-title": "轉換為卡片", - "add-cover": "新增封面圖片至小卡片", + "add-cover": "Add cover image to minicard", "add-label": "新增標籤", "add-list": "新增清單", - "add-after-list": "在清單後新增", + "add-after-list": "Add After List", "add-members": "新增成員", "added": "已新增", "addMemberPopup-title": "成員", @@ -116,7 +113,7 @@ "admin-announcement": "通知", "admin-announcement-active": "啟用系統公告", "admin-announcement-title": "來自管理員的公告訊息", - "all-boards": "所有看板", + "all-boards": "全部看板", "and-n-other-card": "和其他 __count__ 個卡片", "and-n-other-card_plural": "和其他 __count__ 個卡片", "apply": "應用", @@ -146,28 +143,28 @@ "attachmentDeletePopup-title": "刪除附件?", "attachments": "附件", "auto-watch": "自動訂閱新建立的看板", - "avatar-too-big": "大頭照太大了(最大 __size__)", + "avatar-too-big": "The avatar is too large (__size__ max)", "back": "返回", "board-change-color": "變更顏色", - "board-change-background-image": "變更背景圖片", - "board-background-image-url": "背景圖片 URL", - "add-background-image": "新增背景圖片", - "remove-background-image": "移除背景圖片", - "show-at-all-boards-page" : "在所有看板頁面顯示", - "board-info-on-my-boards" : "所有看板設定", - "boardInfoOnMyBoardsPopup-title" : "所有看板設定", - "boardInfoOnMyBoards-title": "所有看板設定", - "show-card-counter-per-list": "顯示每個清單的卡片數", - "show-board_members-avatar": "顯示看板成員大頭照", + "board-change-background-image": "Change Background Image", + "board-background-image-url": "Background Image URL", + "add-background-image": "Add Background Image", + "remove-background-image": "Remove Background Image", + "show-at-all-boards-page" : "Show at All Boards page", + "board-info-on-my-boards" : "All Boards Settings", + "boardInfoOnMyBoardsPopup-title" : "All Boards Settings", + "boardInfoOnMyBoards-title": "All Boards Settings", + "show-card-counter-per-list": "Show card count per list", + "show-board_members-avatar": "Show Board members avatars", "board-nb-stars": "%s 星星", "board-not-found": "看板不存在", "board-private-info": "此看板將被設為<strong>私有</strong>。", "board-public-info": "此看板將被設為<strong>公開</strong>。", "board-drag-drop-reorder-or-click-open": "拖放以重新排序看板圖示。點擊看板圖示開啟看板。", "boardChangeColorPopup-title": "變更看板背景", - "boardChangeBackgroundImagePopup-title": "變更背景圖片", + "boardChangeBackgroundImagePopup-title": "Change Background Image", "allBoardsChangeColorPopup-title": "變更顏色", - "allBoardsChangeBackgroundImagePopup-title": "變更背景圖片", + "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", "boardChangeTitlePopup-title": "重新命名看板", "boardChangeVisibilityPopup-title": "更改可見度", "boardChangeWatchPopup-title": "更改訂閱狀態", @@ -253,11 +250,11 @@ "cardType-linkedCard": "已連結卡片", "cardType-linkedBoard": "已連結看板", "change": "變更", - "change-avatar": "更換大頭照", + "change-avatar": "更換大頭貼", "change-password": "變更密碼", "change-permissions": "變更權限", "change-settings": "更改設定", - "changeAvatarPopup-title": "更換大頭照", + "changeAvatarPopup-title": "更換大頭貼", "changeLanguagePopup-title": "更改語系", "changePasswordPopup-title": "變更密碼", "changePermissionsPopup-title": "變更權限", @@ -266,9 +263,6 @@ "checklists": "待辦清單", "click-to-star": "將看板加入我的最愛。", "click-to-unstar": "從我的最愛移除此看板。", - "click-to-enable-auto-width": "已停用自動列表寬度。點選以啟用。", - "click-to-disable-auto-width": "已啟用自動列表寬度。點選以停用。", - "auto-list-width": "自動列表寬度", "clipboard": "剪貼簿貼上或者拖曳檔案", "close": "關閉", "close-board": "關閉看板", @@ -300,28 +294,27 @@ "color-white": "白色", "color-yellow": "黃色", "unset-color": "未設定", - "comments": "評論", "comment": "評論", "comment-placeholder": "撰寫文字", "comment-only": "僅能評論", "comment-only-desc": "只能在卡片上發表評論。", - "comment-delete": "確定要刪除此評論?", - "deleteCommentPopup-title": "刪除評論", + "comment-delete": "確定要刪除此留言?", + "deleteCommentPopup-title": "刪除留言", "no-comments": "暫無評論", - "no-comments-desc": "無法檢視評論與活動。", + "no-comments-desc": "無法檢視評論和活動。", "worker": "工作者", "worker-desc": "只能移動卡片,分配給自己及發表評論。", "computer": "從本機上傳", "confirm-subtask-delete-popup": "確定要刪除子任務嗎?", - "confirm-checklist-delete-popup": "確定要刪除檢查清單嗎?", - "subtaskDeletePopup-title": "刪除子任務?", - "checklistDeletePopup-title": "刪除檢查清單", + "confirm-checklist-delete-popup": "確定要刪除此清單嗎?", + "subtaskDeletePopup-title": "Delete Subtask?", + "checklistDeletePopup-title": "刪除清單", "copy-card-link-to-clipboard": "將卡片連結複製到剪貼簿", "copy-text-to-clipboard": "複製文字到剪貼簿", "linkCardPopup-title": "連結卡片", "searchElementPopup-title": "搜尋", "copyCardPopup-title": "複製卡片", - "copyManyCardsPopup-title": "將範本複製到多張卡片", + "copyManyCardsPopup-title": "Copy Template to Many Cards", "copyManyCardsPopup-instructions": "使用此 JSON 格式來表示目標卡片的標題和描述", "copyManyCardsPopup-format": "[ {\"title\": \"第一個卡片標題\", \"description\":\"第一個卡片描述\"}, {\"title\":\"第二個卡片標題\",\"description\":\"第二個卡片描述\"},{\"title\":\"最後一個卡片標題\",\"description\":\"最後一個卡片描述\"} ]", "create": "建立", @@ -346,7 +339,7 @@ "custom-fields": "自訂欄位", "date": "日期", "decline": "拒絕", - "default-avatar": "預設大頭照", + "default-avatar": "預設大頭貼", "delete": "刪除", "deleteCustomFieldPopup-title": "刪除自訂欄位?", "deleteLabelPopup-title": "刪除標籤?", @@ -357,7 +350,7 @@ "done": "完成", "download": "下載", "edit": "編輯", - "edit-avatar": "更換大頭照", + "edit-avatar": "更換大頭貼", "edit-profile": "編輯個人資料", "edit-wip-limit": "編輯 WIP 限制", "soft-wip-limit": "軟性 WIP 限制", @@ -383,7 +376,6 @@ "email-sent": "郵件已寄送", "email-verifyEmail-subject": "驗證您在 __siteName__ 的電子郵件", "email-verifyEmail-text": "親愛的 __user__,\n\n點選下面的連結,驗證您的電子郵件地址:\n\n__url__\n\n謝謝。", - "enable-vertical-scrollbars": "啟用垂直捲軸", "enable-wip-limit": "啟用 WIP 限制", "error-board-doesNotExist": "該看板不存在", "error-board-notAdmin": "需要成為管理員才能執行此操作", @@ -400,22 +392,22 @@ "error-teamname-taken": "這個團隊名稱已被使用", "error-email-taken": "Email 已被使用", "export-board": "匯出看板", - "export-board-json": "匯出看板為 JSON 格式", - "export-board-csv": "匯出看板為 CSV 格式", - "export-board-tsv": "匯出看板為 TSV 格式", + "export-board-json": "匯出看板為JSON格式", + "export-board-csv": "匯出看板為CSV格式", + "export-board-tsv": "匯出看板為TSV格式", "export-board-excel": "匯出看板至 Excel", "user-can-not-export-excel": "使用者無法匯出至 Excel", - "export-board-html": "匯出看板為 HTML 格式", + "export-board-html": "匯出看板為HTML格式", "export-card": "匯出卡片", - "export-card-pdf": "匯出卡片至 PDF", - "user-can-not-export-card-to-pdf": "使用者不能將卡片匯出至 PDF", + "export-card-pdf": "匯出卡片至PDF", + "user-can-not-export-card-to-pdf": "使用者不能將卡片匯出至PDF", "exportBoardPopup-title": "匯出看板", "exportCardPopup-title": "匯出卡片", "sort": "排序", "sorted": "已排序", "remove-sort": "移除排序", "sort-desc": "點選排序清單", - "list-sort-by": "清單排序依照:", + "list-sort-by": "清單排序依照:", "list-label-modifiedAt": "最後存取時間", "list-label-title": "名稱清單", "list-label-sort": "自定義排序", @@ -424,22 +416,22 @@ "list-label-short-sort": "(M)", "filter": "篩選", "filter-cards": "篩選卡片或清單", - "filter-dates-label": "按日期篩選", + "filter-dates-label": "篩選: 日期", "filter-no-due-date": "沒有到期日", "filter-overdue": "逾期", "filter-due-today": "今天到期", "filter-due-this-week": "本週到期", - "filter-due-next-week": "下週到期", + "filter-due-next-week": "Due next week", "filter-due-tomorrow": "明天到期", "list-filter-label": "篩選清單依據標題", "filter-clear": "清除篩選條件", - "filter-labels-label": "按標籤篩選", + "filter-labels-label": "篩選: 標籤", "filter-no-label": "沒有標籤", - "filter-member-label": "按成員篩選", + "filter-member-label": "篩選: 成員", "filter-no-member": "沒有成員", - "filter-assignee-label": "按代理人篩選", + "filter-assignee-label": "篩選: 代理人", "filter-no-assignee": "沒有代理人", - "filter-custom-fields-label": "按自訂欄位篩選", + "filter-custom-fields-label": "篩選: 自訂欄位", "filter-no-custom-fields": "沒有自訂欄位", "filter-show-archive": "顯示封存的清單", "filter-hide-empty": "隱藏空清單", @@ -451,7 +443,7 @@ "advanced-filter-description": "進階篩選可以使用包含如下運算子的字串進行過濾:== != <= >= && || ( ) 。運算子之間用空格隔開。輸入文字和數值就可以過濾所有自訂內容。例如:Field1 == Value1。注意:如果內容或數值包含空格,需要用單引號。例如: 'Field 1' == 'Value 1'。要跳過單個控制字元(' \\\\/),請使用 \\\\ 跳脫字元。例如: Field1 = I\\\\'m。支援組合使用多個條件,例如: F1 == V1 || F1 == V2。通常以從左到右的順序進行判斷。可以透過括號修改順序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支援使用 正規表示式 (Regex) 搜尋內容。", "fullname": "全稱", "header-logo-title": "返回您的看板頁面", - "show-activities": "顯示活動", + "hide-system-messages": "隱藏系統訊息", "headerBarCreateBoardPopup-title": "建立看板", "home": "首頁", "import": "匯入", @@ -465,15 +457,15 @@ "from-trello": "來自 Trello", "from-wekan": "從上次的匯出檔", "from-csv": "來自 CSV/TSV", - "import-board-instruction-trello": "在你的 Trello 看板中,點選「功能表」,然後選擇「更多」,「列印與匯出」,「匯出為 JSON」並複製結果文字。", - "import-board-instruction-csv": "貼上您的 CSV(逗號分隔值)/TSV(Tab 分隔值)資料。", - "import-board-instruction-wekan": "在您的看板,點擊「選單」,然後「匯出看板」,複製下載檔案中的文字。", + "import-board-instruction-trello": "在你的Trello看板中,點選“功能表”,然後選擇“更多”,“列印與匯出”,“匯出為 JSON” 並拷貝結果文本", + "import-board-instruction-csv": "貼上你的 CSV(Comma Separated Values)/TSV(Tab Separated Values) 資料", + "import-board-instruction-wekan": "在您的看板,點擊“選單”,然後“匯出看板”,複製下載文件中的文本。", "import-board-instruction-about-errors": "如果在匯入看板時出現錯誤,匯入工作可能仍然在進行中,並且看板已經出現在全部看板頁。", "import-json-placeholder": "貼上您有效的 JSON 資料至此", "import-csv-placeholder": "貼上您有效的 CSV/TSV 資料至此", "import-map-members": "複製成員", "import-members-map": "您匯入的看板有一些成員,請複製這些成員到您匯入的用戶。", - "import-members-map-note": "備註:未對應的成員將分配給目前使用者。", + "import-members-map-note": "備註: 未對應的成員將分配給目前使用者。", "import-show-user-mapping": "核對複製的成員", "import-user-select": "選擇現有使用者作為成員", "importMapMembersAddPopup-title": "選擇成員", @@ -486,17 +478,17 @@ "just-invited": "您剛剛被邀請加入此看板", "keyboard-shortcuts": "鍵盤快捷鍵", "label-create": "新增標籤", - "label-default": "%s 標籤(預設)", + "label-default": "%s 標籤 (預設)", "label-delete-pop": "此操作無法還原,這將會刪除該標籤並清除它的歷史記錄。", "labels": "標籤", "language": "語言", - "last-admin-desc": "您無法變更角色,因為至少需要一名管理員。", + "last-admin-desc": "你不能更改角色,因為至少需要一名管理員。", "leave-board": "離開看板", "leave-board-pop": "你確定要離開 __boardTitle__ 嗎?此看板的所有卡片都會將您移除。", "leaveBoardPopup-title": "離開看板?", "link-card": "關聯至該卡片", "list-archive-cards": "封存清單內所有的卡片", - "list-archive-cards-pop": "將移動看板中清單的所有卡片,查看或恢復封存中的卡片,點擊「選單」->「封存」", + "list-archive-cards-pop": "將移動看板中清單的所有卡片,查看或恢復封存中的卡片,點擊“選單”->“封存”", "list-move-cards": "移動清單中的所有卡片", "list-select-cards": "選擇清單中的所有卡片", "set-color-list": "設定顏色", @@ -510,8 +502,8 @@ "listImportCardsTsvPopup-title": "匯入 Excel CSV/TSV", "listMorePopup-title": "更多", "link-list": "連結到這個清單", - "list-delete-pop": "所有動作都將從活動動態中刪除,且您將無法還原該清單。此動作無法還原。", - "list-delete-suggest-archive": "您可以移動清單到封存,以將其從看板中移除並保留活動。", + "list-delete-pop": "所有的動作都將從活動動態中被移除且您將無法再開啟該清單\b。此操作無法復原。", + "list-delete-suggest-archive": "您可以移動清單到封存以將其從看板中移除並保留活動。", "lists": "清單", "swimlanes": "泳道", "log-out": "登出", @@ -540,11 +532,11 @@ "normal": "普通", "normal-desc": "可以建立以及編輯卡片,無法更改。", "not-accepted-yet": "邀請尚未接受", - "notify-participate": "接收您作為建立者或成員的任何卡片的更新", + "notify-participate": "Receive updates to any cards you participate as creator or member", "notify-watch": "接收您關注的看板、清單或卡片的更新", "optional": "選擇性的", "or": "或", - "page-maybe-private": "本頁面被設為私有。您必須<a href='%s'>登入</a>以瀏覽其中內容。", + "page-maybe-private": "本頁面被設為私有. 您必須 <a href='%s'>登入</a>以瀏覽其中內容。", "page-not-found": "頁面不存在。", "password": "密碼", "paste-or-dragdrop": "從剪貼簿貼上,或者拖曳檔案到它上面 (僅限於圖片)", @@ -556,21 +548,21 @@ "private-desc": "該看板將被設為私有。只有該看板成員才可以進行檢視和編輯。", "profile": "資料", "public": "公開", - "public-desc": "該看板將被公開。任何人均可透過連結檢視,並且將對 Google 等搜尋引擎開放。只有加入至該看板的成員才可進行編輯。", + "public-desc": "該看板將被公開。任何人均可透過連結檢視,並且將對Google和其他搜尋引擎開放。只有加入至該看板的成員才可進行編輯。", "quick-access-description": "加入我的最愛的看板將會在此導覽列中新增捷徑", - "remove-cover": "從小卡片移除封面圖片", - "remove-from-board": "從看板中移除", + "remove-cover": "Remove cover image from minicard", + "remove-from-board": "從看板中刪除", "remove-label": "移除標籤", - "listDeletePopup-title": "刪除清單?", + "listDeletePopup-title": "刪除標籤", "remove-member": "移除成員", "remove-member-from-card": "從該卡片中移除", "remove-member-pop": "確定從 __boardTitle__ 中移除 __name__ (__username__) 嗎? 該成員將被從該看板的所有卡片中移除,同時他會收到一則提醒。", - "removeMemberPopup-title": "移除成員?", + "removeMemberPopup-title": "刪除成員?", "rename": "重新命名", "rename-board": "重新命名看板", "restore": "還原", - "rescue-card-description": "在關閉之前顯示救援對話方塊以取得未儲存的卡片描述", - "rescue-card-description-dialogue": "用您的變更覆寫目前卡片描述?", + "rescue-card-description": "Show rescue dialogue before closing for unsaved card descriptions", + "rescue-card-description-dialogue": "Overwrite current card description with your changes?", "save": "儲存", "search": "搜尋", "rules": "規則", @@ -580,19 +572,17 @@ "select-board": "選擇看板", "set-wip-limit-value": "設定此清單中的最大任務數", "setWipLimitPopup-title": "設定 WIP 限制", - "shortcut-add-self": "將您新增至目前的卡片", "shortcut-assign-self": "分配當前卡片給自己", "shortcut-autocomplete-emoji": "自動完成表情符號", "shortcut-autocomplete-members": "自動補齊成員", "shortcut-clear-filters": "清空全部過濾條件", "shortcut-close-dialog": "關閉對話方塊", "shortcut-filter-my-cards": "過濾我的卡片", - "shortcut-filter-my-assigned-cards": "過濾分配給我的卡片", "shortcut-show-shortcuts": "顯示此快速鍵清單", "shortcut-toggle-filterbar": "切換過濾程式邊欄", "shortcut-toggle-searchbar": "切換搜索欄", "shortcut-toggle-sidebar": "切換面板邊欄", - "show-cards-minimum-count": "顯示卡片數量,當清單包含多於……", + "show-cards-minimum-count": "顯示卡片數量,當內容超過數量", "sidebar-open": "開啟側邊欄", "sidebar-close": "關閉側邊欄", "signupPopup-title": "建立帳戶", @@ -603,40 +593,39 @@ "team": "團隊", "this-board": "這個看板", "this-card": "這個卡片", - "spent-time-hours": "耗費時間(小時)", - "overtime-hours": "超時(小時)", + "spent-time-hours": "耗費時間 (小時)", + "overtime-hours": "超時 (小時)", "overtime": "超時", "has-overtime-cards": "有卡片已超時", "has-spenttime-cards": "耗時卡", "time": "時間", "title": "標題", - "toggle-assignees": "切換卡片的代理人 1-9(按加入看板的順序)。", - "toggle-labels": "切換卡片的標籤 1-9。多重選擇新增標籤 1-9", - "remove-labels-multiselect": "多重選擇移除標籤 1-9", + "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", + "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "訂閱相關通知", - "tracking-info": "您將會收到與您有關的卡片的所有變更通知", + "tracking-info": "你將會收到與你有關的卡片的所有變更通知", "type": "類型", "unassign-member": "取消分配成員", "unsaved-description": "未儲存的描述", "unwatch": "取消追蹤", "upload": "上傳", - "upload-avatar": "上傳大頭照", - "uploaded-avatar": "大頭照已經上傳", + "upload-avatar": "上傳大頭貼", + "uploaded-avatar": "大頭貼已經上傳", "custom-top-left-corner-logo-image-url": "自訂左上商標圖示網址", "custom-top-left-corner-logo-link-url": "自訂左上商標連結網址", "custom-top-left-corner-logo-height": "自訂左上商標圖示高度。預設值:27", "custom-login-logo-image-url": "自訂登入商標圖示網址", "custom-login-logo-link-url": "自訂登入商標連結網址", - "custom-help-link-url": "自訂說明連結 URL", + "custom-help-link-url": "Custom Help Link URL", "text-below-custom-login-logo": "登入商標下方文字", "automatic-linked-url-schemes": "自定義 URL 結構應該自動地變為可點擊。每一行一個 URL 結構", "username": "使用者名稱", "import-usernames": "匯入使用者名稱", "view-it": "檢視", - "warn-list-archived": "警告:卡片位在封存的清單中", + "warn-list-archived": "警告: 卡片位在封存的清單中", "watch": "追蹤", "watching": "訂閱所有通知", - "watching-info": "您將會收到關於這個看板所有的變更通知", + "watching-info": "你將會收到關於這個看板所有的變更通知", "welcome-board": "歡迎進入看板", "welcome-swimlane": "里程碑 1", "welcome-list1": "基本", @@ -653,7 +642,7 @@ "people": "成員", "registration": "註冊", "disable-self-registration": "關閉自我註冊", - "disable-forgot-password": "停用忘記密碼", + "disable-forgot-password": "Disable Forgot Password", "invite": "邀請", "invite-people": "邀請成員", "to-boards": "至看板()", @@ -671,12 +660,12 @@ "invitation-code": "邀請碼", "email-invite-register-subject": "__inviter__ 向您發出邀請", "email-invite-register-text": "親愛的__user__:\n__inviter__ 邀請您加入到看板\n\n請點擊下面的連結:\n__url__\n\n您的邀請碼是:__icode__\n\n謝謝。", - "email-smtp-test-subject": "透過 SMTP 發送測試郵件", + "email-smtp-test-subject": "透過SMTP發送測試郵件", "email-smtp-test-text": "你已成功發送郵件", "error-invitation-code-not-exist": "邀請碼不存在", "error-notAuthorized": "您無權限查看此頁面。", "webhook-title": "Webhook 名稱", - "webhook-token": "權杖(認證選項)", + "webhook-token": "Token (認證選項)", "outgoing-webhooks": "設定訂閱 (Webhooks)", "bidirectional-webhooks": "雙向訂閱 (Webhooks)", "outgoingWebhooksPopup-title": "設定訂閱 (Webhooks)", @@ -684,7 +673,7 @@ "disable-webhook": "禁用訂閱 (Webhooks)", "global-webhook": "全域訂閱 (Webhooks)", "new-outgoing-webhook": "新增連外訂閱 (Webhooks)", - "no-name": "(未知)", + "no-name": "(未知)", "Node_version": "Node.js 版本", "Meteor_version": "Meteor 版本", "MongoDB_version": "MongoDB 版本", @@ -711,7 +700,7 @@ "yes": "是", "no": "否", "accounts": "帳號", - "accounts-allowEmailChange": "允許變更電子郵件", + "accounts-allowEmailChange": "允許變更 Email", "accounts-allowUserNameChange": "允許修改使用者名稱", "tableVisibilityMode-allowPrivateOnly": "看板可見性:只允許私人看板", "tableVisibilityMode" : "看板可見性", @@ -742,17 +731,17 @@ "queue": "隊列", "subtask-settings": "子任務設定", "card-settings": "卡片設定", - "minicard-settings": "小卡片設定", + "minicard-settings": "Minicard Settings", "boardSubtaskSettingsPopup-title": "看板子任務設定", "boardCardSettingsPopup-title": "卡片設定", - "boardMinicardSettingsPopup-title": "小卡片設定", + "boardMinicardSettingsPopup-title": "Minicard Settings", "deposit-subtasks-board": "將子任務放入以下看板:", "deposit-subtasks-list": "將子任務放入以下清單:", "show-parent-in-minicard": "顯示上一級卡片:", - "description-on-minicard": "小卡片描述", - "cover-attachment-on-minicard": "小卡片的封面圖片", - "badge-attachment-on-minicard": "小卡片的附件數量", - "card-sorting-by-number-on-minicard": "卡片按小卡片數量排序", + "description-on-minicard": "Description on minicard", + "cover-attachment-on-minicard": "Cover image on minicard", + "badge-attachment-on-minicard": "Count of attachments on minicard", + "card-sorting-by-number-on-minicard": "Card sorting by number on minicard", "prefix-with-full-path": "完整路徑前綴", "prefix-with-parent": "父層前綴", "subtext-with-full-path": "子標題顯示完整路徑", @@ -877,7 +866,7 @@ "r-df-received-at": "已接收", "r-to-current-datetime": "到當前日期/時間", "r-remove-value-from": "移除值從", - "r-link-card": "連結卡片至", + "r-link-card": "Link card to", "ldap": "LDAP", "oauth2": "OAuth2", "cas": "CAS", @@ -886,8 +875,8 @@ "custom-product-name": "自訂產品名稱", "layout": "排版", "hide-logo": "隱藏圖示", - "hide-card-counter-list": "在「所有看板」隱藏卡片計數清單", - "hide-board-member-list": "在「所有看板」隱藏看板成員清單", + "hide-card-counter-list": "Hide card counter list on All Boards", + "hide-board-member-list": "Hide board member list on All Boards", "add-custom-html-after-body-start": "新增自訂的 HTML 在<body>之後開始", "add-custom-html-before-body-end": "新增自訂的 HTML 在</body>之前結束", "error-undefined": "發生問題", @@ -932,7 +921,7 @@ "cardAssigneesPopup-title": "代理人", "addmore-detail": "新增更多詳細描述", "show-on-card": "在卡片上顯示", - "show-on-minicard": "在小卡片顯示", + "show-on-minicard": "Show on Minicard", "new": "新增", "editOrgPopup-title": "編輯組織", "newOrgPopup-title": "新建組織", @@ -941,7 +930,7 @@ "editUserPopup-title": "編輯使用者", "newUserPopup-title": "新增使用者", "notifications": "通知", - "help": "說明", + "help": "Help", "view-all": "檢視全部", "filter-by-unread": "篩選: 未讀", "mark-all-as-read": "標示全部已讀", @@ -966,15 +955,14 @@ "delete-linked-card-before-this-card": "在刪除指向此卡片的鏈結卡之前,您不能刪除此卡片", "delete-linked-cards-before-this-list": "在刪除指向該清單中卡片的鏈結卡之前,您不能刪除此清單", "hide-checked-items": "隱藏已勾選項目", - "hide-finished-checklist": "隱藏完成的待辦清單", "task": "任務", "create-task": "建立任務", - "ok": "確定", + "ok": "OK", "organizations": "組織", "teams": "團隊", "displayName": "顯示用名稱", "shortName": "排序用名稱", - "autoAddUsersWithDomainName": "自動使用網域名稱新增使用者", + "autoAddUsersWithDomainName": "Automatically add users with the domain name", "website": "網站", "person": "人物", "my-cards": "我的卡片", @@ -982,8 +970,8 @@ "list": "清單", "board": "看板", "context-separator": "/", - "myCardsViewChange-title": "我的卡片檢視", - "myCardsViewChangePopup-title": "我的卡片檢視", + "myCardsViewChange-title": "My Cards View", + "myCardsViewChangePopup-title": "My Cards View", "myCardsViewChange-choice-boards": "看板", "myCardsViewChange-choice-table": "Table", "myCardsSortChange-title": "我的卡片排序", @@ -1072,38 +1060,38 @@ "heading-notes": "筆記", "globalSearch-instructions-heading": "搜尋指引", "globalSearch-instructions-description": "搜索可以包括運算子以優化搜索結果。通過冒號分隔的運算子名稱和值來指定運算子。例如,運算子指定 `list:Blocked` 則會將搜索範圍限制在名為 *Blocked* 的清單中。如果值包含空格或特殊字符,則必須將其用引號標記(例如,`__operator_list__:\"To Review\"`)。", - "globalSearch-instructions-operators": "可用的執行者:", + "globalSearch-instructions-operators": "可用的執行者:", "globalSearch-instructions-operator-board": "`__operator_board__:<title>` - 必須符合相對應的 *<title>*", "globalSearch-instructions-operator-list": "`__operator_list__:<title>` - 清單內的卡片必須符合對應的 *<title>*", "globalSearch-instructions-operator-swimlane": "`__operator_swimlane__:<title>` - 泳道中的卡片必須符合對應的 *<title>*", "globalSearch-instructions-operator-comment": "`__operator_comment__:<text>` - 卡片評論包含 *<text>*.", - "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - 卡片標籤要符合 *<color>* 或 *<name>", + "globalSearch-instructions-operator-label": "`__operator_label__:<color>` `__operator_label__:<name>` - 卡片標簽要符合 *<color>* 或 *<name>", "globalSearch-instructions-operator-hash": "`__operator_label_abbrev__<name|color>` - 的簡寫 `__operator_label__:<color>` 或 `__operator_label__:<name>`", - "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - 卡片,其中 *<username>* 是 *成員* 或 *代理人*", - "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - `user:<username>` 的簡寫", - "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - 卡片,其中 *<username>* 是i *成員*", - "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - 卡片,其中 *<username>* 是 *代理人*", - "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - 卡片,其中 *<username>* 是卡片的建立者", - "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - 屬於分配給組織 *<name>* 看板的卡片", - "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - 屬於分配給團隊 *<name>* 看板的卡片", - "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - 從現在起,*<n>* 天內到期的卡片。 `__operator_due__:__predicate_overdue__ 列出所有超過到期日的卡片。", - "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - *<n>* 天或更短時間內建立的卡片", - "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - *<n>* 天或更短時間內修改的卡片", - "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - 其中 *<status>* 是以下的其中一個:", - "globalSearch-instructions-status-archived": "`__predicate_archived__` - 已封存的卡片", - "globalSearch-instructions-status-all": "`__predicate_all__` - 所有已封存與未封存的卡片", - "globalSearch-instructions-status-ended": "`__predicate_ended__` - 有完成日期的卡片", - "globalSearch-instructions-status-public": "`__predicate_public__` - 僅在公開看板的卡片", - "globalSearch-instructions-status-private": "`__predicate_private__` - 僅在私人看板的卡片", - "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - 其中 *<field>* 為 `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` 或 `__predicate_member__` 的其中一個。在 *<field>* 前放置 `-` 會搜尋該欄位中是否缺少值(例如,`has:-due` 會搜尋沒有到期日的卡片)。", - "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - 其中 *<sort-name>* 為 `__predicate_due__`, `__predicate_created__` 或 `__predicate_modified__` 的其中一個。對於遞減排序,請在排序名稱前面放置 `-`。", - "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - 其中 *<n>* 是一個正整數,表示每頁要顯示的卡片數量。", + "globalSearch-instructions-operator-user": "`__operator_user__:<username>` - cards where *<username>* is a *member* or *assignee*", + "globalSearch-instructions-operator-at": "`__operator_user_abbrev__username` - shorthand for `user:<username>`", + "globalSearch-instructions-operator-member": "`__operator_member__:<username>` - cards where *<username>* is a *member*", + "globalSearch-instructions-operator-assignee": "`__operator_assignee__:<username>` - cards where *<username>* is an *assignee*", + "globalSearch-instructions-operator-creator": "`__operator_creator__:<username>` - cards where *<username>* is the card's creator", + "globalSearch-instructions-operator-org": "`__operator_org__:<display name|short name>` - cards belonging to a board assigned to organization *<name>*", + "globalSearch-instructions-operator-team": "`__operator_team__:<display name|short name>` - cards belonging to a board assigned to team *<name>*", + "globalSearch-instructions-operator-due": "`__operator_due__:<n>` - cards which are due up to *<n>* days from now. `__operator_due__:__predicate_overdue__ lists all cards past their due date.", + "globalSearch-instructions-operator-created": "`__operator_created__:<n>` - cards which were created *<n>* days ago or less", + "globalSearch-instructions-operator-modified": "`__operator_modified__:<n>` - cards which were modified *<n>* days ago or less", + "globalSearch-instructions-operator-status": "`__operator_status__:<status>` - where *<status>* is one of the following:", + "globalSearch-instructions-status-archived": "`__predicate_archived__` - archived cards", + "globalSearch-instructions-status-all": "`__predicate_all__` - all archived and unarchived cards", + "globalSearch-instructions-status-ended": "`__predicate_ended__` - cards with an end date", + "globalSearch-instructions-status-public": "`__predicate_public__` - cards only in public boards", + "globalSearch-instructions-status-private": "`__predicate_private__` - cards only in private boards", + "globalSearch-instructions-operator-has": "`__operator_has__:<field>` - where *<field>* is one of `__predicate_attachment__`, `__predicate_checklist__`, `__predicate_description__`, `__predicate_start__`, `__predicate_due__`, `__predicate_end__`, `__predicate_assignee__` or `__predicate_member__`. Placing a `-` in front of *<field>* searches for the absence of a value in that field (e.g. `has:-due` searches for cards without a due date).", + "globalSearch-instructions-operator-sort": "`__operator_sort__:<sort-name>` - where *<sort-name>* is one of `__predicate_due__`, `__predicate_created__` or `__predicate_modified__`. For a descending sort, place a `-` in front of the sort name.", + "globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - where *<n>* is a positive integer expressing the number of cards to be displayed per page.", "globalSearch-instructions-notes-1": "將會指定給多位執行者", - "globalSearch-instructions-notes-2": "類似的運算子透過 *OR* 組合在一起。符合任何條件的卡片將被退回。\n`__operator_list__:Available __operator_list__:Blocked` 將回傳任何名為 *Blocked* 或 *Available* 的清單中所包含的卡片。", - "globalSearch-instructions-notes-3": "不同的運算子透過 *AND* 組合在一起。僅回傳與所有不同運算子相符的卡片。`__operator_list__:Available __operator_label__:red` 僅回傳清單 *Available* 中帶有 *red* 標籤的卡片。", - "globalSearch-instructions-notes-3-2": "目前,天數可以設定為正或負整數,或是使用 `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__`。", + "globalSearch-instructions-notes-2": "Similar operators are *OR*ed together. Cards that match any of the conditions will be returned.\n`__operator_list__:Available __operator_list__:Blocked` would return cards contained in any list named *Blocked* or *Available*.", + "globalSearch-instructions-notes-3": "Differing operators are *AND*ed together. Only cards that match all of the differing operators are returned. `__operator_list__:Available __operator_label__:red` returns only cards in the list *Available* with a *red* label.", + "globalSearch-instructions-notes-3-2": "Days can be specified as a positive or negative integer or using `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` or `__predicate_year__` for the current period.", "globalSearch-instructions-notes-4": "英文搜尋忽略大小寫", - "globalSearch-instructions-notes-5": "預設情況下,不搜尋已封存的卡片。", + "globalSearch-instructions-notes-5": "By default archived cards are not searched.", "link-to-search": "連結到此搜尋", "excel-font": "Arial", "number": "數字", @@ -1111,49 +1099,48 @@ "label-names": "標籤名稱", "archived-at": "封存於", "sort-cards": "排序卡片", - "sort-is-on": "開啟排序", + "sort-is-on": "Sort is on", "cardsSortPopup-title": "排序卡片", "due-date": "到期日", "server-error": "伺服器錯誤", - "server-error-troubleshooting": "請遞交伺服器產生的錯誤。\n若使用 snap 安裝,請執行:`sudo snap logs wekan.wekan`\n若使用 Docker 安裝,請執行:`sudo docker logs wekan-app`", - "title-alphabetically": "標題(按字母順序)", - "created-at-newest-first": "建立於(最新優先)", - "created-at-oldest-first": "建立於(最早優先)", + "server-error-troubleshooting": "Please submit the error generated by the server.\nFor a snap installation, run: `sudo snap logs wekan.wekan`\nFor a Docker installation, run: `sudo docker logs wekan-app`", + "title-alphabetically": "標題 (按字母順序)", + "created-at-newest-first": "創建於(最新優先)", + "created-at-oldest-first": "創建於(最早優先)", "links-heading": "連結", - "hide-activities-of-all-boards": "不要在所有看板上顯示看板活動", - "now-activities-of-all-boards-are-hidden": "現在所有看板的所有活動都隱藏了", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "移動泳道流程圖", "moveSwimlanePopup-title": "移動泳道流程圖", "custom-field-stringtemplate": "文字範本", "custom-field-stringtemplate-format": "格式 (使用 %{value} 作為佔位符)", - "custom-field-stringtemplate-separator": "分隔字串(使用 或   表示空格)", - "custom-field-stringtemplate-item-placeholder": "按 Enter 新增更多項目", - "creator": "建立者", - "creator-on-minicard": "小卡片建立者", + "custom-field-stringtemplate-separator": "Separator (use or   for a space)", + "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", + "creator": "創建者", "filesReportTitle": "檔案報告", "reports": "報告", "rulesReportTitle": "規則報告", - "boardsReportTitle": "看板報告", - "cardsReportTitle": "卡片報告", + "boardsReportTitle": "Boards Report", + "cardsReportTitle": "Cards Report", "copy-swimlane": "複製泳道流程圖", "copySwimlanePopup-title": "複製泳道流程圖", - "display-card-creator": "顯示卡片建立者", - "wait-spinner": "等待微調器", - "Bounce": "彈起等待微調器", - "Cube": "立方體等待微調器", - "Cube-Grid": "立方體網格等待微調器", - "Dot": "點等待微調器", - "Double-Bounce": "雙彈起等待微調器", - "Rotateplane": "Rotateplane 等待微調器", + "display-card-creator": "顯示卡片創建者", + "wait-spinner": "Wait Spinner", + "Bounce": "Bounce Wait Spinner", + "Cube": "Cube Wait Spinner", + "Cube-Grid": "Cube-Grid Wait Spinner", + "Dot": "Dot Wait Spinner", + "Double-Bounce": "Double Bounce Wait Spinner", + "Rotateplane": "Rotateplane Wait Spinner", "Scaleout": "橫向展開等待微調器", - "Wave": "波浪等待微調器", + "Wave": "Wave Wait Spinner", "maximize-card": "最大化卡片", "minimize-card": "最小化卡片", - "delete-org-warning-message": "無法刪除該組織,至少有一個使用者屬於該組織", - "delete-team-warning-message": "無法刪除該團隊,至少有一個使用者屬於該團隊", + "delete-org-warning-message": "Can not delete this organization, there is at least one user that belongs to it", + "delete-team-warning-message": "Can not delete this team, there is at least one user that belongs to it", "subject": "主旨", "details": "內容", - "carbon-copy": "副本 (Cc:)", + "carbon-copy": "Carbon Copy (Cc:)", "ticket": "工票", "tickets": "工票", "ticket-number": "工票號碼", @@ -1168,105 +1155,93 @@ "help-request": "要求協助", "editCardSortOrderPopup-title": "變更排序", "cardDetailsPopup-title": "卡片內容", - "add-teams": "新增團隊", - "add-teams-label": "新增的團隊如下所示:", - "remove-team-from-table": "您確定要從看板中移除該團隊嗎?", - "confirm-btn": "確認", + "add-teams": "Add teams", + "add-teams-label": "Added teams are displayed below:", + "remove-team-from-table": "Are you sure you want to remove this team from the board ?", + "confirm-btn": "Confirm", "remove-btn": "移除", - "filter-card-title-label": "按卡片標題篩選", - "invite-people-success": "已成功傳送邀請", - "invite-people-error": "傳送註冊邀請時發生錯誤", - "can-invite-if-same-mailDomainName": "電子郵件網域名稱", - "to-create-teams-contact-admin": "要建立團隊,請聯絡管理員。", - "Node_heap_total_heap_size": "Node 堆積:堆積總大小", - "Node_heap_total_heap_size_executable": "Node 堆積:可執行的堆積總大小", - "Node_heap_total_physical_size": "Node 堆積:物理堆積總大小", - "Node_heap_total_available_size": "Node 堆積:可用堆積總大小", - "Node_heap_used_heap_size": "Node 堆積:已使用的堆積大小", - "Node_heap_heap_size_limit": "Node 堆積:堆積大小限制", - "Node_heap_malloced_memory": "Node 堆積:已分配的記憶體", - "Node_heap_peak_malloced_memory": "Node 堆積:峰值分配記憶體", - "Node_heap_does_zap_garbage": "Node 堆積:是否 zap 垃圾", - "Node_heap_number_of_native_contexts": "Node 堆積:原生脈絡數量", - "Node_heap_number_of_detached_contexts": "Node 堆積:分離脈絡的數量", - "Node_memory_usage_rss": "Node 記憶體使用量:常駐集大小", - "Node_memory_usage_heap_total": "Node 記憶體使用量:已分配堆積的總大小", - "Node_memory_usage_heap_used": "Node 記憶體使用量:實際已使用的記憶體", - "Node_memory_usage_external": "Node 記憶體使用量:外部", - "add-organizations": "新增組織", - "add-organizations-label": "新增的組織如下所示:", - "remove-organization-from-board": "您確定要從此看板中移除該組織嗎?", - "to-create-organizations-contact-admin": "要建立組織,請聯絡管理員。", - "custom-legal-notice-link-url": "自訂法律聲明頁面 URL", - "acceptance_of_our_legalNotice": "繼續使用即代表您接受我們的", - "legalNotice": "法律聲明", - "copied": "已複製!", - "checklistActionsPopup-title": "檢查清單動作", - "moveChecklist": "移動檢查清單", - "moveChecklistPopup-title": "移動檢查清單", - "newlineBecomesNewChecklistItem": "每行文字都會成為待辦清單的其中一個項目", - "newLineNewItem": "一行文字 = 一個待辦清單項目", - "newlineBecomesNewChecklistItemOriginOrder": "每行文字都會成為待辦清單的其中一個項目,並維持原始排序", - "originOrder": "原始排序", - "copyChecklist": "複製檢查清單", - "copyChecklistPopup-title": "複製檢查清單", - "card-show-lists": "卡片顯示清單", - "subtaskActionsPopup-title": "子任務動作", - "attachmentActionsPopup-title": "附件動作", - "attachment-move-storage-fs": "移動複製至檔案系統", - "attachment-move-storage-gridfs": "移動附件至 GridFS", - "attachment-move-storage-s3": "移動附件至 S3", - "attachment-move": "移動附件", - "move-all-attachments-to-fs": "移動所有附件至檔案系統", - "move-all-attachments-to-gridfs": "移動所有附件至 GridFS", - "move-all-attachments-to-s3": "移動所有附件至 S3", - "move-all-attachments-of-board-to-fs": "移動看板的所有附件至檔案系統", - "move-all-attachments-of-board-to-gridfs": "移動看板的所有附件至 GridFS", - "move-all-attachments-of-board-to-s3": "移動看板的所有附件至 S3", - "path": "路徑", - "version-name": "版本名稱", - "size": "大小", - "storage": "儲存空間", - "action": "動作", - "board-title": "看板標題", + "filter-card-title-label": "Filter by card title", + "invite-people-success": "Invitation to register sent with success", + "invite-people-error": "Error while sending invitation to register", + "can-invite-if-same-mailDomainName": "Email domain name", + "to-create-teams-contact-admin": "To create teams, please contact the administrator.", + "Node_heap_total_heap_size": "Node heap: total heap size", + "Node_heap_total_heap_size_executable": "Node heap: total heap size executable", + "Node_heap_total_physical_size": "Node heap: total physical size", + "Node_heap_total_available_size": "Node heap: total available size", + "Node_heap_used_heap_size": "Node heap: used heap size", + "Node_heap_heap_size_limit": "Node heap: heap size limit", + "Node_heap_malloced_memory": "Node heap: malloced memory", + "Node_heap_peak_malloced_memory": "Node heap: peak malloced memory", + "Node_heap_does_zap_garbage": "Node heap: does zap garbage", + "Node_heap_number_of_native_contexts": "Node heap: number of native contexts", + "Node_heap_number_of_detached_contexts": "Node heap: number of detached contexts", + "Node_memory_usage_rss": "Node memory usage: resident set size", + "Node_memory_usage_heap_total": "Node memory usage: total size of the allocated heap", + "Node_memory_usage_heap_used": "Node memory usage: actual memory used", + "Node_memory_usage_external": "Node memory usage: external", + "add-organizations": "Add organizations", + "add-organizations-label": "Added organizations are displayed below:", + "remove-organization-from-board": "Are you sure you want to remove this organization from this board ?", + "to-create-organizations-contact-admin": "To create organizations, please contact administrator.", + "custom-legal-notice-link-url": "Custom legal notice page URL", + "acceptance_of_our_legalNotice": "By continuing, you accept our", + "legalNotice": "legal notice", + "copied": "Copied!", + "checklistActionsPopup-title": "Checklist Actions", + "moveChecklist": "Move Checklist", + "moveChecklistPopup-title": "Move Checklist", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", + "copyChecklist": "Copy Checklist", + "copyChecklistPopup-title": "Copy Checklist", + "card-show-lists": "Card Show Lists", + "subtaskActionsPopup-title": "Subtask Actions", + "attachmentActionsPopup-title": "Attachment Actions", + "attachment-move-storage-fs": "Move attachment to filesystem", + "attachment-move-storage-gridfs": "Move attachment to GridFS", + "attachment-move-storage-s3": "Move attachment to S3", + "attachment-move": "Move Attachment", + "move-all-attachments-to-fs": "Move all attachments to filesystem", + "move-all-attachments-to-gridfs": "Move all attachments to GridFS", + "move-all-attachments-to-s3": "Move all attachments to S3", + "move-all-attachments-of-board-to-fs": "Move all attachments of board to filesystem", + "move-all-attachments-of-board-to-gridfs": "Move all attachments of board to GridFS", + "move-all-attachments-of-board-to-s3": "Move all attachments of board to S3", + "path": "Path", + "version-name": "Version-Name", + "size": "Size", + "storage": "Storage", + "action": "操作", + "board-title": "Board Title", "attachmentRenamePopup-title": "重新命名", - "uploading": "正在上傳", - "remaining_time": "剩餘時間", - "speed": "速度", - "progress": "進度", - "password-again": "再次輸入密碼", - "if-you-already-have-an-account": "若您已有帳號", - "register": "註冊", - "forgot-password": "忘記密碼", - "minicardDetailsActionsPopup-title": "卡片詳細資訊", - "Mongo_sessions_count": "Mongo 工作階段計數", - "change-visibility": "變更可見度", - "max-upload-filesize": "最大上傳大小,以位元組為單位:", - "allowed-upload-filetypes": "允許上傳的檔案類型:", - "max-avatar-filesize": "最大大頭照大小,以位元組為單位:", - "allowed-avatar-filetypes": "允許的大頭照檔案類型:", - "invalid-file": "若檔案名稱無效,則取消上傳或重新命名。", - "preview-pdf-not-supported": "您的裝置不支援預覽 PDF。請嘗試下載。", - "drag-board": "拖曳看板", - "translation-number": "自訂翻譯字串的數量為:", - "delete-translation-confirm-popup": "您確定您想要刪除此自訂翻譯字串嗎?此動作無法復原。", - "newTranslationPopup-title": "新的自訂翻譯字串", - "editTranslationPopup-title": "編輯自訂翻譯字串", - "settingsTranslationPopup-title": "刪除此自訂翻譯字串?", - "translation": "翻譯", + "uploading": "Uploading", + "remaining_time": "Remaining time", + "speed": "Speed", + "progress": "Progress", + "password-again": "Password (again)", + "if-you-already-have-an-account": "If you already have an account", + "register": "Register", + "forgot-password": "Forgot password", + "minicardDetailsActionsPopup-title": "卡片內容", + "Mongo_sessions_count": "Mongo sessions count", + "change-visibility": "更改可見度", + "max-upload-filesize": "Max upload filesize in bytes:", + "allowed-upload-filetypes": "Allowed upload filetypes:", + "max-avatar-filesize": "Max avatar filesize in bytes:", + "allowed-avatar-filetypes": "Allowed avatar filetypes:", + "invalid-file": "If filename is invalid, upload or rename is cancelled.", + "preview-pdf-not-supported": "Your device does not support previewing PDF. Try downloading instead.", + "drag-board": "Drag board", + "translation-number": "The number of custom translation strings is:", + "delete-translation-confirm-popup": "Are you sure you want to delete this custom translation string? There is no undo.", + "newTranslationPopup-title": "New custom translation string", + "editTranslationPopup-title": "Edit custom translation string", + "settingsTranslationPopup-title": "Delete this custom translation string?", + "translation": "Translation", "text": "文字", - "translation-text": "翻譯文字", - "show-subtasks-field": "顯示子工作項目欄位", - "show-week-of-year": "顯示年度週數 (ISO 8601)", - "convert-to-markdown": "轉換為 Markdown", - "import-board-zip": "新增包含看板 JSON 檔案與帶有附件的看板名稱子目錄的 .zip 檔案", - "collapse": "損毀", - "uncollapse": "展開", - "hideCheckedChecklistItems": "隱藏已勾選的待辦清單項目", - "hideAllChecklistItems": "隱藏所有待辦清單項目", - "support": "支援", - "supportPopup-title": "支援", - "accessibility-page-enabled": "已啟用無障礙頁面", - "accessibility-title": "無障礙主題", - "accessibility-content": "無障礙內容" + "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", + "show-subtasks-field": "Show subtasks field", + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zh.i18n.json b/imports/i18n/data/zh.i18n.json index 44b4a7048..a19c5ad95 100644 --- a/imports/i18n/data/zh.i18n.json +++ b/imports/i18n/data/zh.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "進階篩選可以使用包含如下運算子的字串進行過濾:== != <= >= && || ( ) 。運算子之間用空格隔開。輸入文字和數值就可以過濾所有自訂內容。例如:Field1 == Value1。注意:如果內容或數值包含空格,需要用單引號。例如: 'Field 1' == 'Value 1'。要跳過單個控制字元(' \\\\/),請使用 \\\\ 跳脫字元。例如: Field1 = I\\\\'m。支援組合使用多個條件,例如: F1 == V1 || F1 == V2。通常以從左到右的順序進行判斷。可以透過括號修改順序,例如:F1 == V1 && ( F2 == V2 || F2 == V3 )。也支援使用 正規表示式 (Regex) 搜尋內容。", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zu-ZA.i18n.json b/imports/i18n/data/zu-ZA.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/zu-ZA.i18n.json +++ b/imports/i18n/data/zu-ZA.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/data/zu.i18n.json b/imports/i18n/data/zu.i18n.json index 78b62d375..5c932b5ef 100644 --- a/imports/i18n/data/zu.i18n.json +++ b/imports/i18n/data/zu.i18n.json @@ -49,7 +49,6 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %s", "activity-customfield-created": "created custom field %s", "activity-excluded": "excluded %s from %s", "activity-imported": "imported %s into %s from %s", @@ -86,12 +85,10 @@ "add-card": "Add Card", "add-card-to-top-of-list": "Add Card to Top of List", "add-card-to-bottom-of-list": "Add Card to Bottom of List", - "setListWidthPopup-title": "Set Widths", - "set-list-width": "Set Widths", - "set-list-width-value": "Set Min & Max Widths (pixels)", - "list-width-error-message": "List widths must be integers greater than 100", - "keyboard-shortcuts-enabled": "Keyboard shortcuts enabled. Click to disable.", - "keyboard-shortcuts-disabled": "Keyboard shortcuts disabled. Click to enable.", + "setListWidthPopup-title": "Set List Width", + "set-list-width": "Set List Width", + "set-list-width-value": "List Width (pixels)", + "list-width-error-message": "List width must be a positive integer", "setSwimlaneHeightPopup-title": "Set Swimlane Height", "set-swimlane-height": "Set Swimlane Height", "set-swimlane-height-value": "Swimlane Height (pixels)", @@ -116,7 +113,7 @@ "admin-announcement": "Announcement", "admin-announcement-active": "Active System-Wide Announcement", "admin-announcement-title": "Announcement from Administrator", - "all-boards": "All Boards", + "all-boards": "All boards", "and-n-other-card": "And __count__ other card", "and-n-other-card_plural": "And __count__ other cards", "apply": "Apply", @@ -266,9 +263,6 @@ "checklists": "Checklists", "click-to-star": "Click to star this board.", "click-to-unstar": "Click to unstar this board.", - "click-to-enable-auto-width": "Auto list width disabled. Click to enable.", - "click-to-disable-auto-width": "Auto list width enabled. Click to disable.", - "auto-list-width": "Auto list width", "clipboard": "Clipboard or drag & drop", "close": "Close", "close-board": "Close Board", @@ -300,7 +294,6 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +376,6 @@ "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-vertical-scrollbars": "Enable vertical scrollbars", "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", @@ -451,7 +443,7 @@ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "fullname": "Full Name", "header-logo-title": "Go back to your boards page.", - "show-activities": "Show Activities", + "hide-system-messages": "Hide system messages", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +572,12 @@ "select-board": "Select Board", "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list", "setWipLimitPopup-title": "Set WIP Limit", - "shortcut-add-self": "Add yourself to current card", "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-filter-my-assigned-cards": "Filter my assigned cards", "shortcut-show-shortcuts": "Bring up this shortcuts list", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +600,6 @@ "has-spenttime-cards": "Has spent time cards", "time": "Time", "title": "Title", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", "toggle-labels": "Toggle labels 1-9 for card. Multi-Selection adds labels 1-9", "remove-labels-multiselect": "Multi-Selection removes labels 1-9", "tracking": "Tracking", @@ -966,7 +955,6 @@ "delete-linked-card-before-this-card": "You can not delete this card before first deleting linked card that has", "delete-linked-cards-before-this-list": "You can not delete this list before first deleting linked cards that are pointing to cards in this list", "hide-checked-items": "Hide checked items", - "hide-finished-checklist": "Hide finished checklist", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -1120,8 +1108,8 @@ "created-at-newest-first": "Created At (Newest First)", "created-at-oldest-first": "Created At (Oldest First)", "links-heading": "Links", - "hide-activities-of-all-boards": "Don't show the board activities on all boards", - "now-activities-of-all-boards-are-hidden": "Now all activities of all boards are hidden", + "hide-system-messages-of-all-users": "Hide system messages of all users", + "now-system-messages-of-all-users-are-hidden": "Now system messages of all users are hidden", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1117,6 @@ "custom-field-stringtemplate-separator": "Separator (use or   for a space)", "custom-field-stringtemplate-item-placeholder": "Press enter to add more items", "creator": "Creator", - "creator-on-minicard": "Creator on minicard", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1191,7 @@ "checklistActionsPopup-title": "Checklist Actions", "moveChecklist": "Move Checklist", "moveChecklistPopup-title": "Move Checklist", - "newlineBecomesNewChecklistItem": "Each line of text becomes one of the checklist items", - "newLineNewItem": "One line of text = one checklist item", - "newlineBecomesNewChecklistItemOriginOrder": "Each line of text becomes one of the checklist items, original order", - "originOrder": "original order", + "newlineBecomesNewChecklistItem": "Newline becomes new checklist item", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1256,17 +1240,8 @@ "translation": "Translation", "text": "Text", "translation-text": "Translation text", + "show-at-minicard": "Show at minicard", + "show-checklist-at-minicard": "Show checklist at minicard", "show-subtasks-field": "Show subtasks field", - "show-week-of-year": "Show week of year (ISO 8601)", - "convert-to-markdown": "Convert to markdown", - "import-board-zip": "Add .zip file that has board JSON files, and board name subdirectories with attachments", - "collapse": "Collapse", - "uncollapse": "Uncollapse", - "hideCheckedChecklistItems": "Hide checked checklist items", - "hideAllChecklistItems": "Hide all checklist items", - "support": "Support", - "supportPopup-title": "Support", - "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "convert-to-markdown": "Convert to markdown" } diff --git a/imports/i18n/languages.js b/imports/i18n/languages.js index 5bb4201c1..2cff9ff5f 100644 --- a/imports/i18n/languages.js +++ b/imports/i18n/languages.js @@ -76,7 +76,7 @@ export default { code: "br", tag: "br", name: "Brezhoneg", - load: () => import('./data/br.i18n.json'), + load: () => import('./data/xxx.i18n.json'), }, "ca": { code: "ca", @@ -88,7 +88,7 @@ export default { code: "ca", tag: "ca-ES", name: "català (Espanya)", - load: () => import('./data/ca_ES.i18n.json'), + load: () => import('./data/ca-ES.i18n.json'), }, "cmn": { code: "cn", @@ -138,12 +138,6 @@ export default { name: "Deutsch (Schweiz)", load: () => import('./data/de-CH.i18n.json'), }, - "de-DE": { - code: "de", - tag: "de-DE", - name: "Deutsch (Deutschland)", - load: () => import('./data/de_DE.i18n.json'), - }, "de": { code: "de", tag: "de", @@ -514,12 +508,6 @@ export default { name: "Occitan", load: () => import('./data/oc.i18n.json'), }, - "or-IN": { - code: "or", - tag: "or-IN", - name: "ଓଡିଆ (ଭାରତ)", - load: () => import('./data/or_IN.i18n.json'), - }, "pa": { code: "pa", tag: "pa", @@ -568,6 +556,12 @@ export default { name: "Română (România)", load: () => import('./data/ro-RO.i18n.json'), }, + "ru-UA": { + code: "ru", + tag: "ru-UA", + name: "Русский (Украина)", + load: () => import('./data/ru-UA.i18n.json'), + }, "ru": { code: "ru", tag: "ru", @@ -610,12 +604,6 @@ export default { name: "தமிழ்", load: () => import('./data/ta.i18n.json'), }, - "te-IN": { - code: "te", - tag: "te_IN", - name: "తెలుగు (భారతదేశం)", - load: () => import('./data/te-IN.i18n.json'), - }, "th": { code: "th", tag: "th", @@ -634,6 +622,18 @@ export default { name: "Türkçe", load: () => import('./data/tr.i18n.json'), }, + "ua-UA": { + code: "ua", + tag: "ua-UA", + name: "українська (Україна)", + load: () => import('./data/ua-UA.i18n.json'), + }, + "ua": { + code: "ua", + tag: "ua", + name: "українська (Україна)", + load: () => import('./data/ua.i18n.json'), + }, "ug": { code: "ug", tag: "ug", diff --git a/imports/i18n/tap.js b/imports/i18n/tap.js index b23f83ef3..db865d35e 100644 --- a/imports/i18n/tap.js +++ b/imports/i18n/tap.js @@ -20,7 +20,7 @@ export const TAPi18n = { cleanCode: true, // Show translations debug messages only when DEBUG=true // OLD: debug: Meteor.isDevelopment, - debug: process.env.DEBUG === 'true', + debug: process.env.DEBUG, supportedLngs: Object.values(languages).map(({ tag }) => tag), ns: DEFAULT_NAMESPACE, defaultNs: DEFAULT_NAMESPACE, diff --git a/imports/reactiveCache.js b/imports/reactiveCache.js index ebacc96cd..11e63b238 100644 --- a/imports/reactiveCache.js +++ b/imports/reactiveCache.js @@ -128,6 +128,9 @@ ReactiveCacheServer = { return ret; }, getUsers(selector = {}, options = {}, getQuery = false) { + // getUsers(selector, options, getQuery) { + // let ret = Users.find(undefined, {}); + // console.log("getUser count: ", ret.count()) let ret = Users.find(selector, options); if (getQuery !== true) { ret = ret.fetch(); diff --git a/docs/Login/ldap-sync/ldap-sync.py b/ldap-sync/ldap-sync.py similarity index 100% rename from docs/Login/ldap-sync/ldap-sync.py rename to ldap-sync/ldap-sync.py diff --git a/meta/icons/wekan-128.svg b/meta/icons/wekan-128.svg index 29d783ac5..d6e1ac5be 100644 --- a/meta/icons/wekan-128.svg +++ b/meta/icons/wekan-128.svg @@ -1 +1,72 @@ -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" id="Layer_1" x="0" y="0" version="1.1" viewBox="-10 12 128 128"><style>.st4{clip-path:url(#SVGID_2_);fill:none}</style><path d="M111.3 139.8H1.2c-3.7 0-6.8-3-6.8-6.8V22.8c0-3.7 3-6.8 6.8-6.8h110.1c3.7 0 6.8 3 6.8 6.8v110.3c-.1 3.7-3.1 6.7-6.8 6.7" style="opacity:.6;fill:#d1d1d1"/><defs><path id="SVGID_1_" d="M107 135.8H-3.3c-3.7 0-6.8-3-6.8-6.8V18.8C-10 15-7 12-3.3 12H107c3.7 0 6.8 3 6.8 6.7V129c0 3.7-3.1 6.8-6.8 6.8"/></defs><clipPath id="SVGID_2_"><use xlink:href="#SVGID_1_" style="overflow:visible"/></clipPath><linearGradient id="SVGID_3_" x1="51.878" x2="51.878" y1="135.756" y2="12" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#007c8f"/><stop offset=".371" style="stop-color:#007088"/><stop offset="1" style="stop-color:#005377"/></linearGradient><path d="M107 135.8H-3.3c-3.7 0-6.8-3-6.8-6.8V18.8C-10 15-7 12-3.3 12H107c3.7 0 6.8 3 6.8 6.7V129c0 3.7-3.1 6.8-6.8 6.8" style="clip-path:url(#SVGID_2_);fill:url(#SVGID_3_)"/><path d="M81.3 102.6H21.8c-1.7 0-3-1.3-3-3V46.7c0-1.7 1.3-3 3-3h59.5c1.7 0 3 1.3 3 3v52.9c0 1.7-1.3 3-3 3z" style="clip-path:url(#SVGID_2_);fill:none;stroke:#7addfc;stroke-miterlimit:10"/><path d="M81.3 38H21.8c-1.7 0-3-1.3-3-3V-2.4c0-1.7 1.3-3 3-3h59.5c1.7 0 3 1.3 3 3V35c0 1.7-1.3 3-3 3zm0 113.8H21.8c-1.7 0-3-1.3-3-3v-37.5c0-1.7 1.3-3 3-3h59.5c1.7 0 3 1.3 3 3v37.5c0 1.7-1.3 3-3 3zm71.8-83.2H93.5c-1.7 0-3-1.3-3-3V-1.2c0-1.7 1.3-3 3-3H153c1.7 0 3 1.3 3 3v66.9c.1 1.6-1.3 2.9-2.9 2.9zm0 90.2H93.5c-1.7 0-3-1.3-3-3V77.3c0-1.7 1.3-3 3-3H153c1.7 0 3 1.3 3 3v78.5c.1 1.7-1.3 3-2.9 3zM9.9 68.6h-59.5c-1.7 0-3-1.3-3-3V-1.2c0-1.7 1.3-3 3-3H9.9c1.7 0 3 1.3 3 3v66.9c0 1.6-1.3 2.9-3 2.9zm0 90.2h-59.5c-1.7 0-3-1.3-3-3V77.3c0-1.7 1.3-3 3-3H9.9c1.7 0 3 1.3 3 3v78.5c0 1.7-1.3 3-3 3z" style="stroke:#529fdd;stroke-miterlimit:10;clip-path:url(#SVGID_2_);fill:none"/><path d="M100.4 135.8H3.3c-7.4 0-13.3-6-13.3-13.3V25.3C-10 18-4 12 3.3 12h97.1c7.4 0 13.3 6 13.3 13.3v97.1c.1 7.4-5.9 13.4-13.3 13.4" class="st4"/><path d="M107 135.8H-3.3c-3.7 0-6.8-3-6.8-6.8V18.8C-10 15-7 12-3.3 12H107c3.7 0 6.8 3 6.8 6.7V129c0 3.7-3.1 6.8-6.8 6.8" class="st4"/><path d="M74.5 82.3c.4-.6.7-1.2 1-1.8 0-.1.1-.2.1-.3V80c0-.1-.7-.1-.9.1s-.9 2.3-3.2 4.3c-1.3 1.2-2.8 1.5-4.1 1.4-1-.1-1.7-.7-2.2-1.8-.4-1.1-.5-2.5-.1-4.2.7-3.1 1.5-4.7 2.5-4.7.7 0 .7 1.2.1 3.5-.5 1.7-1.2 2.8-2.1 3.4-.3.2-.4.3-.4.4s.3.1.7 0c1.5-.4 3-1 4.2-1.8 1.3-.8 2-1.6 2.3-2.5.2-1-.1-1.8-.9-2.5q-1.35-1.05-3.3-1.2c-1.3-.1-2.6.2-3.9.7l.1-.1c2.1-3.2 3.5-6.2 4.4-9.1s.6-5-.7-6.4c-.5-.4-1.2-.7-2.2-1-1.9-.5-4-1.1-2.4 1 .2.4.4.8.5 1.2.3 1.5.2 3.4-.4 5.7s-1.4 4.8-2.6 7.3-2.4 4.8-3.8 6.7c-1.4 2-2.7 3.3-4 4.1 0-.2-.1-.4-.1-.5v-1.2c0-.4.1-.7.1-1 .3-2 .7-4.1 1.1-6.3.5-2.2.9-4.2 1.4-6 .3-1.1.5-2 .6-2.5s0-1-.2-1.2c-.2-.3-.6-.6-1.3-.9-.4-.2-.9-.5-1.5-.8-1.3-.7-1.3-.7-1.7.6-.3 1.2-1 2.8-1.9 5s-1.8 4.5-2.9 6.8c-1.1 2.4-2.1 4.3-3 6-1 1.6-1.8 2.5-2.4 2.5q-.15 0-.3-.3c0-.1-.1-.3-.1-.6 0-.4 0-.8.1-1.2s.1-.7.2-1c.3-1.3.6-2.9 1.1-4.7s.9-3.6 1.4-5.4.9-3.2 1.3-4.5c.5-1.5.8-2.6.9-3.1s-.2-1-.8-1.3c-.5-.3-1.3-.7-2.4-1.4-.8-.5-1.2-.4-2-.1-2 .7-4.1 1.6-6.1 2.6-2.4 1.2-4.6 2.4-6.4 3.6s-3 2.3-3.5 3.3c-.6 1.2-.5 2.4.2 3.6.4.6.9 1.2 1.5 1.7 2.5 1.7 1.7.7 1.9-1.3.1-.7.3-1.4.7-2 .8-1.4 2.3-3 4.6-4.8s4.7-3.2 7.4-4.3c-.5 1.8-1 3.8-1.6 5.9s-1.1 4.2-1.6 6.2-.8 3.6-1.1 5c-.1.7-.2 1.3-.2 1.8 0 .6.2 1.1.6 1.7.4.5.9 1 1.5 1.3.6.4 1.2.5 1.8.5 1.3-.1 2.5-.9 3.7-2.6q1.8-2.4 3.3-6t2.7-6.9c-.4 1.8-.7 3.6-1 5.3s-.5 3.3-.7 4.6c-.1.7-.1 1.3-.1 1.8 0 .6.3 1.1.7 1.7.4.5.9 1 1.5 1.3s1.2.5 1.9.6c1.3 0 3-1.1 5.2-3.4.5-.5 1.1-1.1 1.6-1.7-.1 1.6.4 2.8 1.6 3.8 1.4 1.1 3.1 1.6 5 1.7 2 .1 3.9-.5 5.5-1.7 1.4-.3 2.4-1.3 3.1-2.4" style="clip-path:url(#SVGID_2_);fill:#fff"/><path d="M107 135.8H-3.3c-3.7 0-6.8-3-6.8-6.8V18.8C-10 15-7 12-3.3 12H107c3.7 0 6.8 3 6.8 6.7V129c0 3.7-3.1 6.8-6.8 6.8" class="st4"/><path d="M107 135.8H-3.3c-3.7 0-6.8-3-6.8-6.8V18.8C-10 15-7 12-3.3 12H107c3.7 0 6.8 3 6.8 6.7V129c0 3.7-3.1 6.8-6.8 6.8" class="st4"/><path d="M107 135.8H-3.3c-3.7 0-6.8-3-6.8-6.8V18.8C-10 15-7 12-3.3 12H107c3.7 0 6.8 3 6.8 6.7V129c0 3.7-3.1 6.8-6.8 6.8" class="st4"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-10 12 128 128" style="enable-background:new -10 12 128 128;" xml:space="preserve"> +<style type="text/css"> + .st0{opacity:0.6;fill:#D1D1D1;} + .st1{clip-path:url(#SVGID_2_);fill:url(#SVGID_3_);} + .st2{clip-path:url(#SVGID_2_);fill:none;stroke:#7ADDFC;stroke-miterlimit:10;} + .st3{clip-path:url(#SVGID_2_);fill:none;stroke:#529FDD;stroke-miterlimit:10;} + .st4{clip-path:url(#SVGID_2_);fill:none;} + .st5{clip-path:url(#SVGID_2_);fill:#FFFFFF;} +</style> +<path class="st0" d="M111.3,139.8H1.2c-3.7,0-6.8-3-6.8-6.8V22.8c0-3.7,3-6.8,6.8-6.8h110.1c3.7,0,6.8,3,6.8,6.8v110.3 + C118,136.8,115,139.8,111.3,139.8z"/> +<g> + <defs> + <path id="SVGID_1_" d="M107,135.8H-3.3c-3.7,0-6.8-3-6.8-6.8V18.8C-10,15-7,12-3.3,12H107c3.7,0,6.8,3,6.8,6.7V129 + C113.8,132.7,110.7,135.8,107,135.8z"/> + </defs> + <clipPath id="SVGID_2_"> + <use xlink:href="#SVGID_1_" style="overflow:visible;"/> + </clipPath> + <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="51.8779" y1="135.7558" x2="51.8779" y2="12"> + <stop offset="0" style="stop-color:#007C8F"/> + <stop offset="0.3707" style="stop-color:#007088"/> + <stop offset="1" style="stop-color:#005377"/> + </linearGradient> + <path class="st1" d="M107,135.8H-3.3c-3.7,0-6.8-3-6.8-6.8V18.8C-10,15-7,12-3.3,12H107c3.7,0,6.8,3,6.8,6.7V129 + C113.8,132.7,110.7,135.8,107,135.8z"/> + <path class="st2" d="M81.3,102.6H21.8c-1.7,0-3-1.3-3-3V46.7c0-1.7,1.3-3,3-3h59.5c1.7,0,3,1.3,3,3v52.9 + C84.3,101.3,83,102.6,81.3,102.6z"/> + <path class="st3" d="M81.3,38H21.8c-1.7,0-3-1.3-3-3V-2.4c0-1.7,1.3-3,3-3h59.5c1.7,0,3,1.3,3,3V35C84.3,36.7,83,38,81.3,38z"/> + <path class="st3" d="M81.3,151.8H21.8c-1.7,0-3-1.3-3-3v-37.5c0-1.7,1.3-3,3-3h59.5c1.7,0,3,1.3,3,3v37.5 + C84.3,150.5,83,151.8,81.3,151.8z"/> + <path class="st3" d="M153.1,68.6H93.5c-1.7,0-3-1.3-3-3V-1.2c0-1.7,1.3-3,3-3h59.5c1.7,0,3,1.3,3,3v66.9 + C156.1,67.3,154.7,68.6,153.1,68.6z"/> + <path class="st3" d="M153.1,158.8H93.5c-1.7,0-3-1.3-3-3V77.3c0-1.7,1.3-3,3-3h59.5c1.7,0,3,1.3,3,3v78.5 + C156.1,157.5,154.7,158.8,153.1,158.8z"/> + <path class="st3" d="M9.9,68.6h-59.5c-1.7,0-3-1.3-3-3V-1.2c0-1.7,1.3-3,3-3H9.9c1.7,0,3,1.3,3,3v66.9 + C12.9,67.3,11.6,68.6,9.9,68.6z"/> + <path class="st3" d="M9.9,158.8h-59.5c-1.7,0-3-1.3-3-3V77.3c0-1.7,1.3-3,3-3H9.9c1.7,0,3,1.3,3,3v78.5 + C12.9,157.5,11.6,158.8,9.9,158.8z"/> + <path class="st4" d="M100.4,135.8H3.3c-7.4,0-13.3-6-13.3-13.3V25.3C-10,18-4,12,3.3,12h97.1c7.4,0,13.3,6,13.3,13.3v97.1 + C113.8,129.8,107.8,135.8,100.4,135.8z"/> + <path class="st4" d="M107,135.8H-3.3c-3.7,0-6.8-3-6.8-6.8V18.8C-10,15-7,12-3.3,12H107c3.7,0,6.8,3,6.8,6.7V129 + C113.8,132.7,110.7,135.8,107,135.8z"/> + <path class="st5" d="M74.5,82.3c0.4-0.6,0.7-1.2,1-1.8c0-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.1,0-0.2c0-0.1-0.7-0.1-0.9,0.1 + c-0.2,0.2-0.9,2.3-3.2,4.3c-1.3,1.2-2.8,1.5-4.1,1.4c-1-0.1-1.7-0.7-2.2-1.8c-0.4-1.1-0.5-2.5-0.1-4.2c0.7-3.1,1.5-4.7,2.5-4.7 + c0.7,0,0.7,1.2,0.1,3.5c-0.5,1.7-1.2,2.8-2.1,3.4c-0.3,0.2-0.4,0.3-0.4,0.4c0,0.1,0.3,0.1,0.7,0c1.5-0.4,3-1,4.2-1.8 + c1.3-0.8,2-1.6,2.3-2.5c0.2-1-0.1-1.8-0.9-2.5c-0.9-0.7-2-1.1-3.3-1.2c-1.3-0.1-2.6,0.2-3.9,0.7c0,0,0.1-0.1,0.1-0.1 + c2.1-3.2,3.5-6.2,4.4-9.1c0.9-2.9,0.6-5-0.7-6.4c-0.5-0.4-1.2-0.7-2.2-1c-1.9-0.5-4-1.1-2.4,1c0.2,0.4,0.4,0.8,0.5,1.2 + c0.3,1.5,0.2,3.4-0.4,5.7c-0.6,2.3-1.4,4.8-2.6,7.3c-1.2,2.5-2.4,4.8-3.8,6.7c-1.4,2-2.7,3.3-4,4.1c0-0.2-0.1-0.4-0.1-0.5 + c0-0.4,0-0.8,0-1.2c0-0.4,0.1-0.7,0.1-1c0.3-2,0.7-4.1,1.1-6.3c0.5-2.2,0.9-4.2,1.4-6c0.3-1.1,0.5-2,0.6-2.5c0.1-0.5,0-1-0.2-1.2 + c-0.2-0.3-0.6-0.6-1.3-0.9c-0.4-0.2-0.9-0.5-1.5-0.8c-1.3-0.7-1.3-0.7-1.7,0.6c-0.3,1.2-1,2.8-1.9,5c-0.9,2.2-1.8,4.5-2.9,6.8 + c-1.1,2.4-2.1,4.3-3,6c-1,1.6-1.8,2.5-2.4,2.5c-0.1,0-0.2-0.1-0.3-0.3c0-0.1-0.1-0.3-0.1-0.6c0-0.4,0-0.8,0.1-1.2 + c0.1-0.4,0.1-0.7,0.2-1c0.3-1.3,0.6-2.9,1.1-4.7c0.5-1.8,0.9-3.6,1.4-5.4c0.5-1.8,0.9-3.2,1.3-4.5c0.5-1.5,0.8-2.6,0.9-3.1 + c0.1-0.5-0.2-1-0.8-1.3c-0.5-0.3-1.3-0.7-2.4-1.4c-0.8-0.5-1.2-0.4-2-0.1c-2,0.7-4.1,1.6-6.1,2.6c-2.4,1.2-4.6,2.4-6.4,3.6 + c-1.8,1.2-3,2.3-3.5,3.3c-0.6,1.2-0.5,2.4,0.2,3.6c0.4,0.6,0.9,1.2,1.5,1.7c2.5,1.7,1.7,0.7,1.9-1.3c0.1-0.7,0.3-1.4,0.7-2 + c0.8-1.4,2.3-3,4.6-4.8c2.3-1.8,4.7-3.2,7.4-4.3c-0.5,1.8-1,3.8-1.6,5.9c-0.6,2.1-1.1,4.2-1.6,6.2c-0.5,2-0.8,3.6-1.1,5 + c-0.1,0.7-0.2,1.3-0.2,1.8c0,0.6,0.2,1.1,0.6,1.7c0.4,0.5,0.9,1,1.5,1.3c0.6,0.4,1.2,0.5,1.8,0.5c1.3-0.1,2.5-0.9,3.7-2.6 + c1.2-1.6,2.3-3.6,3.3-6c1-2.4,1.9-4.7,2.7-6.9c-0.4,1.8-0.7,3.6-1,5.3c-0.3,1.7-0.5,3.3-0.7,4.6c-0.1,0.7-0.1,1.3-0.1,1.8 + c0,0.6,0.3,1.1,0.7,1.7c0.4,0.5,0.9,1,1.5,1.3c0.6,0.3,1.2,0.5,1.9,0.6c1.3,0,3-1.1,5.2-3.4c0.5-0.5,1.1-1.1,1.6-1.7 + c-0.1,1.6,0.4,2.8,1.6,3.8c1.4,1.1,3.1,1.6,5,1.7c2,0.1,3.9-0.5,5.5-1.7C72.8,84.4,73.8,83.4,74.5,82.3z"/> + <path class="st4" d="M107,135.8H-3.3c-3.7,0-6.8-3-6.8-6.8V18.8C-10,15-7,12-3.3,12H107c3.7,0,6.8,3,6.8,6.7V129 + C113.8,132.7,110.7,135.8,107,135.8z"/> + <path class="st4" d="M107,135.8H-3.3c-3.7,0-6.8-3-6.8-6.8V18.8C-10,15-7,12-3.3,12H107c3.7,0,6.8,3,6.8,6.7V129 + C113.8,132.7,110.7,135.8,107,135.8z"/> + <path class="st4" d="M107,135.8H-3.3c-3.7,0-6.8-3-6.8-6.8V18.8C-10,15-7,12-3.3,12H107c3.7,0,6.8,3,6.8,6.7V129 + C113.8,132.7,110.7,135.8,107,135.8z"/> +</g> +</svg> diff --git a/meta/icons/wekan-150.svg b/meta/icons/wekan-150.svg index 634d62f36..51d4eedec 100644 --- a/meta/icons/wekan-150.svg +++ b/meta/icons/wekan-150.svg @@ -1 +1,68 @@ -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" id="Layer_1" x="0" y="0" version="1.1" viewBox="-21 1 150 150"><style>.st4{clip-path:url(#SVGID_2_);fill:none}</style><defs><path id="SVGID_1_" d="M-21 1h150v150H-21z"/></defs><clipPath id="SVGID_2_"><use xlink:href="#SVGID_1_" style="overflow:visible"/></clipPath><path d="M127.8 156H-8.7c-3.7 0-6.8-3-6.8-6.8V12.7c0-3.7 3-6.8 6.8-6.8h136.5c3.7 0 6.7 3 6.7 6.8v136.5c0 3.7-3 6.8-6.7 6.8" style="opacity:.6;clip-path:url(#SVGID_2_);fill:#d1d1d1"/><linearGradient id="SVGID_3_" x1="54" x2="54" y1="151" y2="1" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#007c8f"/><stop offset=".371" style="stop-color:#007088"/><stop offset="1" style="stop-color:#005377"/></linearGradient><path d="M-21 1h150v150H-21z" style="clip-path:url(#SVGID_2_);fill:url(#SVGID_3_)"/><path d="M90.3 110.9H16.9c-1.7 0-3-1.3-3-3V42.4c0-1.7 1.3-3 3-3h73.4c1.7 0 3 1.3 3 3v65.4c0 1.7-1.3 3.1-3 3.1z" style="clip-path:url(#SVGID_2_);fill:none;stroke:#7addfc;stroke-miterlimit:10"/><path d="M90.3 32.6H16.9c-1.7 0-3-1.3-3-3v-46.7c0-1.7 1.3-3 3-3h73.4c1.7 0 3 1.3 3 3v46.7c0 1.6-1.3 3-3 3zm0 137.9H16.9c-1.7 0-3-1.3-3-3v-46.7c0-1.7 1.3-3 3-3h73.4c1.7 0 3 1.3 3 3v46.7c0 1.6-1.3 3-3 3zm87-100.8h-73.4c-1.7 0-3-1.3-3-3v-82.3c0-1.7 1.3-3 3-3h73.4c1.7 0 3 1.3 3 3v82.3c0 1.6-1.4 3-3 3zm0 109.3h-73.4c-1.7 0-3-1.3-3-3V79.5c0-1.7 1.3-3 3-3h73.4c1.7 0 3 1.3 3 3V176c0 1.6-1.4 3-3 3zM3.8 69.7h-73.4c-1.7 0-3-1.3-3-3v-82.3c0-1.7 1.3-3 3-3H3.8c1.7 0 3 1.3 3 3v82.3c0 1.6-1.4 3-3 3zm0 109.3h-73.4c-1.7 0-3-1.3-3-3V79.5c0-1.7 1.3-3 3-3H3.8c1.7 0 3 1.3 3 3V176c0 1.6-1.4 3-3 3z" style="stroke:#529fdd;stroke-miterlimit:10;clip-path:url(#SVGID_2_);fill:none"/><path d="M115.7 151H-7.7c-7.4 0-13.3-6-13.3-13.3V14.3C-21 7-15 1-7.7 1h123.3C123 1 129 7 129 14.3v123.3c0 7.4-6 13.4-13.3 13.4" class="st4"/><path d="M122.3 151H-14.3c-3.7 0-6.8-3-6.8-6.8V7.8C-21 4-18 1-14.3 1h136.5c3.7 0 6.8 3 6.8 6.8v136.5c0 3.7-3 6.7-6.7 6.7" class="st4"/><path d="M81.4 86.2c.5-.7.9-1.5 1.2-2.2.1-.1.1-.2.1-.4 0-.1.1-.2 0-.2 0-.1-.8-.1-1.1.1-.2.2-1.1 2.7-3.9 5.2-1.6 1.4-3.3 1.9-4.9 1.7-1.2-.1-2.1-.9-2.6-2.2-.5-1.4-.6-3-.2-5.1.8-3.8 1.8-5.7 3.1-5.7.8 0 .9 1.4.1 4.3-.6 2-1.5 3.4-2.5 4.1-.4.2-.5.4-.5.5 0 .2.3.2.8 0q2.85-.75 5.1-2.1c1.5-1 2.5-2 2.8-3 .3-1.2-.1-2.2-1.1-3s-2.4-1.3-4-1.4-3.2.2-4.7.9c0-.1.1-.1.1-.2 2.5-3.9 4.3-7.5 5.3-11.1 1.1-3.5.8-6.1-.9-7.7q-.9-.75-2.7-1.2c-2.3-.6-4.8-1.4-2.9 1.2q.45.75.6 1.5c.4 1.8.3 4.1-.4 6.9s-1.8 5.8-3.2 8.8-2.9 5.8-4.6 8.2-3.3 4.1-4.9 5c-.1-.2-.1-.4-.1-.6V87c0-.5.1-.9.1-1.2.4-2.4.8-5 1.4-7.7s1.1-5.1 1.6-7.3c.4-1.4.6-2.4.7-3.1s0-1.2-.2-1.5-.8-.7-1.6-1.1c-.5-.3-1.1-.6-1.9-1-1.5-.9-1.6-.9-2.1.7-.4 1.4-1.2 3.4-2.3 6.1-1 2.7-2.2 5.4-3.5 8.3s-2.5 5.3-3.7 7.2c-1.2 2-2.1 3-2.9 3q-.3 0-.3-.3c0-.2-.1-.4-.1-.7 0-.5.1-1 .1-1.5.1-.5.2-.9.2-1.2.3-1.6.8-3.5 1.3-5.7.6-2.2 1.2-4.4 1.7-6.5q.9-3.15 1.5-5.4c.6-1.9 1-3.1 1.1-3.8.1-.6-.3-1.2-1-1.6-.6-.3-1.6-.9-2.9-1.7-1-.6-1.4-.5-2.4-.2-2.5.9-4.9 1.9-7.5 3.1-3 1.4-5.6 2.9-7.8 4.3-2.2 1.5-3.6 2.8-4.2 4-.7 1.5-.6 3 .2 4.4.5.8 1.1 1.5 1.9 2.1 3 2.1 2 .9 2.3-1.5.1-.9.4-1.7.8-2.4 1-1.7 2.8-3.6 5.6-5.8 2.7-2.1 5.7-3.9 9-5.2-.6 2.2-1.2 4.6-1.9 7.2s-1.3 5.1-1.9 7.5-1 4.4-1.3 6c-.2.8-.2 1.5-.2 2.2s.3 1.4.7 2.1c.5.7 1.1 1.2 1.8 1.6s1.4.6 2.2.6c1.6-.1 3.1-1.1 4.5-3.1 1.5-2 2.8-4.4 4-7.2s2.3-5.6 3.2-8.4c-.5 2.2-.9 4.4-1.2 6.5-.4 2.1-.6 4-.8 5.6-.1.8-.1 1.5-.1 2.2q.15 1.05.9 2.1c.5.7 1.1 1.2 1.9 1.6.7.4 1.5.6 2.3.7 1.5 0 3.6-1.4 6.3-4.1.6-.7 1.3-1.4 1.9-2.1-.1 1.9.5 3.4 2 4.5 1.7 1.3 3.7 2 6.1 2.1s4.7-.7 6.6-2.1c1.9-.6 3-1.8 3.9-3.1" style="clip-path:url(#SVGID_2_);fill:#fff"/><path d="M122.3 151H-14.3c-3.7 0-6.8-3-6.8-6.8V7.8C-21 4-18 1-14.3 1h136.5c3.7 0 6.8 3 6.8 6.8v136.5c0 3.7-3 6.7-6.7 6.7" class="st4"/><path d="M122.3 151H-14.3c-3.7 0-6.8-3-6.8-6.8V7.8C-21 4-18 1-14.3 1H129v143.3c0 3.7-3 6.7-6.7 6.7" class="st4"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-21 1 150 150" style="enable-background:new -21 1 150 150;" xml:space="preserve"> +<style type="text/css"> + .st0{opacity:0.6;clip-path:url(#SVGID_2_);fill:#D1D1D1;} + .st1{clip-path:url(#SVGID_2_);fill:url(#SVGID_3_);} + .st2{clip-path:url(#SVGID_2_);fill:none;stroke:#7ADDFC;stroke-miterlimit:10;} + .st3{clip-path:url(#SVGID_2_);fill:none;stroke:#529FDD;stroke-miterlimit:10;} + .st4{clip-path:url(#SVGID_2_);fill:none;} + .st5{clip-path:url(#SVGID_2_);fill:#FFFFFF;} +</style> +<g> + <defs> + <rect id="SVGID_1_" x="-21" y="1" width="150" height="150"/> + </defs> + <clipPath id="SVGID_2_"> + <use xlink:href="#SVGID_1_" style="overflow:visible;"/> + </clipPath> + <path class="st0" d="M127.8,156H-8.7c-3.7,0-6.8-3-6.8-6.8V12.7c0-3.7,3-6.8,6.8-6.8h136.5c3.7,0,6.7,3,6.7,6.8v136.5 + C134.5,152.9,131.5,156,127.8,156z"/> + <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="54" y1="151" x2="54" y2="1"> + <stop offset="0" style="stop-color:#007C8F"/> + <stop offset="0.3707" style="stop-color:#007088"/> + <stop offset="1" style="stop-color:#005377"/> + </linearGradient> + <rect x="-21" y="1" class="st1" width="150" height="150"/> + <path class="st2" d="M90.3,110.9H16.9c-1.7,0-3-1.3-3-3V42.4c0-1.7,1.3-3,3-3h73.4c1.7,0,3,1.3,3,3v65.4 + C93.3,109.5,92,110.9,90.3,110.9z"/> + <path class="st3" d="M90.3,32.6H16.9c-1.7,0-3-1.3-3-3v-46.7c0-1.7,1.3-3,3-3h73.4c1.7,0,3,1.3,3,3v46.7 + C93.3,31.2,92,32.6,90.3,32.6z"/> + <path class="st3" d="M90.3,170.5H16.9c-1.7,0-3-1.3-3-3v-46.7c0-1.7,1.3-3,3-3h73.4c1.7,0,3,1.3,3,3v46.7 + C93.3,169.1,92,170.5,90.3,170.5z"/> + <path class="st3" d="M177.3,69.7h-73.4c-1.7,0-3-1.3-3-3v-82.3c0-1.7,1.3-3,3-3h73.4c1.7,0,3,1.3,3,3v82.3 + C180.3,68.3,178.9,69.7,177.3,69.7z"/> + <path class="st3" d="M177.3,179h-73.4c-1.7,0-3-1.3-3-3V79.5c0-1.7,1.3-3,3-3h73.4c1.7,0,3,1.3,3,3V176 + C180.3,177.6,178.9,179,177.3,179z"/> + <path class="st3" d="M3.8,69.7h-73.4c-1.7,0-3-1.3-3-3v-82.3c0-1.7,1.3-3,3-3H3.8c1.7,0,3,1.3,3,3v82.3C6.8,68.3,5.4,69.7,3.8,69.7 + z"/> + <path class="st3" d="M3.8,179h-73.4c-1.7,0-3-1.3-3-3V79.5c0-1.7,1.3-3,3-3H3.8c1.7,0,3,1.3,3,3V176C6.8,177.6,5.4,179,3.8,179z"/> + <path class="st4" d="M115.7,151H-7.7c-7.4,0-13.3-6-13.3-13.3V14.3C-21,7-15,1-7.7,1h123.3C123,1,129,7,129,14.3v123.3 + C129,145,123,151,115.7,151z"/> + <path class="st4" d="M122.3,151H-14.3c-3.7,0-6.8-3-6.8-6.8V7.8C-21,4-18,1-14.3,1h136.5c3.7,0,6.8,3,6.8,6.8v136.5 + C129,148,126,151,122.3,151z"/> + <path class="st5" d="M81.4,86.2c0.5-0.7,0.9-1.5,1.2-2.2c0.1-0.1,0.1-0.2,0.1-0.4c0-0.1,0.1-0.2,0-0.2c0-0.1-0.8-0.1-1.1,0.1 + c-0.2,0.2-1.1,2.7-3.9,5.2c-1.6,1.4-3.3,1.9-4.9,1.7c-1.2-0.1-2.1-0.9-2.6-2.2c-0.5-1.4-0.6-3-0.2-5.1c0.8-3.8,1.8-5.7,3.1-5.7 + c0.8,0,0.9,1.4,0.1,4.3c-0.6,2-1.5,3.4-2.5,4.1c-0.4,0.2-0.5,0.4-0.5,0.5c0,0.2,0.3,0.2,0.8,0c1.9-0.5,3.6-1.2,5.1-2.1 + c1.5-1,2.5-2,2.8-3c0.3-1.2-0.1-2.2-1.1-3c-1-0.8-2.4-1.3-4-1.4c-1.6-0.1-3.2,0.2-4.7,0.9c0-0.1,0.1-0.1,0.1-0.2 + c2.5-3.9,4.3-7.5,5.3-11.1c1.1-3.5,0.8-6.1-0.9-7.7c-0.6-0.5-1.5-0.9-2.7-1.2c-2.3-0.6-4.8-1.4-2.9,1.2c0.3,0.5,0.5,1,0.6,1.5 + c0.4,1.8,0.3,4.1-0.4,6.9c-0.7,2.8-1.8,5.8-3.2,8.8c-1.4,3-2.9,5.8-4.6,8.2c-1.7,2.4-3.3,4.1-4.9,5c-0.1-0.2-0.1-0.4-0.1-0.6 + c0-0.5,0-1,0-1.5c0-0.5,0.1-0.9,0.1-1.2c0.4-2.4,0.8-5,1.4-7.7c0.6-2.7,1.1-5.1,1.6-7.3c0.4-1.4,0.6-2.4,0.7-3.1 + c0.1-0.7,0-1.2-0.2-1.5c-0.2-0.3-0.8-0.7-1.6-1.1c-0.5-0.3-1.1-0.6-1.9-1c-1.5-0.9-1.6-0.9-2.1,0.7c-0.4,1.4-1.2,3.4-2.3,6.1 + c-1,2.7-2.2,5.4-3.5,8.3c-1.3,2.9-2.5,5.3-3.7,7.2c-1.2,2-2.1,3-2.9,3c-0.2,0-0.3-0.1-0.3-0.3c0-0.2-0.1-0.4-0.1-0.7 + c0-0.5,0.1-1,0.1-1.5c0.1-0.5,0.2-0.9,0.2-1.2c0.3-1.6,0.8-3.5,1.3-5.7c0.6-2.2,1.2-4.4,1.7-6.5c0.6-2.1,1.1-3.9,1.5-5.4 + c0.6-1.9,1-3.1,1.1-3.8c0.1-0.6-0.3-1.2-1-1.6c-0.6-0.3-1.6-0.9-2.9-1.7c-1-0.6-1.4-0.5-2.4-0.2c-2.5,0.9-4.9,1.9-7.5,3.1 + c-3,1.4-5.6,2.9-7.8,4.3c-2.2,1.5-3.6,2.8-4.2,4c-0.7,1.5-0.6,3,0.2,4.4c0.5,0.8,1.1,1.5,1.9,2.1c3,2.1,2,0.9,2.3-1.5 + c0.1-0.9,0.4-1.7,0.8-2.4c1-1.7,2.8-3.6,5.6-5.8c2.7-2.1,5.7-3.9,9-5.2c-0.6,2.2-1.2,4.6-1.9,7.2c-0.7,2.6-1.3,5.1-1.9,7.5 + c-0.6,2.4-1,4.4-1.3,6c-0.2,0.8-0.2,1.5-0.2,2.2c0,0.7,0.3,1.4,0.7,2.1c0.5,0.7,1.1,1.2,1.8,1.6c0.7,0.4,1.4,0.6,2.2,0.6 + c1.6-0.1,3.1-1.1,4.5-3.1c1.5-2,2.8-4.4,4-7.2c1.2-2.8,2.3-5.6,3.2-8.4c-0.5,2.2-0.9,4.4-1.2,6.5c-0.4,2.1-0.6,4-0.8,5.6 + c-0.1,0.8-0.1,1.5-0.1,2.2c0.1,0.7,0.4,1.4,0.9,2.1c0.5,0.7,1.1,1.2,1.9,1.6c0.7,0.4,1.5,0.6,2.3,0.7c1.5,0,3.6-1.4,6.3-4.1 + c0.6-0.7,1.3-1.4,1.9-2.1c-0.1,1.9,0.5,3.4,2,4.5c1.7,1.3,3.7,2,6.1,2.1c2.4,0.1,4.7-0.7,6.6-2.1C79.4,88.7,80.5,87.5,81.4,86.2z" + /> + <path class="st4" d="M122.3,151H-14.3c-3.7,0-6.8-3-6.8-6.8V7.8C-21,4-18,1-14.3,1h136.5c3.7,0,6.8,3,6.8,6.8v136.5 + C129,148,126,151,122.3,151z"/> + <path class="st4" d="M122.3,151H-14.3c-3.7,0-6.8-3-6.8-6.8V7.8C-21,4-18,1-14.3,1H129v143.3C129,148,126,151,122.3,151z"/> +</g> +</svg> diff --git a/meta/icons/wekan-24.svg b/meta/icons/wekan-24.svg index b1dc1966e..d19a65a8e 100644 --- a/meta/icons/wekan-24.svg +++ b/meta/icons/wekan-24.svg @@ -1 +1,34 @@ -<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="-62 64 24 24"><linearGradient id="a" x1="-50" x2="-50" y1="88" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#007c8f"/><stop offset=".371" style="stop-color:#007088"/><stop offset="1" style="stop-color:#005377"/></linearGradient><path d="M-39.2 88h-21.7c-.6 0-1.2-.5-1.2-1.2V65.2c0-.6.5-1.2 1.2-1.2h21.7c.6 0 1.2.5 1.2 1.2v21.7c0 .6-.5 1.1-1.2 1.1" style="fill:url(#a)"/><path d="M-40.3 79.8c.2-.2.3-.5.4-.8v-.2h-.4c-.1.1-.4.9-1.3 1.8-.5.5-1.1.6-1.7.6-.4 0-.7-.3-.9-.8s-.2-1-.1-1.7c.3-1.3.6-1.9 1.1-1.9q.45 0 0 1.5c-.2.7-.5 1.2-.9 1.4-.1.1-.2.1-.2.2q0 .15.3 0c.6-.2 1.2-.4 1.8-.7.5-.3.8-.7.9-1 .1-.4 0-.7-.4-1s-.8-.5-1.4-.5-1.1.1-1.6.3v-.1c.9-1.3 1.5-2.6 1.8-3.8.4-1.2.3-2.1-.3-2.6-.2-.2-.5-.3-.9-.4-.8-.2-1.6-.5-1 .4.1.2.2.3.2.5.1.6.1 1.4-.1 2.4s-.6 2-1.1 3-1 2-1.6 2.8-1.1 1.4-1.7 1.7v-1.1c.1-.8.3-1.7.5-2.6s.4-1.8.6-2.5c.1-.5.2-.8.3-1.1 0-.2 0-.4-.1-.5s-.3-.2-.5-.4l-.6-.3c-.5-.3-.6-.3-.7.2s-.4 1.2-.8 2.1-.8 1.9-1.2 2.8c-.4 1-.9 1.8-1.3 2.5s-.7 1-1 1c-.1 0-.1 0-.1-.1v-.7c0-.2.1-.3.1-.4.1-.5.3-1.2.5-1.9s.4-1.5.6-2.2.4-1.3.5-1.8c.2-.6.3-1.1.4-1.3 0-.2-.1-.4-.4-.5-.2-.1-.5-.3-1-.6-.3-.2-.5-.2-.8-.1-.8.3-1.7.7-2.5 1.1-1 .5-1.9 1-2.6 1.5-.8.5-1.2 1-1.4 1.4-.2.5-.2 1 .1 1.5.2.3.4.5.6.7 1 .7.7.3.8-.5 0-.3.1-.6.3-.8.3-.6 1-1.2 1.9-2 .9-.7 2-1.3 3.1-1.8-.2.8-.4 1.6-.7 2.5-.2.9-.5 1.7-.7 2.6-.2.8-.3 1.5-.4 2.1-.1.3-.1.5-.1.8 0 .2.1.5.3.7l.6.6c.2.1.5.2.7.2.5 0 1-.4 1.5-1.1s1-1.5 1.4-2.5.8-1.9 1.1-2.9c-.2.7-.3 1.5-.4 2.2s-.2 1.4-.3 1.9v.8c0 .2.1.5.3.7s.4.4.6.5.5.2.8.2c.5 0 1.2-.5 2.1-1.4.2-.2.4-.5.7-.7 0 .7.2 1.2.7 1.6.6.4 1.3.7 2.1.7s1.6-.2 2.3-.7c.5-.6.9-1 1.2-1.5" style="fill:#fff"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-62 64 24 24" style="enable-background:new -62 64 24 24;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:url(#SVGID_1_);} + .st1{fill:#FFFFFF;} +</style> +<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-50" y1="88" x2="-50" y2="64"> + <stop offset="0" style="stop-color:#007C8F"/> + <stop offset="0.3707" style="stop-color:#007088"/> + <stop offset="1" style="stop-color:#005377"/> +</linearGradient> +<path class="st0" d="M-39.2,88h-21.7c-0.6,0-1.2-0.5-1.2-1.2V65.2c0-0.6,0.5-1.2,1.2-1.2h21.7c0.6,0,1.2,0.5,1.2,1.2v21.7 + C-38,87.5-38.5,88-39.2,88z"/> +<path class="st1" d="M-40.3,79.8c0.2-0.2,0.3-0.5,0.4-0.8c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0-0.3,0-0.4,0 + c-0.1,0.1-0.4,0.9-1.3,1.8c-0.5,0.5-1.1,0.6-1.7,0.6c-0.4,0-0.7-0.3-0.9-0.8c-0.2-0.5-0.2-1-0.1-1.7c0.3-1.3,0.6-1.9,1.1-1.9 + c0.3,0,0.3,0.5,0,1.5c-0.2,0.7-0.5,1.2-0.9,1.4c-0.1,0.1-0.2,0.1-0.2,0.2c0,0.1,0.1,0.1,0.3,0c0.6-0.2,1.2-0.4,1.8-0.7 + c0.5-0.3,0.8-0.7,0.9-1c0.1-0.4,0-0.7-0.4-1c-0.4-0.3-0.8-0.5-1.4-0.5c-0.6,0-1.1,0.1-1.6,0.3c0,0,0,0,0-0.1 + c0.9-1.3,1.5-2.6,1.8-3.8c0.4-1.2,0.3-2.1-0.3-2.6c-0.2-0.2-0.5-0.3-0.9-0.4c-0.8-0.2-1.6-0.5-1,0.4c0.1,0.2,0.2,0.3,0.2,0.5 + c0.1,0.6,0.1,1.4-0.1,2.4c-0.2,1-0.6,2-1.1,3c-0.5,1-1,2-1.6,2.8c-0.6,0.8-1.1,1.4-1.7,1.7c0-0.1,0-0.1,0-0.2c0-0.2,0-0.3,0-0.5 + c0-0.2,0-0.3,0-0.4c0.1-0.8,0.3-1.7,0.5-2.6c0.2-0.9,0.4-1.8,0.6-2.5c0.1-0.5,0.2-0.8,0.3-1.1c0-0.2,0-0.4-0.1-0.5 + c-0.1-0.1-0.3-0.2-0.5-0.4c-0.2-0.1-0.4-0.2-0.6-0.3c-0.5-0.3-0.6-0.3-0.7,0.2c-0.1,0.5-0.4,1.2-0.8,2.1c-0.4,0.9-0.8,1.9-1.2,2.8 + c-0.4,1-0.9,1.8-1.3,2.5c-0.4,0.7-0.7,1-1,1c-0.1,0-0.1,0-0.1-0.1c0-0.1,0-0.1,0-0.2c0-0.2,0-0.3,0-0.5c0-0.2,0.1-0.3,0.1-0.4 + c0.1-0.5,0.3-1.2,0.5-1.9s0.4-1.5,0.6-2.2c0.2-0.7,0.4-1.3,0.5-1.8c0.2-0.6,0.3-1.1,0.4-1.3c0-0.2-0.1-0.4-0.4-0.5 + c-0.2-0.1-0.5-0.3-1-0.6c-0.3-0.2-0.5-0.2-0.8-0.1c-0.8,0.3-1.7,0.7-2.5,1.1c-1,0.5-1.9,1-2.6,1.5c-0.8,0.5-1.2,1-1.4,1.4 + c-0.2,0.5-0.2,1,0.1,1.5c0.2,0.3,0.4,0.5,0.6,0.7c1,0.7,0.7,0.3,0.8-0.5c0-0.3,0.1-0.6,0.3-0.8c0.3-0.6,1-1.2,1.9-2 + c0.9-0.7,2-1.3,3.1-1.8c-0.2,0.8-0.4,1.6-0.7,2.5c-0.2,0.9-0.5,1.7-0.7,2.6c-0.2,0.8-0.3,1.5-0.4,2.1c-0.1,0.3-0.1,0.5-0.1,0.8 + c0,0.2,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.4,0.6,0.6c0.2,0.1,0.5,0.2,0.7,0.2c0.5,0,1-0.4,1.5-1.1c0.5-0.7,1-1.5,1.4-2.5 + c0.4-1,0.8-1.9,1.1-2.9c-0.2,0.7-0.3,1.5-0.4,2.2c-0.1,0.7-0.2,1.4-0.3,1.9c0,0.3,0,0.5,0,0.8c0,0.2,0.1,0.5,0.3,0.7 + c0.2,0.2,0.4,0.4,0.6,0.5c0.2,0.1,0.5,0.2,0.8,0.2c0.5,0,1.2-0.5,2.1-1.4c0.2-0.2,0.4-0.5,0.7-0.7c0,0.7,0.2,1.2,0.7,1.6 + c0.6,0.4,1.3,0.7,2.1,0.7c0.8,0,1.6-0.2,2.3-0.7C-41,80.7-40.6,80.3-40.3,79.8z"/> +</svg> diff --git a/meta/screenshots/board_view_01.png b/meta/screenshots/board_view_01.png index bd47bb40c..6151a17ba 100755 Binary files a/meta/screenshots/board_view_01.png and b/meta/screenshots/board_view_01.png differ diff --git a/meta/screenshots/board_view_02.png b/meta/screenshots/board_view_02.png index ee7d41229..2e745a7ba 100755 Binary files a/meta/screenshots/board_view_02.png and b/meta/screenshots/board_view_02.png differ diff --git a/models/accessibilitySettings.js b/models/accessibilitySettings.js deleted file mode 100644 index 901cca79d..000000000 --- a/models/accessibilitySettings.js +++ /dev/null @@ -1,65 +0,0 @@ -import { ReactiveCache } from '/imports/reactiveCache'; - -AccessibilitySettings = new Mongo.Collection('accessibilitySettings'); - -AccessibilitySettings.attachSchema( - new SimpleSchema({ - enabled: { - type: Boolean, - defaultValue: false, - }, - title: { - type: String, - optional: true, - }, - body: { - type: String, - optional: true, - }, - createdAt: { - type: Date, - optional: true, - // eslint-disable-next-line consistent-return - autoValue() { - if (this.isInsert) { - return new Date(); - } else if (this.isUpsert) { - return { $setOnInsert: new Date() }; - } else { - this.unset(); - } - }, - }, - modifiedAt: { - type: Date, - denyUpdate: false, - // eslint-disable-next-line consistent-return - autoValue() { - if (this.isInsert || this.isUpsert || this.isUpdate) { - return new Date(); - } else { - this.unset(); - } - }, - }, - }), -); - -AccessibilitySettings.allow({ - update(userId) { - const user = ReactiveCache.getUser(userId); - return user && user.isAdmin; - }, -}); - -if (Meteor.isServer) { - Meteor.startup(() => { - AccessibilitySettings._collection.createIndex({ modifiedAt: -1 }); - const accessibilitySetting = AccessibilitySettings.findOne({}); - if (!accessibilitySetting) { - AccessibilitySettings.insert({ enabled: false, sort: 0 }); - } - }); -} - -export default AccessibilitySettings; diff --git a/models/boards.js b/models/boards.js index 690063718..819f982c8 100644 --- a/models/boards.js +++ b/models/boards.js @@ -464,14 +464,6 @@ Boards.attachSchema( defaultValue: true, }, - allowsCreatorOnMinicard: { - /** - * Does the board allow creator? - */ - type: Boolean, - defaultValue: false, - }, - allowsAssignee: { /** * Does the board allows assignee? @@ -634,29 +626,17 @@ Boards.attachSchema( decimal: true, defaultValue: -1, }, - showActivities: { - type: Boolean, - defaultValue: false, - }, }), ); Boards.helpers({ copy() { const oldId = this._id; - const oldWatchers = this.watchers ? this.watchers.slice() : []; delete this._id; delete this.slug; this.title = this.copyTitle(); const _id = Boards.insert(this); - // Temporary remove watchers to disable notifications - Boards.update(_id, { - $set: { - watchers: [] - }, - }); - // Copy all swimlanes in board ReactiveCache.getSwimlanes({ boardId: oldId, @@ -707,12 +687,6 @@ Boards.helpers({ rule.triggerId = triggersMap[rule.triggerId]; Rules.insert(rule); }); - - // Re-set Watchers to reenable notification - Boards.update(_id, { - $set: { watchers: oldWatchers } - }); - return _id; }, /** @@ -1433,10 +1407,6 @@ Boards.mutations({ return { $set: { allowsCreator } }; }, - setAllowsCreatorOnMinicard(allowsCreatorOnMinicard) { - return { $set: { allowsCreatorOnMinicard } }; - }, - setAllowsMembers(allowsMembers) { return { $set: { allowsMembers } }; }, @@ -1548,10 +1518,6 @@ Boards.mutations({ move(sortIndex) { return { $set: { sort: sortIndex } }; }, - - toggleShowActivities() { - return { $set: { showActivities: !this.showActivities } }; - }, }); function boardRemover(userId, doc) { @@ -1759,26 +1725,6 @@ if (Meteor.isServer) { }), ).sort(); }, - setAllBoardsHideActivities() { - if (ReactiveCache.getCurrentUser()?.isAdmin) { - Boards.update( - { - showActivities: true - }, - { - $set: { - showActivities: false, - }, - }, - { - multi: true, - }, - ); - return true; - } else { - return false; - } - }, }); Meteor.methods({ @@ -2207,36 +2153,6 @@ if (Meteor.isServer) { } }); - /** - * @operation update_board_title - * @summary Update the title of a board - * - * @param {string} boardId the ID of the board to update - * @param {string} title the new title for the board - */ - JsonRoutes.add('PUT', '/api/boards/:boardId/title', function(req, res) { - try { - Authentication.checkUserId(req.userId); - const boardId = req.params.boardId; - const title = req.body.title; - - Boards.direct.update({ _id: boardId }, { $set: { title } }); - - JsonRoutes.sendResult(res, { - code: 200, - data: { - _id: boardId, - title, - }, - }); - } catch (error) { - JsonRoutes.sendResult(res, { - code: 200, - data: error, - }); - } - }); - /** * @operation add_board_label * @summary Add a label to a board @@ -2281,37 +2197,6 @@ if (Meteor.isServer) { } }); - /** - * @operation copy_board - * @summary Copy a board to a new one - * - * @description If your are board admin or wekan admin, this copies the - * given board to a new one. - * - * @param {string} boardId the board - * @param {string} title the title of the new board (default to old one) - * - * @return_type string - */ -JsonRoutes.add('POST', '/api/boards/:boardId/copy', function(req, res) { - const id = req.params.boardId; - const board = ReactiveCache.getBoard(id); - const adminAccess = board.members.some(e => e.userId === req.userId && e.isAdmin); - Authentication.checkAdminOrCondition(req.userId, adminAccess); - try { - board['title'] = req.body.title || Boards.uniqueTitle(board.title); - ret = board.copy(); - JsonRoutes.sendResult(res, { - code: 200, - data: ret, - }); - } catch (error) { - JsonRoutes.sendResult(res, { - data: error, - }); - } -}); - /** * @operation set_board_member_permission * @tag Users diff --git a/models/cards.js b/models/cards.js index fedef962f..6d54d289f 100644 --- a/models/cards.js +++ b/models/cards.js @@ -351,7 +351,7 @@ Cards.attachSchema( }, 'poker.question': { type: Boolean, - optional: true, + defaultValue: false, }, 'poker.one': { /** @@ -359,6 +359,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.two': { /** @@ -366,6 +367,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.three': { /** @@ -373,6 +375,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.five': { /** @@ -380,6 +383,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.eight': { /** @@ -387,6 +391,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.thirteen': { /** @@ -394,6 +399,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.twenty': { /** @@ -401,6 +407,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.forty': { /** @@ -408,6 +415,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.oneHundred': { /** @@ -415,6 +423,7 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.unsure': { /** @@ -422,14 +431,16 @@ Cards.attachSchema( */ type: [String], optional: true, + defaultValue: [], }, 'poker.end': { type: Date, optional: true, + defaultValue: null, }, 'poker.allowNonBoardMembers': { type: Boolean, - optional: true, + defaultValue: false, }, 'poker.estimation': { /** @@ -473,17 +484,6 @@ Cards.attachSchema( optional: true, defaultValue: 0, }, - showActivities: { - type: Boolean, - defaultValue: false, - }, - hideFinishedChecklistIfItemsAreHidden: { - /** - * hide completed checklist? - */ - type: Boolean, - optional: true, - }, }), ); @@ -531,30 +531,20 @@ Cards.helpers({ mapCustomFieldsToBoard(boardId) { // Map custom fields to new board return this.customFields.map(cf => { - const oldCf = ReactiveCache.getCustomField(cf._id); - - // Check if oldCf is undefined or null - if (!oldCf) { - //console.error(`Custom field with ID ${cf._id} not found.`); - return cf; // Skip this field if oldCf is not found - } - - const newCf = ReactiveCache.getCustomField({ - boardIds: boardId, - name: oldCf.name, - type: oldCf.type, - }); - - if (newCf) { - cf._id = newCf._id; - } else if (!_.contains(oldCf.boardIds, boardId)) { - oldCf.addBoard(boardId); - } - - return cf; + const oldCf = ReactiveCache.getCustomField(cf._id); + const newCf = ReactiveCache.getCustomField({ + boardIds: boardId, + name: oldCf.name, + type: oldCf.type, + }); + if (newCf) { + cf._id = newCf._id; + } else if (!_.contains(oldCf.boardIds, boardId)) { + oldCf.addBoard(boardId); + } + return cf; }); -}, - + }, copy(boardId, swimlaneId, listId) { const oldId = this._id; @@ -1003,16 +993,15 @@ Cards.helpers({ }, parentCard() { - let ret = null; - if (this.parentId) { - ret = ReactiveCache.getCard(this.parentId); + if (this.parentId === '') { + return null; } - return ret; + return ReactiveCache.getCard(this.parentId); }, parentCardName() { let result = ''; - if (this.parentId) { + if (this.parentId !== '') { const card = ReactiveCache.getCard(this.parentId); if (card) { result = card.title; @@ -1024,7 +1013,7 @@ Cards.helpers({ parentListId() { const result = []; let crtParentId = this.parentId; - while (crtParentId) { + while (crtParentId !== '') { const crt = ReactiveCache.getCard(crtParentId); if (crt === null || crt === undefined) { // maybe it has been deleted @@ -1044,7 +1033,7 @@ Cards.helpers({ const resultId = []; const result = []; let crtParentId = this.parentId; - while (crtParentId) { + while (crtParentId !== '') { const crt = ReactiveCache.getCard(crtParentId); if (crt === null || crt === undefined) { // maybe it has been deleted @@ -1070,11 +1059,7 @@ Cards.helpers({ }, isTopLevel() { - let ret = false; - if (this.parentId) { - ret = true; - } - return ret; + return this.parentId === ''; }, isLinkedCard() { @@ -2188,22 +2173,6 @@ Cards.mutations({ } }, - toggleShowActivities() { - return { - $set: { - showActivities: !this.showActivities, - } - }; - }, - - toggleHideFinishedChecklist() { - return { - $set: { - hideFinishedChecklistIfItemsAreHidden: !this.hideFinishedChecklistIfItemsAreHidden, - } - }; - }, - setCustomField(customFieldId, value) { // todo const index = this.customFieldIndex(customFieldId); @@ -3239,8 +3208,7 @@ if (Meteor.isServer) { boardId: paramBoardId, swimlaneId: paramSwimlaneId, archived: false, - }, - { sort: ['sort'] }).map(function(doc) { + }).map(function(doc) { return { _id: doc._id, title: doc.title, @@ -3251,7 +3219,6 @@ if (Meteor.isServer) { dueAt: doc.dueAt, endAt: doc.endAt, assignees: doc.assignees, - sort: doc.sort, }; }), }); @@ -3283,19 +3250,16 @@ if (Meteor.isServer) { boardId: paramBoardId, listId: paramListId, archived: false, - }, - { sort: ['sort'] }).map(function(doc) { + }).map(function(doc) { return { _id: doc._id, title: doc.title, description: doc.description, - swimlaneId: doc.swimlaneId, receivedAt: doc.receivedAt, startAt: doc.startAt, dueAt: doc.dueAt, endAt: doc.endAt, assignees: doc.assignees, - sort: doc.sort, }; }), }); @@ -3540,7 +3504,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( const newBoardId = req.body.newBoardId; const newSwimlaneId = req.body.newSwimlaneId; const newListId = req.body.newListId; - let updated = false; Authentication.checkBoardAccess(req.userId, paramBoardId); if (req.body.title) { @@ -3558,7 +3521,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, }, ); - updated = true; } if (req.body.sort) { const newSort = req.body.sort; @@ -3575,7 +3537,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, }, ); - updated = true; } if (req.body.parentId) { const newParentId = req.body.parentId; @@ -3592,7 +3553,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, }, ); - updated = true; } if (req.body.description) { const newDescription = req.body.description; @@ -3609,7 +3569,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, }, ); - updated = true; } if (req.body.color) { const newColor = req.body.color; @@ -3622,7 +3581,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { color: newColor } }, ); - updated = true; } if (req.body.vote) { const newVote = req.body.vote; @@ -3641,7 +3599,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { vote: newVote } }, ); - updated = true; } if (req.body.poker) { const newPoker = req.body.poker; @@ -3667,7 +3624,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { poker: newPoker } }, ); - updated = true; } if (req.body.labelIds) { let newlabelIds = req.body.labelIds; @@ -3691,7 +3647,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, }, ); - updated = true; } if (req.body.requestedBy) { const newrequestedBy = req.body.requestedBy; @@ -3704,7 +3659,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { requestedBy: newrequestedBy } }, ); - updated = true; } if (req.body.assignedBy) { const newassignedBy = req.body.assignedBy; @@ -3717,7 +3671,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { assignedBy: newassignedBy } }, ); - updated = true; } if (req.body.receivedAt) { const newreceivedAt = req.body.receivedAt; @@ -3730,7 +3683,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { receivedAt: newreceivedAt } }, ); - updated = true; } if (req.body.startAt) { const newstartAt = req.body.startAt; @@ -3743,7 +3695,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { startAt: newstartAt } }, ); - updated = true; } if (req.body.dueAt) { const newdueAt = req.body.dueAt; @@ -3756,7 +3707,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { dueAt: newdueAt } }, ); - updated = true; } if (req.body.endAt) { const newendAt = req.body.endAt; @@ -3769,7 +3719,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { endAt: newendAt } }, ); - updated = true; } if (req.body.spentTime) { const newspentTime = req.body.spentTime; @@ -3782,7 +3731,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { spentTime: newspentTime } }, ); - updated = true; } if (req.body.isOverTime) { const newisOverTime = req.body.isOverTime; @@ -3795,7 +3743,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { isOverTime: newisOverTime } }, ); - updated = true; } if (req.body.customFields) { const newcustomFields = req.body.customFields; @@ -3808,7 +3755,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { customFields: newcustomFields } }, ); - updated = true; } if (req.body.members) { let newmembers = req.body.members; @@ -3828,7 +3774,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { members: newmembers } }, ); - updated = true; } if (req.body.assignees) { let newassignees = req.body.assignees; @@ -3848,7 +3793,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { assignees: newassignees } }, ); - updated = true; } if (req.body.swimlaneId) { const newParamSwimlaneId = req.body.swimlaneId; @@ -3861,7 +3805,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, { $set: { swimlaneId: newParamSwimlaneId } }, ); - updated = true; } if (req.body.listId) { const newParamListId = req.body.listId; @@ -3878,7 +3821,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, }, ); - updated = true; const card = ReactiveCache.getCard(paramCardId); cardMove( @@ -3907,7 +3849,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( }, }, ); - updated = true; const card = ReactiveCache.getCard(paramCardId); cardMove( @@ -3919,36 +3860,6 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( newBoardId, ); } - if (req.body.archive) { - function isTrue(data) { - return String(data).toLowerCase() === 'true'; - } - var archive = isTrue(req.body.archive); - Cards.direct.update( - { - _id: paramCardId, - listId: paramListId, - boardId: paramBoardId, - archived: !archive, - }, - { - $set: { - archived: archive, - }, - }, - ); - updated = true; - } - // Check if update is true or false - if (!updated) { - JsonRoutes.sendResult(res, { - code: 404, - data: { - message: 'Error', - }, - }); - return; - } JsonRoutes.sendResult(res, { code: 200, data: { diff --git a/models/checklists.js b/models/checklists.js index d30dcc1be..7655b5f59 100644 --- a/models/checklists.js +++ b/models/checklists.js @@ -27,6 +27,14 @@ Checklists.attachSchema( type: Date, optional: true, }, + showAtMinicard: { + /** + * Show at minicard. Default: false. + */ + type: Boolean, + optional: true, + defaultValue: false, + }, createdAt: { /** * Creation date of the checklist @@ -63,20 +71,6 @@ Checklists.attachSchema( type: Number, decimal: true, }, - hideCheckedChecklistItems: { - /** - * hide the checked checklist-items? - */ - type: Boolean, - optional: true, - }, - hideAllChecklistItems: { - /** - * hide all checklist items ? - */ - type: Boolean, - optional: true, - }, }), ); @@ -130,18 +124,7 @@ Checklists.helpers({ return ret; }, isFinished() { - let ret = this.hideAllChecklistItems; - if (!ret) { - ret = 0 !== this.itemCount() && this.itemCount() === this.finishedCount(); - } - return ret; - }, - showChecklist(hideFinishedChecklistIfItemsAreHidden) { - let ret = true; - if (this.isFinished() && hideFinishedChecklistIfItemsAreHidden === true && (this.hideCheckedChecklistItems === true || this.hideAllChecklistItems)) { - ret = false; - } - return ret; + return 0 !== this.itemCount() && this.itemCount() === this.finishedCount(); }, checkAllItems() { const checkItems = ReactiveCache.getChecklistItems({ checklistId: this._id }); @@ -159,6 +142,9 @@ Checklists.helpers({ const items = ReactiveCache.getChecklist({ _id: this._id }).items; return _.pluck(items, '_id').indexOf(itemId); }, + hasShowChecklistAtMinicard() { + return showAtMinicard || false; + }, }); Checklists.allow({ @@ -216,18 +202,13 @@ Checklists.mutations({ }, }; }, - toggleHideCheckedChecklistItems() { + + toggleShowChecklistAtMinicard(checklistId) { + const value = this.hasShowChecklistAtMinicard(); return { $set: { - hideCheckedChecklistItems: !this.hideCheckedChecklistItems, - } - }; - }, - toggleHideAllChecklistItems() { - return { - $set: { - hideAllChecklistItems: !this.hideAllChecklistItems, - } + 'showAtMinicard': !value, + }, }; }, }); diff --git a/models/exporter.js b/models/exporter.js index b8fe68ba4..d434890ce 100644 --- a/models/exporter.js +++ b/models/exporter.js @@ -348,10 +348,9 @@ export class Exporter { const dropdownOptions = result.customFields.find( ({ _id }) => _id === field._id, ).settings.dropdownItems; - const fieldObj = dropdownOptions.find( + const fieldValue = dropdownOptions.find( ({ _id }) => _id === field.value, - ); - const fieldValue = (fieldObj && fieldObj.name) || null; + ).name; customFieldValuesToPush[customFieldMap[field._id].position] = fieldValue; } else { diff --git a/models/lists.js b/models/lists.js index c99edf8e7..49b456f2a 100644 --- a/models/lists.js +++ b/models/lists.js @@ -146,7 +146,7 @@ Lists.attachSchema( */ type: String, optional: true, - // silver is the default + // silver is the default, so it is left out allowedValues: ALLOWED_COLORS, }, type: { @@ -156,13 +156,6 @@ Lists.attachSchema( type: String, defaultValue: 'list', }, - collapsed: { - /** - * is the list collapsed - */ - type: Boolean, - defaultValue: false, - }, }), ); @@ -293,10 +286,6 @@ Lists.helpers({ return this.starred === true; }, - isCollapsed() { - return this.collapsed === true; - }, - absoluteUrl() { const card = ReactiveCache.getCard({ listId: this._id }); return card && card.absoluteUrl(); @@ -317,9 +306,6 @@ Lists.mutations({ star(enable = true) { return { $set: { starred: !!enable } }; }, - collapse(enable = true) { - return { $set: { collapsed: !!enable } }; - }, archive() { if (this.isTemplateList()) { @@ -352,6 +338,9 @@ Lists.mutations({ }, setColor(newColor) { + if (newColor === 'silver') { + newColor = null; + } return { $set: { color: newColor, diff --git a/models/server/createWorkbook.js b/models/server/createWorkbook.js index 28b1c45f8..493f678cd 100644 --- a/models/server/createWorkbook.js +++ b/models/server/createWorkbook.js @@ -1,4 +1,4 @@ -import Excel from '@wekanteam/exceljs'; +import Excel from 'exceljs'; export const createWorkbook = function() { return new Excel.Workbook(); diff --git a/models/server/metrics.js b/models/server/metrics.js index 669bbbf92..f60e678d0 100644 --- a/models/server/metrics.js +++ b/models/server/metrics.js @@ -2,38 +2,13 @@ import { Meteor } from 'meteor/meteor'; import Users from '../users'; function acceptedIpAddress(ipAddress) { - const trustedIpAddress = process.env.METRICS_ACCEPTED_IP_ADDRESS; + const trustedIpAddress = process.env.WEKAN_METRICS_ACCEPTED_IP_ADDRESS; return ( trustedIpAddress !== undefined && trustedIpAddress.split(',').includes(ipAddress) ); } -function accessToken(req) { - const valid_token = process.env.METRICS_ACCESS_TOKEN; - let token; - if (req.headers && req.headers.authorization) { - var parts = req.headers.authorization.split(" "); - - if (parts.length === 2) { - var scheme = parts[0]; - var credentials = parts[1]; - - if (/^Bearer$/i.test(scheme)) { - token = credentials; - } - } - } - if (!token && req.query && req.query.access_token) { - token = req.query.access_token; - } - return ( - token !== undefined && - valid_token !== undefined && - token == valid_token - ); -} - const getBoardTitleWithMostActivities = (dateWithXdaysAgo, nbLimit) => { return Promise.await( Activities.rawCollection() @@ -73,8 +48,8 @@ Meteor.startup(() => { // const ipAddress = req.socket.remoteAddress // } - // List of trusted ip adress will be found in environment variable "METRICS_ACCEPTED_IP_ADDRESS" (separeted with commas) - if (acceptedIpAddress(ipAddress) || (accessToken(req))) { + // List of trusted ip adress will be found in environment variable "WEKAN_METRICS_ACCEPTED_IP_ADDRESS" (separeted with commas) + if (acceptedIpAddress(ipAddress)) { let metricsRes = ''; let resCount = 0; //connected users @@ -195,12 +170,12 @@ Meteor.startup(() => { metricsRes += '# Top 10 boards with most activities dated 30 days ago\n'; - //Get top 10 table with most activities in current month + //Get top 10 table with most activities in current month const boardTitleWithMostActivities = getBoardTitleWithMostActivities( dateWithXdaysAgo, xdays, ); - + const boardWithMostActivities = boardTitleWithMostActivities.map( (board) => board.lookup[0].title, ); @@ -210,7 +185,7 @@ Meteor.startup(() => { `wekan_top10BoardsWithMostActivities{n="${title}"} ${ index + 1 }` + '\n'; - }); + }); res.writeHead(200); // HTTP status res.end(metricsRes); diff --git a/models/settings.js b/models/settings.js index ca1184de7..c3f6b00d6 100644 --- a/models/settings.js +++ b/models/settings.js @@ -117,19 +117,6 @@ Settings.attachSchema( type: String, optional: true, }, - accessibilityPageEnabled: { - type: Boolean, - optional: true, - defaultValue: false, - }, - accessibilityTitle: { - type: String, - optional: true, - }, - accessibilityContent: { - type: String, - optional: true, - }, createdAt: { type: Date, denyUpdate: true, diff --git a/models/swimlanes.js b/models/swimlanes.js index 6a834370d..7c8cac595 100644 --- a/models/swimlanes.js +++ b/models/swimlanes.js @@ -70,7 +70,7 @@ Swimlanes.attachSchema( */ type: String, optional: true, - // silver is the default + // silver is the default, so it is left out allowedValues: ALLOWED_COLORS, }, updatedAt: { @@ -107,13 +107,6 @@ Swimlanes.attachSchema( type: String, defaultValue: 'swimlane', }, - collapsed: { - /** - * is the swimlane collapsed - */ - type: Boolean, - defaultValue: false, - }, }), ); @@ -239,10 +232,6 @@ Swimlanes.helpers({ return ret; }, - isCollapsed() { - return this.collapsed === true; - }, - board() { return ReactiveCache.getBoard(this.boardId); }, @@ -285,10 +274,6 @@ Swimlanes.mutations({ return { $set: { title } }; }, - collapse(enable = true) { - return { $set: { collapsed: !!enable } }; - }, - archive() { if (this.isTemplateSwimlane()) { this.myLists().forEach(list => { @@ -308,6 +293,9 @@ Swimlanes.mutations({ }, setColor(newColor) { + if (newColor === 'silver') { + newColor = null; + } return { $set: { color: newColor, diff --git a/models/trelloCreator.js b/models/trelloCreator.js index 2d445bc46..e0efa3aac 100644 --- a/models/trelloCreator.js +++ b/models/trelloCreator.js @@ -450,9 +450,9 @@ export class TrelloCreator { } }; if (att.url) { - Attachments.load(att.url, opts, cb, true); + Attachment.load(att.url, opts, cb, true); } else if (att.file) { - Attachments.insert(att.file, opts, cb, true); + Attachment.write(att.file, opts, cb, true); } }); diff --git a/models/users.js b/models/users.js index 8643fca2b..b6bf53793 100644 --- a/models/users.js +++ b/models/users.js @@ -172,6 +172,13 @@ Users.attachSchema( type: Boolean, optional: true, }, + 'profile.hideCheckedItems': { + /** + * does the user want to hide checked checklist items? + */ + type: Boolean, + optional: true, + }, 'profile.cardMaximized': { /** * has user clicked maximize card? @@ -186,6 +193,13 @@ Users.attachSchema( type: Boolean, optional: true, }, + 'profile.hiddenSystemMessages': { + /** + * does the user want to hide system messages? + */ + type: Boolean, + optional: true, + }, 'profile.hiddenMinicardLabelText': { /** * does the user want to hide minicard label texts? @@ -417,24 +431,6 @@ Users.attachSchema( defaultValue: {}, blackbox: true, }, - 'profile.listConstraints': { - /** - * User-specified constraint of each list (or nothing if default). - * profile[boardId][listId] = constraint; - */ - type: Object, - defaultValue: {}, - blackbox: true, - }, - 'profile.autoWidthBoards': { - /** - * User-specified flag for enabling auto-width for boards (false is the default). - * profile[boardId][listId] = constraint; - */ - type: Object, - defaultValue: {}, - blackbox: true, - }, 'profile.swimlaneHeights': { /** * User-specified heights of each swimlane (or nothing if default). @@ -444,27 +440,6 @@ Users.attachSchema( defaultValue: {}, blackbox: true, }, - 'profile.keyboardShortcuts': { - /** - * User-specified state of keyboard shortcut activation. - */ - type: Boolean, - defaultValue: false, - }, - 'profile.verticalScrollbars': { - /** - * User-specified state of vertical scrollbars visibility. - */ - type: Boolean, - defaultValue: true, - }, - 'profile.showWeekOfYear': { - /** - * User-specified state of week-of-year in date displays. - */ - type: Boolean, - defaultValue: true, - }, services: { /** * services field of the user @@ -712,11 +687,14 @@ Users.helpers({ return ''; }, orgIdsUserBelongs() { - let ret = ''; if (this.orgs) { - ret = this.orgs.map(org => org.orgId).join(','); + return this.orgs + .map(function (org) { + return org.orgId; + }) + .join(','); } - return ret; + return ''; }, teamsUserBelongs() { if (this.teams) { @@ -730,11 +708,14 @@ Users.helpers({ return ''; }, teamIdsUserBelongs() { - let ret = ''; if (this.teams) { - ret = this.teams.map(team => team.teamId).join(','); + return this.teams + .map(function (team) { + return team.teamId; + }) + .join(','); } - return ret; + return ''; }, boards() { return Boards.userBoards(this._id, null, {}, { sort: { sort: 1 } }); @@ -755,11 +736,6 @@ Users.helpers({ return _.contains(starredBoards, boardId); }, - isAutoWidth(boardId) { - const { autoWidthBoards = {} } = this.profile || {}; - return autoWidthBoards[boardId] === true; - }, - invitedBoards() { const { invitedBoards = [] } = this.profile || {}; return Boards.userBoards( @@ -801,7 +777,7 @@ Users.helpers({ }, getListWidths() { - const { listWidths = {}, } = this.profile || {}; + const { listWidths = {} } = this.profile || {}; return listWidths; }, getListWidth(boardId, listId) { @@ -812,18 +788,6 @@ Users.helpers({ return 270; //TODO(mark-i-m): default? } }, - getListConstraints() { - const { listConstraints = {} } = this.profile || {}; - return listConstraints; - }, - getListConstraint(boardId, listId) { - const listConstraints = this.getListConstraints(); - if (listConstraints[boardId] && listConstraints[boardId][listId]) { - return listConstraints[boardId][listId]; - } else { - return 550; - } - }, getSwimlaneHeights() { const { swimlaneHeights = {} } = this.profile || {}; @@ -902,6 +866,16 @@ Users.helpers({ return profile.showDesktopDragHandles || false; }, + hasHideCheckedItems() { + const profile = this.profile || {}; + return profile.hideCheckedItems || false; + }, + + hasHiddenSystemMessages() { + const profile = this.profile || {}; + return profile.hiddenSystemMessages || false; + }, + hasCustomFieldsGrid() { const profile = this.profile || {}; return profile.customFieldsGrid || false; @@ -975,21 +949,6 @@ Users.helpers({ return 'templates'; }, - isKeyboardShortcuts() { - const { keyboardShortcuts = true } = this.profile || {}; - return keyboardShortcuts; - }, - - isVerticalScrollbars() { - const { verticalScrollbars = true } = this.profile || {}; - return verticalScrollbars; - }, - - isShowWeekOfYear() { - const { showWeekOfYear = true } = this.profile || {}; - return showWeekOfYear; - }, - remove() { User.remove({ _id: this._id, @@ -1045,39 +1004,6 @@ Users.mutations({ }, }; }, - toggleAutoWidth(boardId) { - const { autoWidthBoards = {} } = this.profile || {}; - autoWidthBoards[boardId] = !autoWidthBoards[boardId]; - return { - $set: { - 'profile.autoWidthBoards': autoWidthBoards, - }, - }; - }, - toggleKeyboardShortcuts() { - const { keyboardShortcuts = true } = this.profile || {}; - return { - $set: { - 'profile.keyboardShortcuts': !keyboardShortcuts, - }, - }; - }, - toggleVerticalScrollbars() { - const { verticalScrollbars = true } = this.profile || {}; - return { - $set: { - 'profile.verticalScrollbars': !verticalScrollbars, - }, - }; - }, - toggleShowWeekOfYear() { - const { showWeekOfYear = true } = this.profile || {}; - return { - $set: { - 'profile.showWeekOfYear': !showWeekOfYear, - }, - }; - }, addInvite(boardId) { return { @@ -1140,6 +1066,23 @@ Users.mutations({ }; }, + toggleHideCheckedItems() { + const value = this.hasHideCheckedItems(); + return { + $set: { + 'profile.hideCheckedItems': !value, + }, + }; + }, + + toggleSystem(value = false) { + return { + $set: { + 'profile.hiddenSystemMessages': !value, + }, + }; + }, + toggleFieldsGrid(value = false) { return { $set: { @@ -1252,19 +1195,6 @@ Users.mutations({ }; }, - setListConstraint(boardId, listId, constraint) { - let currentConstraints = this.getListConstraints(); - if (!currentConstraints[boardId]) { - currentConstraints[boardId] = {}; - } - currentConstraints[boardId][listId] = constraint; - return { - $set: { - 'profile.listConstraints': currentConstraints, - }, - }; - }, - setSwimlaneHeight(boardId, swimlaneId, height) { let currentHeights = this.getSwimlaneHeights(); if (!currentHeights[boardId]) { @@ -1292,6 +1222,10 @@ Meteor.methods({ const user = ReactiveCache.getCurrentUser(); user.toggleHideCheckedItems(); }, + toggleSystemMessages() { + const user = ReactiveCache.getCurrentUser(); + user.toggleSystem(user.hasHiddenSystemMessages()); + }, toggleCustomFieldsGrid() { const user = ReactiveCache.getCurrentUser(); user.toggleFieldsGrid(user.hasCustomFieldsGrid()); @@ -1316,26 +1250,61 @@ Meteor.methods({ check(startDay, Number); ReactiveCache.getCurrentUser().setStartDayOfWeek(startDay); }, - applyListWidth(boardId, listId, width, constraint) { + applyListWidth(boardId, listId, width) { check(boardId, String); check(listId, String); check(width, Number); - check(constraint, Number); - const user = ReactiveCache.getCurrentUser(); + const user = Meteor.user(); user.setListWidth(boardId, listId, width); - user.setListConstraint(boardId, listId, constraint); }, applySwimlaneHeight(boardId, swimlaneId, height) { check(boardId, String); check(swimlaneId, String); check(height, Number); - const user = ReactiveCache.getCurrentUser(); + const user = Meteor.user(); user.setSwimlaneHeight(boardId, swimlaneId, height); }, }); if (Meteor.isServer) { Meteor.methods({ + setAllUsersHideSystemMessages() { + if (ReactiveCache.getCurrentUser()?.isAdmin) { + // If setting is missing, add it + Users.update( + { + 'profile.hiddenSystemMessages': { + $exists: false, + }, + }, + { + $set: { + 'profile.hiddenSystemMessages': true, + }, + }, + { + multi: true, + }, + ); + // If setting is false, set it to true + Users.update( + { + 'profile.hiddenSystemMessages': false, + }, + { + $set: { + 'profile.hiddenSystemMessages': true, + }, + }, + { + multi: true, + }, + ); + return true; + } else { + return false; + } + }, setCreateUser( fullname, username, diff --git a/models/wekanCreator.js b/models/wekanCreator.js index b429a9427..a2fc789bd 100644 --- a/models/wekanCreator.js +++ b/models/wekanCreator.js @@ -471,9 +471,9 @@ export class WekanCreator { } }; if (att.url) { - Attachments.load(att.url, opts, cb, true); + Attachment.load(att.url, opts, cb, true); } else if (att.file) { - Attachments.insert(att.file, opts, cb, true); + Attachment.write(att.file, opts, cb, true); } }); } diff --git a/docs/Webserver/nginx/nginx.conf b/nginx/nginx.conf similarity index 100% rename from docs/Webserver/nginx/nginx.conf rename to nginx/nginx.conf diff --git a/docs/Webserver/nginx/ssl/.gitkeep b/nginx/ssl/.gitkeep similarity index 100% rename from docs/Webserver/nginx/ssl/.gitkeep rename to nginx/ssl/.gitkeep diff --git a/openapi/generate_openapi.py b/openapi/generate_openapi.py index 83966f5bf..684aebc63 100644 --- a/openapi/generate_openapi.py +++ b/openapi/generate_openapi.py @@ -65,11 +65,8 @@ def get_req_body_elems(obj, elems): elif obj.type in ('LogicalExpression', 'BinaryExpression', 'AssignmentExpression'): get_req_body_elems(obj.left, elems) get_req_body_elems(obj.right, elems) - elif obj.type == 'ChainExpression': - get_req_body_elems(obj.expression, elems) elif obj.type in ('ReturnStatement', 'UnaryExpression'): - if obj.argument is not None: - get_req_body_elems(obj.argument, elems) + get_req_body_elems(obj.argument, elems) elif obj.type == 'Identifier': return obj.name elif obj.type in ['Literal', 'FunctionDeclaration', 'ThrowStatement']: diff --git a/docs/Platforms/FOSS/OpenShift/README.md b/openshift/README.md similarity index 100% rename from docs/Platforms/FOSS/OpenShift/README.md rename to openshift/README.md diff --git a/docs/Platforms/FOSS/OpenShift/wekan.yml b/openshift/wekan.yml similarity index 100% rename from docs/Platforms/FOSS/OpenShift/wekan.yml rename to openshift/wekan.yml diff --git a/package-lock.json b/package-lock.json index ef43cf5d4..cb97ee4e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "wekan", - "version": "v7.84.0", + "version": "v7.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "requires": { "regenerator-runtime": "^0.14.0" } @@ -108,31 +108,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" }, - "@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "optional": true - }, - "@wekanteam/dragscroll": { - "version": "git+https://github.com/wekan/dragscroll.git#6ea215c8cdbde9362ecba8ffb72ce9f9fde842d2", - "from": "git+https://github.com/wekan/dragscroll.git" - }, - "@wekanteam/exceljs": { - "version": "git+https://github.com/wekan/exceljs.git#e0229907e7a81bc3fe6daf4e42b1fdfbecdcb7cb", - "from": "git+https://github.com/wekan/exceljs.git", - "requires": { - "archiver": "^5.0.0", - "dayjs": "^1.8.34", - "fast-csv": "^4.3.1", - "jszip": "^3.10.1", - "readable-stream": "^3.6.0", - "saxes": "^5.0.1", - "tmp": "^0.2.0", - "unzipper": "^0.10.11", - "uuid": "^8.3.0" - } - }, "@wekanteam/html-to-markdown": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@wekanteam/html-to-markdown/-/html-to-markdown-1.0.2.tgz", @@ -292,9 +267,9 @@ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, "async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "available-typed-arrays": { "version": "1.0.5", @@ -325,9 +300,9 @@ "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" }, "big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==" + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "binary": { "version": "0.3.0", @@ -539,9 +514,9 @@ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" }, "dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" }, "debug": { "version": "4.3.4", @@ -606,12 +581,9 @@ } }, "dompurify": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", - "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", - "requires": { - "@types/trusted-types": "^2.0.7" - } + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", + "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==" }, "domutils": { "version": "2.8.0", @@ -678,33 +650,6 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" }, - "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "requires": { - "get-intrinsic": "^1.2.4" - }, - "dependencies": { - "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - } - } - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -725,6 +670,21 @@ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" }, + "exceljs": { + "version": "git+https://github.com/exceljs/exceljs.git#ddab279a882aba8f18fc5127c6d59e3aa9f596c7", + "from": "git+https://github.com/exceljs/exceljs.git", + "requires": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + } + }, "extsprintf": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", @@ -750,9 +710,9 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", + "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", "requires": { "strnum": "^1.0.5" } @@ -793,9 +753,9 @@ "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" }, "flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "for-each": { @@ -1074,9 +1034,9 @@ "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "jquery-ui": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.13.3.tgz", - "integrity": "sha512-D2YJfswSJRh/B8M/zCowDpNFfwsDmtfnMPwjJTyvl+CBqzpYwQ+gFYIbUUlzijy/Qvoy30H1YhoSui4MNYpRwA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.13.2.tgz", + "integrity": "sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q==", "requires": { "jquery": ">=1.8.0 <4.0.0" } @@ -1235,6 +1195,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" + }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -1296,6 +1261,23 @@ "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==" }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -1376,38 +1358,47 @@ "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" }, + "message-box": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/message-box/-/message-box-0.2.7.tgz", + "integrity": "sha512-C4ccA5nHb58kTS+pLrgF/JWtr7fAIkHxRDceH7tdy5fMA783nUfbYwZ7H2XLvSeYfcnWIYCig5dWW+icK9X/Ag==", + "requires": { + "lodash.template": "^4.5.0" + } + }, "meteor-accounts-t9n": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/meteor-accounts-t9n/-/meteor-accounts-t9n-2.6.0.tgz", "integrity": "sha512-SBbbYWvFYvsxHVL+q6ZB8lT3rp2LSvfALD2V52H+MGH2IgJsevy0VtXRkRG0EsUewwOaDTIKBn9DlD8HQ3GSwg==" }, "meteor-node-stubs": { - "version": "git+https://github.com/wekan/meteor-node-stubs.git#4f2609bc4d9d700ff79424ad4ed8dbf1f06666cb", - "from": "git+https://github.com/wekan/meteor-node-stubs.git", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.5.tgz", + "integrity": "sha512-FLlOFZx3KnZ5s3yPCK+x58DyX9ewN+oQ12LcpwBXMLtzJ/YyprMQVivd6KIrahZbKJrNenPNUGuDS37WUFg+Mw==", "requires": { - "assert": "^2.1.0", + "assert": "^2.0.0", "browserify-zlib": "^0.2.0", "buffer": "^5.7.1", "console-browserify": "^1.2.0", "constants-browserify": "^1.0.0", "crypto-browserify": "^3.12.0", - "domain-browser": "^4.23.0", - "elliptic": "^6.6.0", + "domain-browser": "^4.22.0", + "elliptic": "^6.5.4", "events": "^3.3.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", + "path-browserify": "^1.0.0", "process": "^0.11.10", "punycode": "^1.4.1", "querystring-es3": "^0.2.1", - "readable-stream": "^3.6.2", + "readable-stream": "^3.6.0", "stream-browserify": "^3.0.0", "stream-http": "^3.2.0", "string_decoder": "^1.3.0", "timers-browserify": "^2.0.12", "tty-browserify": "0.0.1", - "url": "^0.11.3", - "util": "^0.12.5", + "url": "^0.11.0", + "util": "^0.12.4", "vm-browserify": "^1.1.2" }, "dependencies": { @@ -1428,18 +1419,17 @@ } }, "assert": { - "version": "2.1.0", + "version": "2.0.0", "bundled": true, "requires": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" } }, "available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.4", "bundled": true }, "base64-js": { @@ -1494,24 +1484,18 @@ } }, "browserify-sign": { - "version": "4.2.2", + "version": "4.2.1", "bundled": true, "requires": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", + "elliptic": "^6.5.3", "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", - "safe-buffer": "^5.2.1" - }, - "dependencies": { - "bn.js": { - "version": "5.2.1", - "bundled": true - } + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, "browserify-zlib": { @@ -1538,12 +1522,11 @@ "bundled": true }, "call-bind": { - "version": "1.0.5", + "version": "1.0.2", "bundled": true, "requires": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, "cipher-base": { @@ -1616,22 +1599,11 @@ "randomfill": "^1.0.3" } }, - "define-data-property": { - "version": "1.1.1", - "bundled": true, - "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, "define-properties": { - "version": "1.2.1", + "version": "1.1.3", "bundled": true, "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "object-keys": "^1.0.12" } }, "des.js": { @@ -1658,11 +1630,11 @@ } }, "domain-browser": { - "version": "4.23.0", + "version": "4.22.0", "bundled": true }, "elliptic": { - "version": "6.6.1", + "version": "6.5.4", "bundled": true, "requires": { "bn.js": "^4.11.9", @@ -1675,11 +1647,46 @@ }, "dependencies": { "bn.js": { - "version": "4.12.1", + "version": "4.12.0", "bundled": true } } }, + "es-abstract": { + "version": "1.18.3", + "bundled": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "bundled": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "bundled": true + }, "events": { "version": "3.3.0", "bundled": true @@ -1692,56 +1699,38 @@ "safe-buffer": "^5.1.1" } }, - "for-each": { - "version": "0.3.3", - "bundled": true, - "requires": { - "is-callable": "^1.1.3" - } + "foreach": { + "version": "2.0.5", + "bundled": true }, "function-bind": { - "version": "1.1.2", + "version": "1.1.1", "bundled": true }, "get-intrinsic": { - "version": "1.2.2", + "version": "1.1.1", "bundled": true, "requires": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "gopd": { - "version": "1.0.1", + "has": { + "version": "1.0.3", "bundled": true, "requires": { - "get-intrinsic": "^1.1.3" + "function-bind": "^1.1.1" } }, - "has-property-descriptors": { - "version": "1.0.1", - "bundled": true, - "requires": { - "get-intrinsic": "^1.2.2" - } - }, - "has-proto": { + "has-bigints": { "version": "1.0.1", "bundled": true }, "has-symbols": { - "version": "1.0.3", + "version": "1.0.2", "bundled": true }, - "has-tostringtag": { - "version": "1.0.0", - "bundled": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, "hash-base": { "version": "3.1.0", "bundled": true, @@ -1759,13 +1748,6 @@ "minimalistic-assert": "^1.0.1" } }, - "hasown": { - "version": "2.0.0", - "bundled": true, - "requires": { - "function-bind": "^1.1.2" - } - }, "hmac-drbg": { "version": "1.0.1", "bundled": true, @@ -1788,23 +1770,34 @@ "bundled": true }, "is-arguments": { + "version": "1.1.0", + "bundled": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.2", + "bundled": true + }, + "is-boolean-object": { "version": "1.1.1", "bundled": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.2" } }, "is-callable": { - "version": "1.2.7", + "version": "1.2.3", + "bundled": true + }, + "is-date-object": { + "version": "1.0.4", "bundled": true }, "is-generator-function": { - "version": "1.0.10", - "bundled": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "version": "1.0.9", + "bundled": true }, "is-nan": { "version": "1.3.2", @@ -1814,11 +1807,42 @@ "define-properties": "^1.1.3" } }, - "is-typed-array": { - "version": "1.1.12", + "is-negative-zero": { + "version": "2.0.1", + "bundled": true + }, + "is-number-object": { + "version": "1.0.5", + "bundled": true + }, + "is-regex": { + "version": "1.1.3", "bundled": true, "requires": { - "which-typed-array": "^1.1.11" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.6", + "bundled": true + }, + "is-symbol": { + "version": "1.0.4", + "bundled": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.5", + "bundled": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" } }, "md5.js": { @@ -1853,7 +1877,7 @@ "bundled": true }, "object-inspect": { - "version": "1.13.1", + "version": "1.10.3", "bundled": true }, "object-is": { @@ -1869,12 +1893,12 @@ "bundled": true }, "object.assign": { - "version": "4.1.4", + "version": "4.1.2", "bundled": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", "object-keys": "^1.1.1" } }, @@ -1938,12 +1962,9 @@ "version": "1.4.1", "bundled": true }, - "qs": { - "version": "6.11.2", - "bundled": true, - "requires": { - "side-channel": "^1.0.4" - } + "querystring": { + "version": "0.2.0", + "bundled": true }, "querystring-es3": { "version": "0.2.1", @@ -1965,7 +1986,7 @@ } }, "readable-stream": { - "version": "3.6.2", + "version": "3.6.0", "bundled": true, "requires": { "inherits": "^2.0.3", @@ -1989,16 +2010,6 @@ "version": "2.1.2", "bundled": true }, - "set-function-length": { - "version": "1.1.1", - "bundled": true, - "requires": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - } - }, "setimmediate": { "version": "1.0.5", "bundled": true @@ -2011,15 +2022,6 @@ "safe-buffer": "^5.0.1" } }, - "side-channel": { - "version": "1.0.4", - "bundled": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, "stream-browserify": { "version": "3.0.0", "bundled": true, @@ -2038,6 +2040,22 @@ "xtend": "^4.0.2" } }, + "string.prototype.trimend": { + "version": "1.0.4", + "bundled": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "bundled": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "string_decoder": { "version": "1.3.0", "bundled": true, @@ -2056,22 +2074,39 @@ "version": "0.0.1", "bundled": true }, - "url": { - "version": "0.11.3", + "unbox-primitive": { + "version": "1.0.1", "bundled": true, "requires": { - "punycode": "^1.4.1", - "qs": "^6.11.2" + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "url": { + "version": "0.11.0", + "bundled": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "bundled": true + } } }, "util": { - "version": "0.12.5", + "version": "0.12.4", "bundled": true, "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", "which-typed-array": "^1.1.2" } }, @@ -2083,15 +2118,28 @@ "version": "1.1.2", "bundled": true }, - "which-typed-array": { - "version": "1.1.13", + "which-boxed-primitive": { + "version": "1.0.2", "bundled": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.4", + "bundled": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" } }, "xtend": { @@ -2192,14 +2240,14 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "mongo-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mongo-object/-/mongo-object-3.0.1.tgz", - "integrity": "sha512-EbiwWHvKOF9xhIzuwaqknwPISdkHMipjMs6DiJFicupgBBLEhUs0OOro9MuPkFogB17DZlsV4KJhhxfqZ7ZRMQ==" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/mongo-object/-/mongo-object-0.1.4.tgz", + "integrity": "sha512-QtYk0gupWEn2+iB+DDRt1L+WbcNYvJRaHdih/dcqthOa1DbnREUGSs2WGcW478GNYpElflo/yybZXu0sTiRXHg==" }, "ms": { "version": "2.1.2", @@ -2255,9 +2303,9 @@ "dev": true }, "path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "requires": { "isarray": "0.0.1" @@ -2273,6 +2321,11 @@ "whatwg-url": "^5.0.0" } }, + "nodemailer": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", + "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==" + }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -2311,9 +2364,9 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" }, "once": { "version": "1.4.0", @@ -2328,6 +2381,14 @@ "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==" }, + "page": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/page/-/page-1.11.6.tgz", + "integrity": "sha512-P6e2JfzkBrPeFCIPplLP7vDDiU84RUUZMrWdsH4ZBGJ8OosnwFkcUkBHp1DTIjuipLliw9yQn/ZJsXZvarsO+g==", + "requires": { + "path-to-regexp": "~1.2.1" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -2361,6 +2422,21 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, + "path-to-regexp": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.2.1.tgz", + "integrity": "sha512-DBw9IhWfevR2zCVwEZURTuQNseCvu/Q9f5ZgqMCK0Rh61bDa4uyjPAOy9b55yKiPT59zZn+7uYKxmWwsguInwg==", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + } + } + }, "peek-readable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", @@ -2385,16 +2461,16 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, "qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "requires": { - "side-channel": "^1.0.6" + "side-channel": "^1.0.4" } }, "query-string": { @@ -2453,9 +2529,9 @@ } }, "regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "rimraf": { "version": "3.0.2", @@ -2518,71 +2594,13 @@ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "dependencies": { - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - } - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "requires": { - "es-define-property": "^1.0.0" - } - }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - } + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, "signal-exit": { @@ -2591,12 +2609,13 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simpl-schema": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/simpl-schema/-/simpl-schema-3.4.6.tgz", - "integrity": "sha512-xgShTrNzktC1TTgizSjyDHrxs0bmZa1b9sso54cL8xwO2OloVhtHjfO73/dAK9OFzUIWCBTpKMpD12JPTgVimA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/simpl-schema/-/simpl-schema-1.13.1.tgz", + "integrity": "sha512-20Qc2X13TvLJYY37eapvJ5CWyYYSScX2BJV5RcP4A15efA4k8c0XEsp9F/RofQi/IMrp7PzyxTXyjwlG7EFhCQ==", "requires": { "clone": "^2.1.2", - "mongo-object": "^3.0.1" + "message-box": "^0.2.7", + "mongo-object": "^0.1.4" } }, "sinon": { @@ -2709,9 +2728,9 @@ } }, "tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -2742,9 +2761,12 @@ } }, "tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } }, "token-types": { "version": "4.2.1", diff --git a/package.json b/package.json index 7b8196d20..cd6aafa2a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v7.84.0", + "version": "v7.19.0", "description": "Open-Source kanban", "private": true, "repository": { @@ -13,45 +13,46 @@ }, "homepage": "https://wekan.github.io", "devDependencies": { - "flatted": "^3.3.1", + "flatted": "^3.2.2", "sinon": "^13.0.2" }, "dependencies": { - "@babel/runtime": "^7.26.10", + "@babel/runtime": "^7.22.11", "@mapbox/node-pre-gyp": "^1.0.10", "@rwap/jquery-ui-touch-punch": "^1.0.11", - "@wekanteam/dragscroll": "https://github.com/wekan/dragscroll.git", - "@wekanteam/exceljs": "https://github.com/wekan/exceljs.git", "@wekanteam/html-to-markdown": "^1.0.2", "@wekanteam/meteor-globals": "^1.1.4", "@wekanteam/meteor-reactive-cache": "^1.0.6", "ajv": "^6.12.6", "bcryptjs": "^2.4.3", "bson": "^4.5.2", - "dompurify": "^3.2.4", + "dompurify": "^2.4.1", "es6-promise": "^4.2.4", "escape-string-regexp": "^5.0.0", + "exceljs": "git+https://github.com/exceljs/exceljs.git", "fibers": "^5.0.3", "file-type": "^16.5.4", "filesize": "^8.0.7", "i18next": "^21.6.16", "i18next-sprintf-postprocessor": "^0.2.2", "jquery": "^3.7.1", - "jquery-ui": "^1.13.3", + "jquery-ui": "^1.13.0", "jszip": "^3.7.1", "ldapjs": "^2.3.3", "markdown-it": "^12.3.2", "markdown-it-emoji": "^2.0.0", - "markdown-it-mathjax3": "^4.3.2", + "markdown-it-mathjax3": "^4.3.1", "meteor-accounts-t9n": "^2.6.0", - "meteor-node-stubs": "https://github.com/wekan/meteor-node-stubs.git", + "meteor-node-stubs": "^1.2.5", "minio": "^7.1.3", "moment": "^2.29.4", + "nodemailer": "^6.6.3", "os": "^0.1.2", + "page": "^1.11.6", "papaparse": "^5.3.1", "pretty-ms": "^7.0.1", - "qs": "^6.13.0", - "simpl-schema": "^3.4.6", + "qs": "^6.10.1", + "simpl-schema": "^1.12.0", "source-map-support": "^0.5.20", "uuid": "^8.3.2" } diff --git a/packages/markdown/package.js b/packages/markdown/package.js index f8f6c8152..8263afca5 100644 --- a/packages/markdown/package.js +++ b/packages/markdown/package.js @@ -6,6 +6,8 @@ Package.describe({ }); Package.onUse(function (api) { + if(api.versionsFrom) api.versionsFrom('1.8.2'); + api.use('templating'); api.use("ecmascript", ['server', 'client']); diff --git a/packages/markdown/src/template-integration.js b/packages/markdown/src/template-integration.js index 16c5cea2f..8f5a6c335 100644 --- a/packages/markdown/src/template-integration.js +++ b/packages/markdown/src/template-integration.js @@ -36,9 +36,8 @@ for(var i=0; i<urlschemes.length;i++){ } var emoji = require('markdown-it-emoji'); -Markdown.use(emoji); - var mathjax = require('markdown-it-mathjax3'); +Markdown.use(emoji); Markdown.use(mathjax); // Try to fix Mermaid Diagram error: Maximum call stack size exceeded. diff --git a/packages/meteor-autosize/img/ScreenShot1.png b/packages/meteor-autosize/img/ScreenShot1.png index 902f25a5e..637dd0c63 100644 Binary files a/packages/meteor-autosize/img/ScreenShot1.png and b/packages/meteor-autosize/img/ScreenShot1.png differ diff --git a/packages/meteor-autosize/img/ScreenShot2.png b/packages/meteor-autosize/img/ScreenShot2.png index d2d3ad9e1..818c8a2bf 100644 Binary files a/packages/meteor-autosize/img/ScreenShot2.png and b/packages/meteor-autosize/img/ScreenShot2.png differ diff --git a/packages/meteor-autosize/package.js b/packages/meteor-autosize/package.js index 622ca3560..ff1ebd22a 100644 --- a/packages/meteor-autosize/package.js +++ b/packages/meteor-autosize/package.js @@ -7,5 +7,6 @@ Package.describe({ }); Package.onUse(function (api) { + api.versionsFrom("METEOR@0.9.0"); api.addFiles(['lib/autosize.js'], 'client'); }); diff --git a/packages/wekan-accounts-cas/package.js b/packages/wekan-accounts-cas/package.js index 314d17c17..f698a6b23 100644 --- a/packages/wekan-accounts-cas/package.js +++ b/packages/wekan-accounts-cas/package.js @@ -6,6 +6,7 @@ Package.describe({ }); Package.onUse(function(api) { + api.versionsFrom('2.7'); api.use('routepolicy', 'server'); api.use('webapp', 'server'); api.use('accounts-base', ['client', 'server']); diff --git a/packages/wekan-accounts-lockout/package.js b/packages/wekan-accounts-lockout/package.js index 7f1a64b21..769680679 100644 --- a/packages/wekan-accounts-lockout/package.js +++ b/packages/wekan-accounts-lockout/package.js @@ -9,6 +9,7 @@ Package.describe({ }); Package.onUse((api) => { + api.versionsFrom('2.7'); api.use([ 'ecmascript', 'accounts-password', diff --git a/packages/wekan-accounts-sandstorm/package.js b/packages/wekan-accounts-sandstorm/package.js index b3972324b..efec314f5 100644 --- a/packages/wekan-accounts-sandstorm/package.js +++ b/packages/wekan-accounts-sandstorm/package.js @@ -27,6 +27,8 @@ Package.describe({ }); Package.onUse(function(api) { + api.versionsFrom('2.7'); + api.use('random', ['client', 'server']); api.use('accounts-base', ['client', 'server'], {weak: true}); api.use('webapp', 'server'); diff --git a/packages/wekan-bootstrap-datepicker/package.js b/packages/wekan-bootstrap-datepicker/package.js index fa0492ea7..ad28d0193 100644 --- a/packages/wekan-bootstrap-datepicker/package.js +++ b/packages/wekan-bootstrap-datepicker/package.js @@ -7,6 +7,7 @@ Package.describe({ }); Package.onUse(function (api) { + api.versionsFrom('2.13'); api.use('jquery', 'client'); api.addFiles('bootstrap-datepicker/dist/js/bootstrap-datepicker.js', 'client'); diff --git a/packages/wekan-fontawesome/package.js b/packages/wekan-fontawesome/package.js index b9c54160e..ee52d9685 100644 --- a/packages/wekan-fontawesome/package.js +++ b/packages/wekan-fontawesome/package.js @@ -8,6 +8,8 @@ Package.describe({ Package.onUse(function(api) { + api.versionsFrom('2.13'); + api.addAssets([ 'fontawesome-free/webfonts/fa-brands-400.ttf', 'fontawesome-free/webfonts/fa-brands-400.woff2', diff --git a/packages/wekan-fullcalendar/package.js b/packages/wekan-fullcalendar/package.js index 38e8d64fc..bde916fa9 100644 --- a/packages/wekan-fullcalendar/package.js +++ b/packages/wekan-fullcalendar/package.js @@ -6,8 +6,9 @@ Package.describe({ }); Package.onUse(function(api) { + api.versionsFrom('2.13'); api.use([ - 'momentjs:moment', + 'momentjs:moment@2.29.3', 'templating' ], 'client'); api.addFiles([ diff --git a/packages/wekan-ldap/package.js b/packages/wekan-ldap/package.js index 57a2ede35..b3ea7a7d9 100644 --- a/packages/wekan-ldap/package.js +++ b/packages/wekan-ldap/package.js @@ -12,6 +12,7 @@ Package.describe({ Package.onUse(function(api) { + api.versionsFrom('2.7'); api.use('yasaricli:slugify'); api.use('ecmascript'); api.use('underscore'); diff --git a/packages/wekan-oidc/oidc_server.js b/packages/wekan-oidc/oidc_server.js index 04a304290..35b7f922c 100644 --- a/packages/wekan-oidc/oidc_server.js +++ b/packages/wekan-oidc/oidc_server.js @@ -19,7 +19,7 @@ var serviceData = {}; var userinfo = {}; OAuth.registerService('oidc', 2, null, function (query) { - var debug = process.env.DEBUG === 'true'; + var debug = process.env.DEBUG || false; var token = getToken(query); if (debug) console.log('XXX: register token:', token); @@ -27,14 +27,11 @@ OAuth.registerService('oidc', 2, null, function (query) { var accessToken = token.access_token || token.id_token; var expiresAt = (+new Date) + (1000 * parseInt(token.expires_in, 10)); - var claimsInAccessToken = (process.env.OAUTH2_ADFS_ENABLED === 'true' || - process.env.OAUTH2_ADFS_ENABLED === true || - process.env.OAUTH2_B2C_ENABLED === 'true' || - process.env.OAUTH2_B2C_ENABLED === true) || false; + var claimsInAccessToken = (process.env.OAUTH2_ADFS_ENABLED === 'true' || process.env.OAUTH2_ADFS_ENABLED === true) || false; if(claimsInAccessToken) { - // hack when using custom claims in the accessToken. On premise ADFS. And Azure AD B2C. + // hack when using custom claims in the accessToken. On premise ADFS userinfo = getTokenContent(accessToken); } else @@ -67,10 +64,6 @@ OAuth.registerService('oidc', 2, null, function (query) { serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"]; } - if (process.env.OAUTH2_B2C_ENABLED === 'true' || process.env.OAUTH2_B2C_ENABLED === true) { - serviceData.email = userinfo["emails"][0]; - } - if (accessToken) { var tokenContent = getTokenContent(accessToken); var fields = _.pick(tokenContent, getConfiguration().idTokenWhitelistFields); @@ -83,11 +76,6 @@ OAuth.registerService('oidc', 2, null, function (query) { profile.name = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"]; profile.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"]; - - if (process.env.OAUTH2_B2C_ENABLED === 'true' || process.env.OAUTH2_B2C_ENABLED === true) { - profile.email = userinfo["emails"][0]; - } - if (debug) console.log('XXX: profile:', profile); @@ -135,7 +123,7 @@ if (Meteor.release) { if (process.env.ORACLE_OIM_ENABLED !== 'true' && process.env.ORACLE_OIM_ENABLED !== true) { var getToken = function (query) { - var debug = process.env.DEBUG === 'true'; + var debug = process.env.DEBUG || false; var config = getConfiguration(); if(config.tokenEndpoint.includes('https://')){ var serverTokenEndpoint = config.tokenEndpoint; @@ -181,7 +169,7 @@ if (process.env.ORACLE_OIM_ENABLED !== 'true' && process.env.ORACLE_OIM_ENABLED if (process.env.ORACLE_OIM_ENABLED === 'true' || process.env.ORACLE_OIM_ENABLED === true) { var getToken = function (query) { - var debug = process.env.DEBUG === 'true'; + var debug = (process.env.DEBUG === 'true' || process.env.DEBUG === true) || false; var config = getConfiguration(); if(config.tokenEndpoint.includes('https://')){ var serverTokenEndpoint = config.tokenEndpoint; @@ -240,7 +228,7 @@ if (process.env.ORACLE_OIM_ENABLED === 'true' || process.env.ORACLE_OIM_ENABLED var getUserInfo = function (accessToken) { - var debug = process.env.DEBUG === 'true'; + var debug = process.env.DEBUG || false; var config = getConfiguration(); // Some userinfo endpoints use a different base URL than the authorization or token endpoints. // This logic allows the end user to override the setting by providing the full URL to userinfo in their config. diff --git a/public/Square150x150Logo.scale-100.png b/public/Square150x150Logo.scale-100.png index bcddab58a..0445b50c7 100644 Binary files a/public/Square150x150Logo.scale-100.png and b/public/Square150x150Logo.scale-100.png differ diff --git a/public/Square44x44Logo.scale-100.png b/public/Square44x44Logo.scale-100.png index da57467c8..bf8cacfee 100644 Binary files a/public/Square44x44Logo.scale-100.png and b/public/Square44x44Logo.scale-100.png differ diff --git a/public/StoreLogo.scale-100.png b/public/StoreLogo.scale-100.png index 0de8dd974..5d73037ed 100644 Binary files a/public/StoreLogo.scale-100.png and b/public/StoreLogo.scale-100.png differ diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png index 8a72e0ebe..7d29824e2 100644 Binary files a/public/android-chrome-192x192.png and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png index 8614bfb40..7ecf363ad 100644 Binary files a/public/android-chrome-512x512.png and b/public/android-chrome-512x512.png differ diff --git a/public/android/android-launchericon-144-144.png b/public/android/android-launchericon-144-144.png index 6a7a896b8..4f7050c99 100644 Binary files a/public/android/android-launchericon-144-144.png and b/public/android/android-launchericon-144-144.png differ diff --git a/public/android/android-launchericon-192-192.png b/public/android/android-launchericon-192-192.png index a4cdc8eee..b6246fb58 100644 Binary files a/public/android/android-launchericon-192-192.png and b/public/android/android-launchericon-192-192.png differ diff --git a/public/android/android-launchericon-48-48.png b/public/android/android-launchericon-48-48.png index ba4207268..83d50d3a0 100644 Binary files a/public/android/android-launchericon-48-48.png and b/public/android/android-launchericon-48-48.png differ diff --git a/public/android/android-launchericon-512-512.png b/public/android/android-launchericon-512-512.png index 0f69b9976..3d8977986 100644 Binary files a/public/android/android-launchericon-512-512.png and b/public/android/android-launchericon-512-512.png differ diff --git a/public/android/android-launchericon-72-72.png b/public/android/android-launchericon-72-72.png index c62db8504..c8d197893 100644 Binary files a/public/android/android-launchericon-72-72.png and b/public/android/android-launchericon-72-72.png differ diff --git a/public/android/android-launchericon-96-96.png b/public/android/android-launchericon-96-96.png index b17068900..9f8d9452c 100644 Binary files a/public/android/android-launchericon-96-96.png and b/public/android/android-launchericon-96-96.png differ diff --git a/public/api/wekan.html b/public/api/wekan.html index d73fec650..2cc7e566c 100644 --- a/public/api/wekan.html +++ b/public/api/wekan.html @@ -7,7 +7,7 @@ <meta charset="utf-8"> <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> - <title>Wekan REST API + Wekan REST API v7.19 @@ -1465,10 +1465,30 @@ Darkula color scheme from the JetBrains family of IDEs var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduce(function(e,t){return e+t.boost},0);return n.some(function(e){return this.tokenStore.has(e)},this)?(n.forEach(function(t,n,s){var a=1/s.length*this._fields.length*o,u=this,c=this.tokenStore.expand(t).reduce(function(n,i){var o=u.corpusTokens.indexOf(i),s=u.idf(i),c=1,l=new e.SortedSet;if(i!==t){var f=Math.max(3,i.length-t.length);c=1/Math.log(f)}return o>-1&&r.insert(o,a*s*c),Object.keys(u.tokenStore.get(i)).forEach(function(e){l.add(e)}),n.union(l)},new e.SortedSet);i.push(c)},this),i.reduce(function(e,t){return e.intersect(t)}).map(function(e){return{ref:e,score:r.similarity(this.documentVector(e))}},this).sort(function(e,t){return t.score-e.score})):[]},e.Index.prototype.documentVector=function(t){for(var n=this.documentStore.get(t),r=n.length,i=new e.Vector,o=0;ot;t+=1)n.push(e[t].listener);return n},r.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},r.addListener=function(e,n){var r,i=this.getListenersAsObject(e),o="object"==typeof n;for(r in i)i.hasOwnProperty(r)&&-1===t(i[r],n)&&i[r].push(o?n:{listener:n,once:!1});return this},r.on=n("addListener"),r.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},r.once=n("addOnceListener"),r.defineEvent=function(e){return this.getListeners(e),this},r.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},r.removeListener=function(e,n){var r,i,o=this.getListenersAsObject(e);for(i in o)o.hasOwnProperty(i)&&-1!==(r=t(o[i],n))&&o[i].splice(r,1);return this},r.off=n("removeListener"),r.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},r.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},r.manipulateListeners=function(e,t,n){var r,i,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(r=n.length;r--;)o.call(this,t,n[r]);else for(r in t)t.hasOwnProperty(r)&&(i=t[r])&&("function"==typeof i?o.call(this,r,i):s.call(this,r,i));return this},r.removeEvent=function(e){var t,n=typeof e,r=this._getEvents();if("string"===n)delete r[e];else if("object"===n)for(t in r)r.hasOwnProperty(t)&&e.test(t)&&delete r[t];else delete this._events;return this},r.removeAllListeners=n("removeEvent"),r.emitEvent=function(e,t){var n,r,i,o=this.getListenersAsObject(e);for(i in o)if(o.hasOwnProperty(i))for(r=o[i].length;r--;)n=o[i][r],!0===n.once&&this.removeListener(e,n.listener),n.listener.apply(this,t||[])===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},r.trigger=n("emitEvent"),r.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},r.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},r._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},r._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return i.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}.call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,r=function(){};n.addEventListener?r=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(r=function(e,n,r){e[n+r]=r.handleEvent?function(){var n=t(e);r.handleEvent.call(r,n)}:function(){var n=t(e);r.call(e,n)},e.attachEvent("on"+n,e[n+r])});var i=function(){};n.removeEventListener?i=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(i=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(r){e[t+n]=void 0}});var o={bind:r,unbind:i};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,r){return t(e,n,r)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function r(e,t){for(var n in t)e[n]=t[n];return e}function i(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(i(e))t=e;else if("number"==typeof e.length)for(var n=0,r=e.length;r>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=r({},this.options),"function"==typeof t?n=t:r(this.options,t),n&&this.on("always",n),this.getImages(),c&&(this.jqDeferred=new c.Deferred);var i=this;setTimeout(function(){i.check()})}function a(e){this.img=e}function u(e){this.src=e,p[e]=this}var c=e.jQuery,l=e.console,f=void 0!==l,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var r=n.nodeType;if(r&&(1===r||9===r||11===r))for(var i=n.querySelectorAll("img"),o=0,s=i.length;s>o;o++){var a=i[o];this.addImage(a)}}},s.prototype.addImage=function(e){var t=new a(e);this.images.push(t)},s.prototype.check=function(){function e(e,i){return t.options.debug&&f&&l.log("confirm",e,i),t.progress(e),n++,n===r&&t.complete(),!0}var t=this,n=0,r=this.images.length;if(this.hasAnyBroken=!1,!r)return void this.complete();for(var i=0;r>i;i++){var o=this.images[i];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},c&&(c.fn.imagesLoaded=function(e,t){return new s(this,e,t).jqDeferred.promise(c(this))}),a.prototype=new t,a.prototype.check=function(){var e=p[this.img.src]||new u(this.img.src);if(e.isConfirmed)return void this.confirm(e.isLoaded,"cached was confirmed");if(this.img.complete&&void 0!==this.img.naturalWidth)return void this.confirm(0!==this.img.naturalWidth,"naturalWidth");var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},a.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var p={};return u.prototype=new t,u.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},u.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},u.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},u.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},u.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},u.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}),function(){if("ontouchstart"in window){var e,t,n,r,i,o,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){if(this.threshold)return!1;this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY])},r=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),r.simulated=!0,t.target.dispatchEvent(r)}},i=function(e){var t=Date.now(),n=t-s.time,r=e.clientX,i=e.clientY,a=[Math.abs(s.x-r),Math.abs(s.y-i)],u=o(e.target,"A")||e.target,c=u.nodeName,l="A"===c,f=window.navigator.standalone&&l&&e.target.getAttribute("href");if(s.time=t,s.x=r,s.y=i,(!e.simulated&&(n<500||n<1500&&a[0]<50&&a[1]<50)||f)&&(e.preventDefault(),e.stopPropagation(),!f))return!1;f&&(window.location=u.getAttribute("href")),u&&u.classList&&(u.classList.add("energize-focus"),window.setTimeout(function(){u.classList.remove("energize-focus")},150))},o=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",r,!1),document.addEventListener("click",i,!0)}}(),function(){"use strict";function e(e){if(e&&""!==e){$(".lang-selector a").removeClass("active"),$(".lang-selector a[data-language-name='"+e+"']").addClass("active");for(var t=0;t=1){var e=t(location.search).language;if(e)return e;if(-1!=jQuery.inArray(location.search.substr(1),a))return location.search.substr(1)}return!1}function i(e){var r=t(location.search);return r.language?(r.language=e,n(r)):e}function o(e){if(history){var t=window.location.hash;t&&(t=t.replace(/^#+/,"")),history.pushState({},"","?"+i(e)+"#"+t),localStorage.setItem("language",e)}}function s(t){var n=localStorage.getItem("language");a=t;var i=r();i?(e(i),localStorage.setItem("language",i)):e(null!==n&&-1!=jQuery.inArray(n,a)?n:a[0])}var a=[];window.setupLanguages=s,window.activateLanguage=e,window.getLanguageFromQueryString=r,$(function(){$(".lang-selector a").on("click",function(){var t=$(this).data("language-name");return o(t),e(t),!1})})}(),function(){"use strict";function e(){$("h1, h2").each(function(){var e=$(this),t=e.nextUntil("h1, h2");f.add({id:e.prop("id"),title:e.text(),body:t.text()})}),t()}function t(){f.tokenStore.length>5e3&&(c=300)}function n(){s=$(".content"),a=$(".search-results"),$("#input-search").on("keyup",function(e){!function(){return function(e,t){clearTimeout(l),l=setTimeout(e,t)}}()(function(){r(e)},c)})}function r(e){var t=$("#input-search")[0];if(o(),a.addClass("visible"),27===e.keyCode&&(t.value=""),t.value){var n=f.search(t.value).filter(function(e){return e.score>1e-4});n.length?(a.empty(),$.each(n,function(e,t){var n=document.getElementById(t.ref);a.append("
  • "+$(n).text()+"
  • ")}),i.call(t)):(a.html("
  • "),$(".search-results li").text('No Results Found for "'+t.value+'"'))}else o(),a.removeClass("visible")}function i(){this.value&&s.highlight(this.value,u)}function o(){s.unhighlight(u)}var s,a,u={element:"span",className:"search-highlight"},c=0,l=0,f=new lunr.Index;f.ref("id"),f.field("title",{boost:10}),f.field("body"),f.pipeline.add(lunr.trimmer,lunr.stopWordFilter),$(e),$(n)}(),function(){"use strict";function e(e,i,o,s){var a={},u=0,c=0,l=document.title,f=function(){a={},u=$(document).height(),c=$(window).height(),e.find(i).each(function(){var e=$(this).attr("href");"#"===e[0]&&(a[e]=$(e).offset().top)})},d=function(){var n=$(document).scrollTop()+s;n+c>=u&&(n=u+1e3);var r=null;for(var f in a)(a[f]a[r]||null===r)&&(r=f);n!=s||t||(r=window.location.hash,t=!0);var d=e.find("[href='"+r+"']").first();if(!d.hasClass("active")){e.find(".active").removeClass("active"),e.find(".active-parent").removeClass("active-parent"),d.addClass("active"),d.parents(o).addClass("active").siblings(i).addClass("active-parent"),d.siblings(o).addClass("active"),e.find(o).filter(":not(.active)").slideUp(150),e.find(o).filter(".active").slideDown(150),window.history.replaceState&&window.history.replaceState(null,"",r);var p=d.data("title");void 0!==p&&p.length>0?document.title=p+" – "+l:document.title=l}};!function(){f(),d(),$("#nav-button").click(function(){return $(".toc-wrapper").toggleClass("open"),$("#nav-button").toggleClass("open"),!1}),$(".page-wrapper").click(r),$(".toc-link").click(r),e.find(i).click(function(){setTimeout(function(){d()},0)}),$(window).scroll(n(d,200)),$(window).resize(n(f,200))}(),window.recacheHeights=f,window.refreshToc=d}var t=!1,n=function(e,t){var n=!1;return function(){!1===n&&(setTimeout(function(){e(),n=!1},t),n=!0)}},r=function(){$(".toc-wrapper").removeClass("open"),$("#nav-button").removeClass("open")};window.loadToc=e}(),$(function(){loadToc($("#toc"),".toc-link",".toc-list-h2, .toc-list-h3, .toc-list-h4, .toc-list-h5, .toc-list-h6",10),setupLanguages($("body").data("languages")),$(".content").imagesLoaded(function(){window.recacheHeights(),window.refreshToc()})}),window.onpopstate=function(){activateLanguage(getLanguageFromQueryString())}; - + + + + + + + + + + + + + + + + + + + + + - + NAV @@ -1476,7 +1496,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
    - +
    @@ -1512,6 +1532,10 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc Go + + PHP + +
    @@ -1524,7 +1548,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
    • - Wekan REST API v7.84 + Wekan REST API v7.19
    • @@ -1544,12 +1568,12 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
      • - login + login
      • - register + register
      • @@ -1563,7 +1587,52 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
        • - exportJson + get_public_boards + +
        • + +
        • + new_board + +
        • + +
        • + get_board + +
        • + +
        • + delete_board + +
        • + +
        • + get_board_attachments + +
        • + +
        • + exportJson + +
        • + +
        • + add_board_label + +
        • + +
        • + set_board_member_permission + +
        • + +
        • + get_boards_count + +
        • + +
        • + get_boards_from_user
        • @@ -1577,22 +1646,22 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
          • - get_all_checklists + get_all_checklists
          • - new_checklist + new_checklist
          • - get_checklist + get_checklist
          • - delete_checklist + delete_checklist
          • @@ -1606,22 +1675,22 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
            • - new_checklist_item + new_checklist_item
            • - get_checklist_item + get_checklist_item
            • - edit_checklist_item + edit_checklist_item
            • - delete_checklist_item + delete_checklist_item
            • @@ -1635,22 +1704,22 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
              • - get_all_comments + get_all_comments
              • - new_comment + new_comment
              • - get_comment + get_comment
              • - delete_comment + delete_comment
              • @@ -1664,52 +1733,52 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                • - get_cards_by_custom_field + get_cards_by_custom_field
                • - get_board_cards_count + get_board_cards_count
                • - get_all_cards + get_all_cards
                • - new_card + new_card
                • - get_card + get_card
                • - edit_card + edit_card
                • - delete_card + delete_card
                • - edit_card_custom_field + edit_card_custom_field
                • - get_list_cards_count + get_list_cards_count
                • - get_swimlane_cards + get_swimlane_cards
                • @@ -1723,42 +1792,42 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                  • - get_all_custom_fields + get_all_custom_fields
                  • - new_custom_field + new_custom_field
                  • - get_custom_field + get_custom_field
                  • - edit_custom_field + edit_custom_field
                  • - delete_custom_field + delete_custom_field
                  • - add_custom_field_dropdown_items + add_custom_field_dropdown_items
                  • - edit_custom_field_dropdown_item + edit_custom_field_dropdown_item
                  • - delete_custom_field_dropdown_item + delete_custom_field_dropdown_item
                  • @@ -1772,37 +1841,37 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                    • - get_all_integrations + get_all_integrations
                    • - new_integration + new_integration
                    • - get_integration + get_integration
                    • - edit_integration + edit_integration
                    • - delete_integration + delete_integration
                    • - delete_integration_activities + delete_integration_activities
                    • - new_integration_activities + new_integration_activities
                    • @@ -1816,22 +1885,22 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                      • - get_all_lists + get_all_lists
                      • - new_list + new_list
                      • - get_list + get_list
                      • - delete_list + delete_list
                      • @@ -1845,27 +1914,27 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                        • - get_all_swimlanes + get_all_swimlanes
                        • - new_swimlane + new_swimlane
                        • - get_swimlane + get_swimlane
                        • - edit_swimlane + edit_swimlane
                        • - delete_swimlane + delete_swimlane
                        • @@ -1879,72 +1948,97 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                          • - CardComments + Boards
                          • - Cards + BoardsLabels
                          • - CardsVote + BoardsMembers
                          • - CardsPoker + BoardsOrgs
                          • - CardsCustomfields + BoardsTeams
                          • - ChecklistItems + CardComments
                          • - Checklists + Cards
                          • - CustomFields + CardsVote
                          • - CustomFieldsSettings + CardsPoker
                          • - CustomFieldsSettingsDropdownitems + CardsCustomfields
                          • - Integrations + ChecklistItems
                          • - Lists + Checklists
                          • - ListsWiplimit + CustomFields
                          • - Swimlanes + CustomFieldsSettings + +
                          • + +
                          • + CustomFieldsSettingsDropdownitems + +
                          • + +
                          • + Integrations + +
                          • + +
                          • + Lists + +
                          • + +
                          • + ListsWiplimit + +
                          • + +
                          • + Swimlanes
                          • @@ -1963,7 +2057,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                            -

                            Wekan REST API v7.84

                            +

                            Wekan REST API v7.19

                            Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

                            @@ -1995,47 +2089,28 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
                            # You can also use wget
                             curl -X POST /users/login \
                            -  -H 'Content-Type: application/x-www-form-urlencoded' \
                            -  -H 'Accept: */*'
                            +  -H 'Content-Type: application/x-www-form-urlencoded' \
                            +  -H 'Accept: */*'
                             
                             
                            -
                            POST /users/login HTTP/1.1
                            +
                            POST /users/login HTTP/1.1
                             
                            -Content-Type: application/x-www-form-urlencoded
                            -Accept: */*
                            +Content-Type: application/x-www-form-urlencoded
                            +Accept: */*
                             
                            -
                            -
                            var headers = {
                            -  'Content-Type':'application/x-www-form-urlencoded',
                            -  'Accept':'*/*'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/users/login',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "username": "string",
                            -  "password": "pa$$word"
                            -}';
                            +
                            +
                            const inputBody = '{
                            +  "username": "string",
                            +  "password": "pa$$word"
                            +}';
                             const headers = {
                            -  'Content-Type':'application/x-www-form-urlencoded',
                            -  'Accept':'*/*'
                            -
                            +  'Content-Type':'application/x-www-form-urlencoded',
                            +  'Accept':'*/*'
                             };
                             
                            -fetch('/users/login',
                            +fetch('/users/login',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -2046,15 +2121,38 @@ fetch('/users/login',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "username": "string",
                            +  "password": "pa$$word"
                            +};
                            +const headers = {
                            +  'Content-Type':'application/x-www-form-urlencoded',
                            +  'Accept':'*/*'
                            +};
                            +
                            +fetch('/users/login',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'application/x-www-form-urlencoded',
                            -  'Accept' => '*/*'
                            +  'Content-Type' => 'application/x-www-form-urlencoded',
                            +  'Accept' => '*/*'
                             }
                             
                            -result = RestClient.post '/users/login',
                            +result = RestClient.post '/users/login',
                               params: {
                               }, headers: headers
                             
                            @@ -2063,20 +2161,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'application/x-www-form-urlencoded',
                            -  'Accept': '*/*'
                            +  'Content-Type': 'application/x-www-form-urlencoded',
                            +  'Accept': '*/*'
                             }
                             
                            -r = requests.post('/users/login', params={
                            +r = requests.post('/users/login', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/users/login");
                            +
                            URL obj = new URL("/users/login");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -2092,20 +2188,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"application/x-www-form-urlencoded"},
                            -        "Accept": []string{"*/*"},
                            -        
                            +        "Content-Type": []string{"application/x-www-form-urlencoded"},
                            +        "Accept": []string{"*/*"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/users/login", data)
                            +    req, err := http.NewRequest("POST", "/users/login", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -2113,6 +2208,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/x-www-form-urlencoded',
                            +    'Accept' => '*/*',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/users/login', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /users/login

                            Login with REST API

                            @@ -2139,7 +2259,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -2269,48 +2389,29 @@ This operation does not require authentication
                            # You can also use wget
                             curl -X POST /users/register \
                            -  -H 'Content-Type: application/x-www-form-urlencoded' \
                            -  -H 'Accept: */*'
                            +  -H 'Content-Type: application/x-www-form-urlencoded' \
                            +  -H 'Accept: */*'
                             
                             
                            -
                            POST /users/register HTTP/1.1
                            +
                            POST /users/register HTTP/1.1
                             
                            -Content-Type: application/x-www-form-urlencoded
                            -Accept: */*
                            +Content-Type: application/x-www-form-urlencoded
                            +Accept: */*
                             
                            -
                            -
                            var headers = {
                            -  'Content-Type':'application/x-www-form-urlencoded',
                            -  'Accept':'*/*'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/users/register',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "username": "string",
                            -  "password": "pa$$word",
                            -  "email": "string"
                            -}';
                            +
                            +
                            const inputBody = '{
                            +  "username": "string",
                            +  "password": "pa$$word",
                            +  "email": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'application/x-www-form-urlencoded',
                            -  'Accept':'*/*'
                            -
                            +  'Content-Type':'application/x-www-form-urlencoded',
                            +  'Accept':'*/*'
                             };
                             
                            -fetch('/users/register',
                            +fetch('/users/register',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -2321,15 +2422,39 @@ fetch('/users/register',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "username": "string",
                            +  "password": "pa$$word",
                            +  "email": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'application/x-www-form-urlencoded',
                            +  'Accept':'*/*'
                            +};
                            +
                            +fetch('/users/register',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'application/x-www-form-urlencoded',
                            -  'Accept' => '*/*'
                            +  'Content-Type' => 'application/x-www-form-urlencoded',
                            +  'Accept' => '*/*'
                             }
                             
                            -result = RestClient.post '/users/register',
                            +result = RestClient.post '/users/register',
                               params: {
                               }, headers: headers
                             
                            @@ -2338,20 +2463,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'application/x-www-form-urlencoded',
                            -  'Accept': '*/*'
                            +  'Content-Type': 'application/x-www-form-urlencoded',
                            +  'Accept': '*/*'
                             }
                             
                            -r = requests.post('/users/register', params={
                            +r = requests.post('/users/register', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/users/register");
                            +
                            URL obj = new URL("/users/register");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -2367,20 +2490,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"application/x-www-form-urlencoded"},
                            -        "Accept": []string{"*/*"},
                            -        
                            +        "Content-Type": []string{"application/x-www-form-urlencoded"},
                            +        "Accept": []string{"*/*"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/users/register", data)
                            +    req, err := http.NewRequest("POST", "/users/register", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -2388,6 +2510,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/x-www-form-urlencoded',
                            +    'Accept' => '*/*',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/users/register', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /users/register

                            Register with REST API

                            @@ -2419,7 +2566,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -2550,45 +2697,31 @@ System.out.println(response.toString()); This operation does not require authentication

                            Boards

                            -

                            exportJson

                            -

                            +

                            get_public_boards

                            +

                            Code samples

                            # You can also use wget
                            -curl -X GET /api/boards/{board}/export \
                            -  -H 'Authorization: API_KEY'
                            +curl -X GET /api/boards \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/export HTTP/1.1
                            +
                            GET /api/boards HTTP/1.1
                             
                            -
                            -
                            var headers = {
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/export',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/export',
                            +fetch('/api/boards',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -2599,14 +2732,35 @@ fetch('/api/boards/{board}/export',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/export',
                            +result = RestClient.get '/api/boards',
                               params: {
                               }, headers: headers
                             
                            @@ -2615,19 +2769,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/export', params={
                            +r = requests.get('/api/boards', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/export");
                            +
                            URL obj = new URL("/api/boards");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -2643,19 +2796,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/export", data)
                            +    req, err := http.NewRequest("GET", "/api/boards", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -2663,6 +2816,1338 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            GET /api/boards

                            +

                            Get all public boards

                            +
                            +

                            Example responses

                            +
                            +
                            +

                            200 Response

                            +
                            +
                            [
                            +  {
                            +    "_id": "string",
                            +    "title": "string"
                            +  }
                            +]
                            +
                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responseInline
                            +

                            Response Schema

                            +

                            Status Code 200

                            + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            » _idstringfalsenonenone
                            » titlestringfalsenonenone
                            + +

                            new_board

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X POST /api/boards \
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            POST /api/boards HTTP/1.1
                            +
                            +Content-Type: multipart/form-data
                            +Accept: application/json
                            +
                            +
                            +
                            const inputBody = '{
                            +  "title": "string",
                            +  "owner": "string",
                            +  "isAdmin": true,
                            +  "isActive": true,
                            +  "isNoComments": true,
                            +  "isCommentOnly": true,
                            +  "isWorker": true,
                            +  "permission": "string",
                            +  "color": "string"
                            +}';
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards',
                            +{
                            +  method: 'POST',
                            +  body: inputBody,
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "title": "string",
                            +  "owner": "string",
                            +  "isAdmin": true,
                            +  "isActive": true,
                            +  "isNoComments": true,
                            +  "isCommentOnly": true,
                            +  "isWorker": true,
                            +  "permission": "string",
                            +  "color": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.post '/api/boards',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.post('/api/boards', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/boards");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("POST");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("POST", "/api/boards", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            POST /api/boards

                            +

                            Create a board

                            +

                            This allows to create a board.

                            +

                            The color has to be chosen between belize, nephritis, pomegranate, +pumpkin, wisteria, moderatepink, strongcyan, +limegreen, midnight, dark, relax, corteza:

                            + Wekan logo +
                            +

                            Body parameter

                            +
                            +
                            title: string
                            +owner: string
                            +isAdmin: true
                            +isActive: true
                            +isNoComments: true
                            +isCommentOnly: true
                            +isWorker: true
                            +permission: string
                            +color: string
                            +
                            +
                            +

                            Parameters

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameInTypeRequiredDescription
                            bodybodyobjecttruenone
                            » titlebodystringtruethe new title of the board
                            » ownerbodystringtrue"ABCDE12345" <= User ID in Wekan.
                            » isAdminbodybooleanfalseis the owner an admin of the board (default true)
                            » isActivebodybooleanfalseis the board active (default true)
                            » isNoCommentsbodybooleanfalsedisable comments (default false)
                            » isCommentOnlybodybooleanfalseonly enable comments (default false)
                            » isWorkerbodybooleanfalseonly move cards, assign himself to card and comment (default false)
                            » permissionbodystringfalse"private" board <== Set to "public" if you
                            » colorbodystringfalsethe color of the board
                            +

                            Detailed descriptions

                            +

                            » owner: "ABCDE12345" <= User ID in Wekan. +(Not username or email)

                            +

                            » permission: "private" board <== Set to "public" if you +want public Wekan board

                            +
                            +

                            Example responses

                            +
                            +
                            +

                            200 Response

                            +
                            +
                            {
                            +  "_id": "string",
                            +  "defaultSwimlaneId": "string"
                            +}
                            +
                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responseInline
                            +

                            Response Schema

                            +

                            Status Code 200

                            + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            » _idstringfalsenonenone
                            » defaultSwimlaneIdstringfalsenonenone
                            + +

                            get_board

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X GET /api/boards/{board} \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            GET /api/boards/{board} HTTP/1.1
                            +
                            +Accept: application/json
                            +
                            +
                            +
                            
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.get '/api/boards/{board}',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.get('/api/boards/{board}', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/boards/{board}");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("GET");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            GET /api/boards/{board}

                            +

                            Get the board with that particular ID

                            +

                            Parameters

                            + + + + + + + + + + + + + + + + + + + +
                            NameInTypeRequiredDescription
                            boardpathstringtruethe ID of the board to retrieve the data
                            +

                            Detailed descriptions

                            +

                            board: the ID of the board to retrieve the data

                            +
                            +

                            Example responses

                            +
                            +
                            +

                            200 Response

                            +
                            +
                            {
                            +  "title": "string",
                            +  "slug": "string",
                            +  "archived": true,
                            +  "archivedAt": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "stars": 0,
                            +  "labels": [
                            +    {
                            +      "_id": "string",
                            +      "name": "string",
                            +      "color": "white"
                            +    }
                            +  ],
                            +  "members": [
                            +    {
                            +      "userId": "string",
                            +      "isAdmin": true,
                            +      "isActive": true,
                            +      "isNoComments": true,
                            +      "isCommentOnly": true,
                            +      "isWorker": true
                            +    }
                            +  ],
                            +  "permission": "public",
                            +  "orgs": [
                            +    {
                            +      "orgId": "string",
                            +      "orgDisplayName": "string",
                            +      "isActive": true
                            +    }
                            +  ],
                            +  "teams": [
                            +    {
                            +      "teamId": "string",
                            +      "teamDisplayName": "string",
                            +      "isActive": true
                            +    }
                            +  ],
                            +  "color": "belize",
                            +  "backgroundImageURL": "string",
                            +  "allowsCardCounterList": true,
                            +  "allowsBoardMemberList": true,
                            +  "description": "string",
                            +  "subtasksDefaultBoardId": "string",
                            +  "subtasksDefaultListId": "string",
                            +  "dateSettingsDefaultBoardId": "string",
                            +  "dateSettingsDefaultListId": "string",
                            +  "allowsSubtasks": true,
                            +  "allowsAttachments": true,
                            +  "allowsChecklists": true,
                            +  "allowsComments": true,
                            +  "allowsDescriptionTitle": true,
                            +  "allowsDescriptionText": true,
                            +  "allowsDescriptionTextOnMinicard": true,
                            +  "allowsCoverAttachmentOnMinicard": true,
                            +  "allowsBadgeAttachmentOnMinicard": true,
                            +  "allowsCardSortingByNumberOnMinicard": true,
                            +  "allowsCardNumber": true,
                            +  "allowsActivities": true,
                            +  "allowsLabels": true,
                            +  "allowsCreator": true,
                            +  "allowsAssignee": true,
                            +  "allowsMembers": true,
                            +  "allowsRequestedBy": true,
                            +  "allowsCardSortingByNumber": true,
                            +  "allowsShowLists": true,
                            +  "allowsAssignedBy": true,
                            +  "allowsReceivedDate": true,
                            +  "allowsStartDate": true,
                            +  "allowsEndDate": true,
                            +  "allowsDueDate": true,
                            +  "presentParentTask": "prefix-with-full-path",
                            +  "receivedAt": "string",
                            +  "startAt": "string",
                            +  "dueAt": "string",
                            +  "endAt": "string",
                            +  "spentTime": 0,
                            +  "isOvertime": true,
                            +  "type": "board",
                            +  "sort": 0
                            +}
                            +
                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responseBoards
                            + +

                            delete_board

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X DELETE /api/boards/{board} \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            DELETE /api/boards/{board} HTTP/1.1
                            +
                            +
                            +
                            
                            +const headers = {
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.delete '/api/boards/{board}',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.delete('/api/boards/{board}', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/boards/{board}");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("DELETE");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            DELETE /api/boards/{board}

                            +

                            Delete a board

                            +

                            Parameters

                            + + + + + + + + + + + + + + + + + + + +
                            NameInTypeRequiredDescription
                            boardpathstringtruethe ID of the board
                            +

                            Detailed descriptions

                            +

                            board: the ID of the board

                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responseNone
                            + +

                            get_board_attachments

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X GET /api/boards/{board}/attachments \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            GET /api/boards/{board}/attachments HTTP/1.1
                            +
                            +Accept: application/json
                            +
                            +
                            +
                            
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/attachments',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/attachments',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.get '/api/boards/{board}/attachments',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.get('/api/boards/{board}/attachments', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/boards/{board}/attachments");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("GET");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/attachments", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/attachments', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            GET /api/boards/{board}/attachments

                            +

                            Get the list of attachments of a board

                            +

                            Parameters

                            + + + + + + + + + + + + + + + + + + + +
                            NameInTypeRequiredDescription
                            boardpathstringtruethe board ID
                            +

                            Detailed descriptions

                            +

                            board: the board ID

                            +
                            +

                            Example responses

                            +
                            +
                            +

                            200 Response

                            +
                            +
                            [
                            +  {
                            +    "attachmentId": "string",
                            +    "attachmentName": "string",
                            +    "attachmentType": "string",
                            +    "url": "string",
                            +    "urlDownload": "string",
                            +    "boardId": "string",
                            +    "swimlaneId": "string",
                            +    "listId": "string",
                            +    "cardId": "string"
                            +  }
                            +]
                            +
                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responseInline
                            +

                            Response Schema

                            +

                            Status Code 200

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            » attachmentIdstringfalsenonenone
                            » attachmentNamestringfalsenonenone
                            » attachmentTypestringfalsenonenone
                            » urlstringfalsenonenone
                            » urlDownloadstringfalsenonenone
                            » boardIdstringfalsenonenone
                            » swimlaneIdstringfalsenonenone
                            » listIdstringfalsenonenone
                            » cardIdstringfalsenonenone
                            + +

                            exportJson

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X GET /api/boards/{board}/export \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            GET /api/boards/{board}/export HTTP/1.1
                            +
                            +
                            +
                            
                            +const headers = {
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/export',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/export',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.get '/api/boards/{board}/export',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.get('/api/boards/{board}/export', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/boards/{board}/export");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("GET");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/export", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/export', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/export

                            This route is used to export the board to a json file format.

                            @@ -2691,7 +4176,7 @@ for detailed explanations

                            -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the ID of the board we are exporting

                            Responses

                            @@ -2716,52 +4201,37 @@ for detailed explanations

                            To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity -

                            Checklists

                            -

                            get_all_checklists

                            -

                            +

                            add_board_label

                            +

                            Code samples

                            # You can also use wget
                            -curl -X GET /api/boards/{board}/cards/{card}/checklists \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +curl -X PUT /api/boards/{board}/labels \
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/cards/{card}/checklists HTTP/1.1
                            +
                            PUT /api/boards/{board}/labels HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/checklists',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Content-Type: multipart/form-data
                            +Accept: application/json
                             
                            +
                            +
                            const inputBody = '{
                            +  "label": "string"
                            +}';
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/checklists',
                            +fetch('/api/boards/{board}/labels',
                             {
                            -  method: 'GET',
                            -
                            +  method: 'PUT',
                            +  body: inputBody,
                               headers: headers
                             })
                             .then(function(res) {
                            @@ -2771,15 +4241,39 @@ fetch('/api/boards/{board}/cards/{card}/checklists'
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "label": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/labels',
                            +{
                            +  method: 'PUT',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/cards/{card}/checklists',
                            +result = RestClient.put '/api/boards/{board}/labels',
                               params: {
                               }, headers: headers
                             
                            @@ -2788,20 +4282,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/cards/{card}/checklists', params={
                            +r = requests.put('/api/boards/{board}/labels', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists");
                            +
                            URL obj = new URL("/api/boards/{board}/labels");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("PUT");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -2817,20 +4310,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/checklists", data)
                            +    req, err := http.NewRequest("PUT", "/api/boards/{board}/labels", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -2838,6 +4331,956 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('PUT','/api/boards/{board}/labels', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            PUT /api/boards/{board}/labels

                            +

                            Add a label to a board

                            +

                            If the board doesn't have the name/color label, this function +adds the label to the board.

                            +
                            +

                            Body parameter

                            +
                            +
                            label: string
                            +
                            +
                            +

                            Parameters

                            +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameInTypeRequiredDescription
                            boardpathstringtruethe board
                            bodybodyobjecttruenone
                            » labelbodystringtruethe label value
                            +

                            Detailed descriptions

                            +

                            board: the board

                            +
                            +

                            Example responses

                            +
                            +
                            +

                            200 Response

                            +
                            +
                            "string"
                            +
                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responsestring
                            + +

                            set_board_member_permission

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X POST /api/boards/{board}/members/{member} \
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            POST /api/boards/{board}/members/{member} HTTP/1.1
                            +
                            +Content-Type: multipart/form-data
                            +
                            +
                            +
                            const inputBody = '{
                            +  "isAdmin": true,
                            +  "isNoComments": true,
                            +  "isCommentOnly": true,
                            +  "isWorker": true
                            +}';
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/members/{member}',
                            +{
                            +  method: 'POST',
                            +  body: inputBody,
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "isAdmin": true,
                            +  "isNoComments": true,
                            +  "isCommentOnly": true,
                            +  "isWorker": true
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/members/{member}',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.post '/api/boards/{board}/members/{member}',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Content-Type': 'multipart/form-data',
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.post('/api/boards/{board}/members/{member}', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/boards/{board}/members/{member}");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("POST");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/members/{member}", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'multipart/form-data',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/members/{member}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            POST /api/boards/{board}/members/{member}

                            +

                            Change the permission of a member of a board

                            +
                            +

                            Body parameter

                            +
                            +
                            isAdmin: true
                            +isNoComments: true
                            +isCommentOnly: true
                            +isWorker: true
                            +
                            +
                            +

                            Parameters

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameInTypeRequiredDescription
                            boardpathstringtruethe ID of the board that we are changing
                            memberpathstringtruethe ID of the user to change permissions
                            bodybodyobjecttruenone
                            » isAdminbodybooleantrueadmin capability
                            » isNoCommentsbodybooleantrueNoComments capability
                            » isCommentOnlybodybooleantrueCommentsOnly capability
                            » isWorkerbodybooleantrueWorker capability
                            +

                            Detailed descriptions

                            +

                            board: the ID of the board that we are changing

                            +

                            member: the ID of the user to change permissions

                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responseNone
                            + +

                            get_boards_count

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X GET /api/boards_count \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            GET /api/boards_count HTTP/1.1
                            +
                            +Accept: application/json
                            +
                            +
                            +
                            
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards_count',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards_count',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.get '/api/boards_count',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.get('/api/boards_count', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/boards_count");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("GET");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("GET", "/api/boards_count", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards_count', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            GET /api/boards_count

                            +

                            Get public and private boards count

                            +
                            +

                            Example responses

                            +
                            +
                            +

                            200 Response

                            +
                            +
                            {
                            +  "private": 0,
                            +  "public": 0
                            +}
                            +
                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responseInline
                            +

                            Response Schema

                            +

                            Status Code 200

                            + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            » privateintegerfalsenonenone
                            » publicintegerfalsenonenone
                            + +

                            get_boards_from_user

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X GET /api/users/{user}/boards \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            GET /api/users/{user}/boards HTTP/1.1
                            +
                            +Accept: application/json
                            +
                            +
                            +
                            
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/users/{user}/boards',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/users/{user}/boards',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.get '/api/users/{user}/boards',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.get('/api/users/{user}/boards', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/users/{user}/boards");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("GET");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("GET", "/api/users/{user}/boards", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/users/{user}/boards', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                            +
                            +

                            GET /api/users/{user}/boards

                            +

                            Get all boards attached to a user

                            +

                            Parameters

                            + + + + + + + + + + + + + + + + + + + +
                            NameInTypeRequiredDescription
                            userpathstringtruethe ID of the user to retrieve the data
                            +

                            Detailed descriptions

                            +

                            user: the ID of the user to retrieve the data

                            +
                            +

                            Example responses

                            +
                            +
                            +

                            200 Response

                            +
                            +
                            [
                            +  {
                            +    "_id": "string",
                            +    "title": "string"
                            +  }
                            +]
                            +
                            +

                            Responses

                            + + + + + + + + + + + + + + + + + +
                            StatusMeaningDescriptionSchema
                            200OK200 responseInline
                            +

                            Response Schema

                            +

                            Status Code 200

                            + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            » _idstringfalsenonenone
                            » titlestringfalsenonenone
                            + +

                            Checklists

                            +

                            get_all_checklists

                            +

                            +
                            +

                            Code samples

                            +
                            +
                            # You can also use wget
                            +curl -X GET /api/boards/{board}/cards/{card}/checklists \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                            +
                            +
                            +
                            GET /api/boards/{board}/cards/{card}/checklists HTTP/1.1
                            +
                            +Accept: application/json
                            +
                            +
                            +
                            
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                            +
                            +headers = {
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                            +}
                            +
                            +result = RestClient.get '/api/boards/{board}/cards/{card}/checklists',
                            +  params: {
                            +  }, headers: headers
                            +
                            +p JSON.parse(result)
                            +
                            +
                            +
                            import requests
                            +headers = {
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                            +}
                            +
                            +r = requests.get('/api/boards/{board}/cards/{card}/checklists', headers = headers)
                            +
                            +print(r.json())
                            +
                            +
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists");
                            +HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            +con.setRequestMethod("GET");
                            +int responseCode = con.getResponseCode();
                            +BufferedReader in = new BufferedReader(
                            +    new InputStreamReader(con.getInputStream()));
                            +String inputLine;
                            +StringBuffer response = new StringBuffer();
                            +while ((inputLine = in.readLine()) != null) {
                            +    response.append(inputLine);
                            +}
                            +in.close();
                            +System.out.println(response.toString());
                            +
                            +
                            +
                            package main
                            +
                            +import (
                            +       "bytes"
                            +       "net/http"
                            +)
                            +
                            +func main() {
                            +
                            +    headers := map[string][]string{
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                            +    }
                            +
                            +    data := bytes.NewBuffer([]byte{jsonReq})
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/checklists", data)
                            +    req.Header = headers
                            +
                            +    client := &http.Client{}
                            +    resp, err := client.Do(req)
                            +    // ...
                            +}
                            +
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/cards/{card}/checklists', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/cards/{card}/checklists

                            Get the list of checklists attached to a card

                            @@ -2869,7 +5312,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            card: the card ID

                            @@ -2880,8 +5323,8 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "title": "string"
                            +    "_id": "string",
                            +    "title": "string"
                               }
                             ]
                             
                            @@ -2944,50 +5387,30 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/cards/{card}/checklists \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/cards/{card}/checklists HTTP/1.1
                            +
                            POST /api/boards/{board}/cards/{card}/checklists HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/checklists',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "title": "string",
                            -  "items": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "title": "string",
                            +  "items": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/checklists',
                            +fetch('/api/boards/{board}/cards/{card}/checklists',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -2998,16 +5421,40 @@ fetch('/api/boards/{board}/cards/{card}/checklists'
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "title": "string",
                            +  "items": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/cards/{card}/checklists',
                            +result = RestClient.post '/api/boards/{board}/cards/{card}/checklists',
                               params: {
                               }, headers: headers
                             
                            @@ -3016,21 +5463,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/cards/{card}/checklists', params={
                            +r = requests.post('/api/boards/{board}/cards/{card}/checklists', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -3046,21 +5491,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/cards/{card}/checklists", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/cards/{card}/checklists", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -3068,6 +5512,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/cards/{card}/checklists', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/cards/{card}/checklists

                            create a new checklist

                            @@ -3108,7 +5578,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -3127,7 +5597,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            card: the card ID

                            @@ -3137,7 +5607,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -3192,43 +5662,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/cards/{card}/checklists/{checklist} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/cards/{card}/checklists/{checklist} HTTP/1.1
                            +
                            GET /api/boards/{board}/cards/{card}/checklists/{checklist} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/checklists/{checklist}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}',
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -3239,15 +5690,35 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/cards/{card}/checklists/{checklist}',
                            +result = RestClient.get '/api/boards/{board}/cards/{card}/checklists/{checklist}',
                               params: {
                               }, headers: headers
                             
                            @@ -3256,20 +5727,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/cards/{card}/checklists/{checklist}', params={
                            +r = requests.get('/api/boards/{board}/cards/{card}/checklists/{checklist}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -3285,20 +5754,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/checklists/{checklist}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/checklists/{checklist}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -3306,6 +5774,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/cards/{card}/checklists/{checklist}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/cards/{card}/checklists/{checklist}

                            Get a checklist

                            @@ -3344,7 +5837,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            card: the card ID

                            checklist: the ID of the checklist

                            @@ -3355,16 +5848,16 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "cardId": "string",
                            -  "title": "string",
                            -  "finishedAt": "string",
                            -  "createdAt": "string",
                            -  "sort": 0,
                            -  "items": [
                            +  "cardId": "string",
                            +  "title": "string",
                            +  "finishedAt": "string",
                            +  "createdAt": "string",
                            +  "sort": 0,
                            +  "items": [
                                 {
                            -      "_id": "string",
                            -      "title": "string",
                            -      "isFinished": true
                            +      "_id": "string",
                            +      "title": "string",
                            +      "isFinished": true
                                 }
                               ]
                             }
                            @@ -3477,43 +5970,24 @@ UserSecurity
                             
                             
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/cards/{card}/checklists/{checklist} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/cards/{card}/checklists/{checklist} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/cards/{card}/checklists/{checklist} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/checklists/{checklist}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}',
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -3524,15 +5998,35 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/cards/{card}/checklists/{checklist}',
                            +result = RestClient.delete '/api/boards/{board}/cards/{card}/checklists/{checklist}',
                               params: {
                               }, headers: headers
                             
                            @@ -3541,20 +6035,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/cards/{card}/checklists/{checklist}', params={
                            +r = requests.delete('/api/boards/{board}/cards/{card}/checklists/{checklist}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -3570,20 +6062,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/cards/{card}/checklists/{checklist}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/cards/{card}/checklists/{checklist}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -3591,6 +6082,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/cards/{card}/checklists/{checklist}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}

                            Delete a checklist

                            @@ -3630,7 +6146,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            card: the card ID

                            checklist: the ID of the checklist to remove

                            @@ -3641,7 +6157,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -3697,49 +6213,29 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/cards/{card}/checklists/{checklist}/items \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/cards/{card}/checklists/{checklist}/items HTTP/1.1
                            +
                            POST /api/boards/{board}/cards/{card}/checklists/{checklist}/items HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/checklists/{checklist}/items',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "title": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "title": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items',
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -3750,16 +6246,39 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "title": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/cards/{card}/checklists/{checklist}/items',
                            +result = RestClient.post '/api/boards/{board}/cards/{card}/checklists/{checklist}/items',
                               params: {
                               }, headers: headers
                             
                            @@ -3768,21 +6287,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/cards/{card}/checklists/{checklist}/items', params={
                            +r = requests.post('/api/boards/{board}/cards/{card}/checklists/{checklist}/items', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}/items");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}/items");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -3798,21 +6315,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/cards/{card}/checklists/{checklist}/items", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/cards/{card}/checklists/{checklist}/items", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -3820,6 +6336,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/cards/{card}/checklists/{checklist}/items', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/cards/{card}/checklists/{checklist}/items

                            add a new item to a checklist

                            @@ -3866,7 +6408,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -3878,7 +6420,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            card: the card ID

                            checklist: the ID of the checklist

                            @@ -3889,7 +6431,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -3944,43 +6486,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                            +
                            GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -3991,15 +6514,35 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +result = RestClient.get '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                               params: {
                               }, headers: headers
                             
                            @@ -4008,20 +6551,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', params={
                            +r = requests.get('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -4037,20 +6578,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -4058,6 +6598,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}

                            Get a checklist item

                            @@ -4103,7 +6668,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            card: the card ID

                            checklist: the checklist ID

                            @@ -4115,13 +6680,13 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "title": "string",
                            -  "sort": 0,
                            -  "isFinished": true,
                            -  "checklistId": "string",
                            -  "cardId": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string"
                            +  "title": "string",
                            +  "sort": 0,
                            +  "isFinished": true,
                            +  "checklistId": "string",
                            +  "cardId": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string"
                             }
                             

                            Responses

                            @@ -4154,50 +6719,30 @@ UserSecurity
                            # You can also use wget
                             curl -X PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                            +
                            PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            -  method: 'put',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "isFinished": "string",
                            -  "title": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "isFinished": "string",
                            +  "title": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                             {
                            -  method: 'PUT',
                            +  method: 'PUT',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -4208,16 +6753,40 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "isFinished": "string",
                            +  "title": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +{
                            +  method: 'PUT',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.put '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +result = RestClient.put '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                               params: {
                               }, headers: headers
                             
                            @@ -4226,21 +6795,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.put('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', params={
                            +r = requests.put('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("PUT");
                            +con.setRequestMethod("PUT");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -4256,21 +6823,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("PUT", "/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}", data)
                            +    req, err := http.NewRequest("PUT", "/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -4278,6 +6844,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('PUT','/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            PUT /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}

                            Edit a checklist item

                            @@ -4351,7 +6943,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            card: the card ID

                            checklist: the checklist ID

                            @@ -4363,7 +6955,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -4418,43 +7010,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -4465,15 +7038,35 @@ fetch('/api/boards/{board}/cards/{card}/checklists/{ch
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                            +result = RestClient.delete '/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}',
                               params: {
                               }, headers: headers
                             
                            @@ -4482,20 +7075,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', params={
                            +r = requests.delete('/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -4511,20 +7102,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -4532,6 +7122,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/cards/{card}/checklists/{checklist}/items/{item}

                            Delete a checklist item

                            @@ -4578,7 +7193,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            card: the card ID

                            checklist: the checklist ID

                            @@ -4590,7 +7205,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -4646,43 +7261,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/cards/{card}/comments \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/cards/{card}/comments HTTP/1.1
                            +
                            GET /api/boards/{board}/cards/{card}/comments HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/comments',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/comments',
                            +fetch('/api/boards/{board}/cards/{card}/comments',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -4693,15 +7289,35 @@ fetch('/api/boards/{board}/cards/{card}/comments'
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/comments',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/cards/{card}/comments',
                            +result = RestClient.get '/api/boards/{board}/cards/{card}/comments',
                               params: {
                               }, headers: headers
                             
                            @@ -4710,20 +7326,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/cards/{card}/comments', params={
                            +r = requests.get('/api/boards/{board}/cards/{card}/comments', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/comments");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/comments");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -4739,20 +7353,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/comments", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/comments", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -4760,6 +7373,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/cards/{card}/comments', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/cards/{card}/comments

                            Get all comments attached to a card

                            @@ -4791,7 +7429,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID of the card

                            card: the ID of the card

                            @@ -4802,9 +7440,9 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "comment": "string",
                            -    "authorId": "string"
                            +    "_id": "string",
                            +    "comment": "string",
                            +    "authorId": "string"
                               }
                             ]
                             
                            @@ -4874,50 +7512,30 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/cards/{card}/comments \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/cards/{card}/comments HTTP/1.1
                            +
                            POST /api/boards/{board}/cards/{card}/comments HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/comments',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "authorId": "string",
                            -  "comment": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "authorId": "string",
                            +  "comment": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/comments',
                            +fetch('/api/boards/{board}/cards/{card}/comments',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -4928,16 +7546,40 @@ fetch('/api/boards/{board}/cards/{card}/comments'
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "authorId": "string",
                            +  "comment": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/comments',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/cards/{card}/comments',
                            +result = RestClient.post '/api/boards/{board}/cards/{card}/comments',
                               params: {
                               }, headers: headers
                             
                            @@ -4946,21 +7588,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/cards/{card}/comments', params={
                            +r = requests.post('/api/boards/{board}/cards/{card}/comments', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/comments");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/comments");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -4976,21 +7616,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/cards/{card}/comments", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/cards/{card}/comments", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -4998,6 +7637,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/cards/{card}/comments', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/cards/{card}/comments

                            Add a comment on a card

                            @@ -5038,7 +7703,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -5057,7 +7722,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID of the card

                            card: the ID of the card

                            @@ -5067,7 +7732,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -5122,43 +7787,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/cards/{card}/comments/{comment} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/cards/{card}/comments/{comment} HTTP/1.1
                            +
                            GET /api/boards/{board}/cards/{card}/comments/{comment} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/comments/{comment}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/comments/{comment}',
                            +fetch('/api/boards/{board}/cards/{card}/comments/{comment}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -5169,15 +7815,35 @@ fetch('/api/boards/{board}/cards/{card}/comments/{comm
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/comments/{comment}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/cards/{card}/comments/{comment}',
                            +result = RestClient.get '/api/boards/{board}/cards/{card}/comments/{comment}',
                               params: {
                               }, headers: headers
                             
                            @@ -5186,20 +7852,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/cards/{card}/comments/{comment}', params={
                            +r = requests.get('/api/boards/{board}/cards/{card}/comments/{comment}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/comments/{comment}");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/comments/{comment}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -5215,20 +7879,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/comments/{comment}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/cards/{card}/comments/{comment}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -5236,6 +7899,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/cards/{card}/comments/{comment}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/cards/{card}/comments/{comment}

                            Get a comment on a card

                            @@ -5274,7 +7962,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID of the card

                            card: the ID of the card

                            comment: the ID of the comment to retrieve

                            @@ -5285,12 +7973,12 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "boardId": "string",
                            -  "cardId": "string",
                            -  "text": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "userId": "string"
                            +  "boardId": "string",
                            +  "cardId": "string",
                            +  "text": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "userId": "string"
                             }
                             

                            Responses

                            @@ -5323,43 +8011,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/cards/{card}/comments/{comment} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/cards/{card}/comments/{comment} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/cards/{card}/comments/{comment} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards/{card}/comments/{comment}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards/{card}/comments/{comment}',
                            +fetch('/api/boards/{board}/cards/{card}/comments/{comment}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -5370,15 +8039,35 @@ fetch('/api/boards/{board}/cards/{card}/comments/{comm
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards/{card}/comments/{comment}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/cards/{card}/comments/{comment}',
                            +result = RestClient.delete '/api/boards/{board}/cards/{card}/comments/{comment}',
                               params: {
                               }, headers: headers
                             
                            @@ -5387,20 +8076,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/cards/{card}/comments/{comment}', params={
                            +r = requests.delete('/api/boards/{board}/cards/{card}/comments/{comment}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards/{card}/comments/{comment}");
                            +
                            URL obj = new URL("/api/boards/{board}/cards/{card}/comments/{comment}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -5416,20 +8103,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/cards/{card}/comments/{comment}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/cards/{card}/comments/{comment}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -5437,6 +8123,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/cards/{card}/comments/{comment}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/cards/{card}/comments/{comment}

                            Delete a comment on a card

                            @@ -5475,7 +8186,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID of the card

                            card: the ID of the card

                            comment: the ID of the comment to delete

                            @@ -5486,7 +8197,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -5542,43 +8253,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue} HTTP/1.1
                            +
                            GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}',
                            +fetch('/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -5589,15 +8281,35 @@ fetch('/api/boards/{board}/cardsByCustomField/{customF
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}',
                            +result = RestClient.get '/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}',
                               params: {
                               }, headers: headers
                             
                            @@ -5606,20 +8318,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}', params={
                            +r = requests.get('/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}");
                            +
                            URL obj = new URL("/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -5635,20 +8345,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -5656,6 +8365,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/cardsByCustomField/{customField}/{customFieldValue}

                            Get all Cards that matchs a value of a specific custom field

                            @@ -5694,7 +8428,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            customField: the list ID

                            customFieldValue: the value to look for

                            @@ -5706,11 +8440,11 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "title": "string",
                            -    "description": "string",
                            -    "listId": "string",
                            -    "swinlaneId": "string"
                            +    "_id": "string",
                            +    "title": "string",
                            +    "description": "string",
                            +    "listId": "string",
                            +    "swinlaneId": "string"
                               }
                             ]
                             
                            @@ -5794,43 +8528,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/cards_count \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/cards_count HTTP/1.1
                            +
                            GET /api/boards/{board}/cards_count HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/cards_count',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/cards_count',
                            +fetch('/api/boards/{board}/cards_count',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -5841,15 +8556,35 @@ fetch('/api/boards/{board}/cards_count',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/cards_count',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/cards_count',
                            +result = RestClient.get '/api/boards/{board}/cards_count',
                               params: {
                               }, headers: headers
                             
                            @@ -5858,20 +8593,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/cards_count', params={
                            +r = requests.get('/api/boards/{board}/cards_count', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/cards_count");
                            +
                            URL obj = new URL("/api/boards/{board}/cards_count");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -5887,20 +8620,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/cards_count", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/cards_count", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -5908,6 +8640,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/cards_count', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/cards_count

                            Get a cards count to a board

                            @@ -5932,7 +8689,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            Example responses

                            @@ -5941,7 +8698,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "board_cards_count": 0
                            +  "board_cards_count": 0
                             }
                             

                            Responses

                            @@ -5996,43 +8753,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/lists/{list}/cards \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/lists/{list}/cards HTTP/1.1
                            +
                            GET /api/boards/{board}/lists/{list}/cards HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}/cards',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}/cards',
                            +fetch('/api/boards/{board}/lists/{list}/cards',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -6043,15 +8781,35 @@ fetch('/api/boards/{board}/lists/{list}/cards',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}/cards',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/lists/{list}/cards',
                            +result = RestClient.get '/api/boards/{board}/lists/{list}/cards',
                               params: {
                               }, headers: headers
                             
                            @@ -6060,20 +8818,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/lists/{list}/cards', params={
                            +r = requests.get('/api/boards/{board}/lists/{list}/cards', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -6089,20 +8845,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/lists/{list}/cards", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/lists/{list}/cards", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -6110,6 +8865,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/lists/{list}/cards', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/lists/{list}/cards

                            Get all Cards attached to a List

                            @@ -6141,7 +8921,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            list: the list ID

                            @@ -6152,9 +8932,9 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "title": "string",
                            -    "description": "string"
                            +    "_id": "string",
                            +    "title": "string",
                            +    "description": "string"
                               }
                             ]
                             
                            @@ -6224,54 +9004,34 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/lists/{list}/cards \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/lists/{list}/cards HTTP/1.1
                            +
                            POST /api/boards/{board}/lists/{list}/cards HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}/cards',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "authorId": "string",
                            -  "members": "string",
                            -  "assignees": "string",
                            -  "title": "string",
                            -  "description": "string",
                            -  "swimlaneId": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "authorId": "string",
                            +  "members": "string",
                            +  "assignees": "string",
                            +  "title": "string",
                            +  "description": "string",
                            +  "swimlaneId": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}/cards',
                            +fetch('/api/boards/{board}/lists/{list}/cards',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -6282,16 +9042,44 @@ fetch('/api/boards/{board}/lists/{list}/cards',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "authorId": "string",
                            +  "members": "string",
                            +  "assignees": "string",
                            +  "title": "string",
                            +  "description": "string",
                            +  "swimlaneId": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}/cards',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/lists/{list}/cards',
                            +result = RestClient.post '/api/boards/{board}/lists/{list}/cards',
                               params: {
                               }, headers: headers
                             
                            @@ -6300,21 +9088,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/lists/{list}/cards', params={
                            +r = requests.post('/api/boards/{board}/lists/{list}/cards', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -6330,21 +9116,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/lists/{list}/cards", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/lists/{list}/cards", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -6352,6 +9137,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/lists/{list}/cards', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/lists/{list}/cards

                            Create a new Card

                            @@ -6396,7 +9207,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -6443,7 +9254,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID of the new card

                            list: the list ID of the new card

                            @@ -6453,7 +9264,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -6508,43 +9319,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/lists/{list}/cards/{card} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                            +
                            GET /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}/cards/{card}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                            +fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -6555,15 +9347,35 @@ fetch('/api/boards/{board}/lists/{list}/cards/{card}'<
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/lists/{list}/cards/{card}',
                            +result = RestClient.get '/api/boards/{board}/lists/{list}/cards/{card}',
                               params: {
                               }, headers: headers
                             
                            @@ -6572,20 +9384,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/lists/{list}/cards/{card}', params={
                            +r = requests.get('/api/boards/{board}/lists/{list}/cards/{card}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards/{card}");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards/{card}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -6601,20 +9411,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/lists/{list}/cards/{card}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/lists/{list}/cards/{card}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -6622,6 +9431,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/lists/{list}/cards/{card}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/lists/{list}/cards/{card}

                            Get a Card

                            @@ -6660,7 +9494,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            list: the list ID of the card

                            card: the card ID

                            @@ -6671,104 +9505,102 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "title": "string",
                            -  "archived": true,
                            -  "archivedAt": "string",
                            -  "parentId": "string",
                            -  "listId": "string",
                            -  "swimlaneId": "string",
                            -  "boardId": "string",
                            -  "coverId": "string",
                            -  "color": "white",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "customFields": [
                            +  "title": "string",
                            +  "archived": true,
                            +  "archivedAt": "string",
                            +  "parentId": "string",
                            +  "listId": "string",
                            +  "swimlaneId": "string",
                            +  "boardId": "string",
                            +  "coverId": "string",
                            +  "color": "white",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "customFields": [
                                 {}
                               ],
                            -  "dateLastActivity": "string",
                            -  "description": "string",
                            -  "requestedBy": "string",
                            -  "assignedBy": "string",
                            -  "labelIds": [
                            -    "string"
                            +  "dateLastActivity": "string",
                            +  "description": "string",
                            +  "requestedBy": "string",
                            +  "assignedBy": "string",
                            +  "labelIds": [
                            +    "string"
                               ],
                            -  "members": [
                            -    "string"
                            +  "members": [
                            +    "string"
                               ],
                            -  "assignees": [
                            -    "string"
                            +  "assignees": [
                            +    "string"
                               ],
                            -  "receivedAt": "string",
                            -  "startAt": "string",
                            -  "dueAt": "string",
                            -  "endAt": "string",
                            -  "spentTime": 0,
                            -  "isOvertime": true,
                            -  "userId": "string",
                            -  "sort": 0,
                            -  "subtaskSort": 0,
                            -  "type": "string",
                            -  "linkedId": "string",
                            -  "vote": {
                            -    "question": "string",
                            -    "positive": [
                            -      "string"
                            +  "receivedAt": "string",
                            +  "startAt": "string",
                            +  "dueAt": "string",
                            +  "endAt": "string",
                            +  "spentTime": 0,
                            +  "isOvertime": true,
                            +  "userId": "string",
                            +  "sort": 0,
                            +  "subtaskSort": 0,
                            +  "type": "string",
                            +  "linkedId": "string",
                            +  "vote": {
                            +    "question": "string",
                            +    "positive": [
                            +      "string"
                                 ],
                            -    "negative": [
                            -      "string"
                            +    "negative": [
                            +      "string"
                                 ],
                            -    "end": "string",
                            -    "public": true,
                            -    "allowNonBoardMembers": true
                            +    "end": "string",
                            +    "public": true,
                            +    "allowNonBoardMembers": true
                               },
                            -  "poker": {
                            -    "question": true,
                            -    "one": [
                            -      "string"
                            +  "poker": {
                            +    "question": true,
                            +    "one": [
                            +      "string"
                                 ],
                            -    "two": [
                            -      "string"
                            +    "two": [
                            +      "string"
                                 ],
                            -    "three": [
                            -      "string"
                            +    "three": [
                            +      "string"
                                 ],
                            -    "five": [
                            -      "string"
                            +    "five": [
                            +      "string"
                                 ],
                            -    "eight": [
                            -      "string"
                            +    "eight": [
                            +      "string"
                                 ],
                            -    "thirteen": [
                            -      "string"
                            +    "thirteen": [
                            +      "string"
                                 ],
                            -    "twenty": [
                            -      "string"
                            +    "twenty": [
                            +      "string"
                                 ],
                            -    "forty": [
                            -      "string"
                            +    "forty": [
                            +      "string"
                                 ],
                            -    "oneHundred": [
                            -      "string"
                            +    "oneHundred": [
                            +      "string"
                                 ],
                            -    "unsure": [
                            -      "string"
                            +    "unsure": [
                            +      "string"
                                 ],
                            -    "end": "string",
                            -    "allowNonBoardMembers": true,
                            -    "estimation": 0
                            +    "end": "string",
                            +    "allowNonBoardMembers": true,
                            +    "estimation": 0
                               },
                            -  "targetId_gantt": [
                            -    "string"
                            +  "targetId_gantt": [
                            +    "string"
                               ],
                            -  "linkType_gantt": [
                            +  "linkType_gantt": [
                                 0
                               ],
                            -  "linkId_gantt": [
                            -    "string"
                            +  "linkId_gantt": [
                            +    "string"
                               ],
                            -  "cardNumber": 0,
                            -  "showActivities": true,
                            -  "hideFinishedChecklistIfItemsAreHidden": true
                            +  "cardNumber": 0
                             }
                             

                            Responses

                            @@ -6801,74 +9633,53 @@ UserSecurity
                            # You can also use wget
                             curl -X PUT /api/boards/{board}/lists/{list}/cards/{card} \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            PUT /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                            +
                            PUT /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}/cards/{card}',
                            -  method: 'put',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "newBoardId": "string",
                            -  "newSwimlaneId": "string",
                            -  "newListId": "string",
                            -  "title": "string",
                            -  "sort": "string",
                            -  "parentId": "string",
                            -  "description": "string",
                            -  "color": "string",
                            -  "vote": {},
                            -  "poker": {},
                            -  "labelIds": "string",
                            -  "requestedBy": "string",
                            -  "assignedBy": "string",
                            -  "receivedAt": "string",
                            -  "startAt": "string",
                            -  "dueAt": "string",
                            -  "endAt": "string",
                            -  "spentTime": "string",
                            -  "isOverTime": true,
                            -  "customFields": "string",
                            -  "members": "string",
                            -  "assignees": "string",
                            -  "swimlaneId": "string",
                            -  "listId": "string",
                            -  "authorId": "string",
                            -  "archive": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "newBoardId": "string",
                            +  "newSwimlaneId": "string",
                            +  "newListId": "string",
                            +  "title": "string",
                            +  "sort": "string",
                            +  "parentId": "string",
                            +  "description": "string",
                            +  "color": "string",
                            +  "vote": {},
                            +  "poker": {},
                            +  "labelIds": "string",
                            +  "requestedBy": "string",
                            +  "assignedBy": "string",
                            +  "receivedAt": "string",
                            +  "startAt": "string",
                            +  "dueAt": "string",
                            +  "endAt": "string",
                            +  "spentTime": "string",
                            +  "isOverTime": true,
                            +  "customFields": "string",
                            +  "members": "string",
                            +  "assignees": "string",
                            +  "swimlaneId": "string",
                            +  "listId": "string",
                            +  "authorId": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                            +fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                             {
                            -  method: 'PUT',
                            +  method: 'PUT',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -6879,16 +9690,63 @@ fetch('/api/boards/{board}/lists/{list}/cards/{card}'<
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "newBoardId": "string",
                            +  "newSwimlaneId": "string",
                            +  "newListId": "string",
                            +  "title": "string",
                            +  "sort": "string",
                            +  "parentId": "string",
                            +  "description": "string",
                            +  "color": "string",
                            +  "vote": {},
                            +  "poker": {},
                            +  "labelIds": "string",
                            +  "requestedBy": "string",
                            +  "assignedBy": "string",
                            +  "receivedAt": "string",
                            +  "startAt": "string",
                            +  "dueAt": "string",
                            +  "endAt": "string",
                            +  "spentTime": "string",
                            +  "isOverTime": true,
                            +  "customFields": "string",
                            +  "members": "string",
                            +  "assignees": "string",
                            +  "swimlaneId": "string",
                            +  "listId": "string",
                            +  "authorId": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                            +{
                            +  method: 'PUT',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.put '/api/boards/{board}/lists/{list}/cards/{card}',
                            +result = RestClient.put '/api/boards/{board}/lists/{list}/cards/{card}',
                               params: {
                               }, headers: headers
                             
                            @@ -6897,21 +9755,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.put('/api/boards/{board}/lists/{list}/cards/{card}', params={
                            +r = requests.put('/api/boards/{board}/lists/{list}/cards/{card}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards/{card}");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards/{card}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("PUT");
                            +con.setRequestMethod("PUT");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -6927,21 +9783,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("PUT", "/api/boards/{board}/lists/{list}/cards/{card}", data)
                            +    req, err := http.NewRequest("PUT", "/api/boards/{board}/lists/{list}/cards/{card}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -6949,6 +9804,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('PUT','/api/boards/{board}/lists/{list}/cards/{card}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            PUT /api/boards/{board}/lists/{list}/cards/{card}

                            Edit Fields in a Card

                            @@ -6971,8 +9852,8 @@ System.out.println(response.toString()); parentId: string description: string color: string -vote: {} -poker: {} +vote: {} +poker: {} labelIds: string requestedBy: string assignedBy: string @@ -6988,7 +9869,6 @@ System.out.println(response.toString()); swimlaneId: string listId: string authorId: string -archive: string

                            Parameters

                            @@ -7028,7 +9908,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -7206,16 +10086,9 @@ System.out.println(response.toString()); false change the owner of the card - -» archive -body -string -true -the archive value - -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID of the card

                            list: the list ID of the card

                            card: the ID of the card

                            @@ -7226,7 +10099,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -7281,43 +10154,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/lists/{list}/cards/{card} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/lists/{list}/cards/{card} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}/cards/{card}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                            +fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -7328,15 +10182,35 @@ fetch('/api/boards/{board}/lists/{list}/cards/{card}'<
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}/cards/{card}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/lists/{list}/cards/{card}',
                            +result = RestClient.delete '/api/boards/{board}/lists/{list}/cards/{card}',
                               params: {
                               }, headers: headers
                             
                            @@ -7345,20 +10219,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/lists/{list}/cards/{card}', params={
                            +r = requests.delete('/api/boards/{board}/lists/{list}/cards/{card}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards/{card}");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards/{card}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -7374,20 +10246,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/lists/{list}/cards/{card}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/lists/{list}/cards/{card}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -7395,6 +10266,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/lists/{list}/cards/{card}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/lists/{list}/cards/{card}

                            Delete a card from a board

                            @@ -7435,7 +10331,7 @@ is not put in the recycle bin.

                            -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID of the card

                            list: the list ID of the card

                            card: the ID of the card

                            @@ -7446,7 +10342,7 @@ is not put in the recycle bin.

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -7501,49 +10397,29 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField} \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField} HTTP/1.1
                            +
                            POST /api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField} HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "value": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "value": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}',
                            +fetch('/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -7554,16 +10430,39 @@ fetch('/api/boards/{board}/lists/{list}/cards/{card}/c
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "value": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}',
                            +result = RestClient.post '/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}',
                               params: {
                               }, headers: headers
                             
                            @@ -7572,21 +10471,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}', params={
                            +r = requests.post('/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -7602,21 +10499,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -7624,6 +10520,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/lists/{list}/cards/{card}/customFields/{customField}

                            Edit Custom Field in a Card

                            @@ -7678,7 +10600,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -7690,7 +10612,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID of the card

                            list: the list ID of the card

                            card: the ID of the card

                            @@ -7702,8 +10624,8 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string",
                            -  "customFields": {}
                            +  "_id": "string",
                            +  "customFields": {}
                             }
                             

                            Responses

                            @@ -7765,43 +10687,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/lists/{list}/cards_count \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/lists/{list}/cards_count HTTP/1.1
                            +
                            GET /api/boards/{board}/lists/{list}/cards_count HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}/cards_count',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}/cards_count',
                            +fetch('/api/boards/{board}/lists/{list}/cards_count',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -7812,15 +10715,35 @@ fetch('/api/boards/{board}/lists/{list}/cards_count'
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}/cards_count',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/lists/{list}/cards_count',
                            +result = RestClient.get '/api/boards/{board}/lists/{list}/cards_count',
                               params: {
                               }, headers: headers
                             
                            @@ -7829,20 +10752,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/lists/{list}/cards_count', params={
                            +r = requests.get('/api/boards/{board}/lists/{list}/cards_count', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards_count");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}/cards_count");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -7858,20 +10779,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/lists/{list}/cards_count", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/lists/{list}/cards_count", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -7879,6 +10799,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/lists/{list}/cards_count', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/lists/{list}/cards_count

                            Get a cards count to a list

                            @@ -7910,7 +10855,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            list: the List ID

                            @@ -7920,7 +10865,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "list_cards_count": 0
                            +  "list_cards_count": 0
                             }
                             

                            Responses

                            @@ -7975,43 +10920,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/swimlanes/{swimlane}/cards \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/swimlanes/{swimlane}/cards HTTP/1.1
                            +
                            GET /api/boards/{board}/swimlanes/{swimlane}/cards HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/swimlanes/{swimlane}/cards',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/swimlanes/{swimlane}/cards',
                            +fetch('/api/boards/{board}/swimlanes/{swimlane}/cards',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -8022,15 +10948,35 @@ fetch('/api/boards/{board}/swimlanes/{swimlane}/cards'
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/swimlanes/{swimlane}/cards',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/swimlanes/{swimlane}/cards',
                            +result = RestClient.get '/api/boards/{board}/swimlanes/{swimlane}/cards',
                               params: {
                               }, headers: headers
                             
                            @@ -8039,20 +10985,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/swimlanes/{swimlane}/cards', params={
                            +r = requests.get('/api/boards/{board}/swimlanes/{swimlane}/cards', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/swimlanes/{swimlane}/cards");
                            +
                            URL obj = new URL("/api/boards/{board}/swimlanes/{swimlane}/cards");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -8068,20 +11012,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/swimlanes/{swimlane}/cards", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/swimlanes/{swimlane}/cards", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -8089,6 +11032,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/swimlanes/{swimlane}/cards', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/swimlanes/{swimlane}/cards

                            get all cards attached to a swimlane

                            @@ -8120,7 +11088,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            swimlane: the swimlane ID

                            @@ -8131,10 +11099,10 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "title": "string",
                            -    "description": "string",
                            -    "listId": "string"
                            +    "_id": "string",
                            +    "title": "string",
                            +    "description": "string",
                            +    "listId": "string"
                               }
                             ]
                             
                            @@ -8212,43 +11180,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/custom-fields \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/custom-fields HTTP/1.1
                            +
                            GET /api/boards/{board}/custom-fields HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/custom-fields',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/custom-fields',
                            +fetch('/api/boards/{board}/custom-fields',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -8259,15 +11208,35 @@ fetch('/api/boards/{board}/custom-fields',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/custom-fields',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/custom-fields',
                            +result = RestClient.get '/api/boards/{board}/custom-fields',
                               params: {
                               }, headers: headers
                             
                            @@ -8276,20 +11245,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/custom-fields', params={
                            +r = requests.get('/api/boards/{board}/custom-fields', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/custom-fields");
                            +
                            URL obj = new URL("/api/boards/{board}/custom-fields");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -8305,20 +11272,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/custom-fields", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/custom-fields", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -8326,6 +11292,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/custom-fields', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/custom-fields

                            Get the list of Custom Fields attached to a board

                            @@ -8358,9 +11349,9 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "name": "string",
                            -    "type": "string"
                            +    "_id": "string",
                            +    "name": "string",
                            +    "type": "string"
                               }
                             ]
                             
                            @@ -8430,56 +11421,36 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/custom-fields \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/custom-fields HTTP/1.1
                            +
                            POST /api/boards/{board}/custom-fields HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/custom-fields',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "name": "string",
                            -  "type": "string",
                            -  "settings": "string",
                            -  "showOnCard": true,
                            -  "automaticallyOnCard": true,
                            -  "showLabelOnMiniCard": true,
                            -  "showSumAtTopOfList": true,
                            -  "authorId": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "name": "string",
                            +  "type": "string",
                            +  "settings": "string",
                            +  "showOnCard": true,
                            +  "automaticallyOnCard": true,
                            +  "showLabelOnMiniCard": true,
                            +  "showSumAtTopOfList": true,
                            +  "authorId": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/custom-fields',
                            +fetch('/api/boards/{board}/custom-fields',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -8490,16 +11461,46 @@ fetch('/api/boards/{board}/custom-fields',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "name": "string",
                            +  "type": "string",
                            +  "settings": "string",
                            +  "showOnCard": true,
                            +  "automaticallyOnCard": true,
                            +  "showLabelOnMiniCard": true,
                            +  "showSumAtTopOfList": true,
                            +  "authorId": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/custom-fields',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/custom-fields',
                            +result = RestClient.post '/api/boards/{board}/custom-fields',
                               params: {
                               }, headers: headers
                             
                            @@ -8508,21 +11509,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/custom-fields', params={
                            +r = requests.post('/api/boards/{board}/custom-fields', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/custom-fields");
                            +
                            URL obj = new URL("/api/boards/{board}/custom-fields");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -8538,21 +11537,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/custom-fields", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/custom-fields", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -8560,6 +11558,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/custom-fields', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/custom-fields

                            Create a Custom Field

                            @@ -8599,7 +11623,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -8667,7 +11691,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -8722,43 +11746,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/custom-fields/{customField} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/custom-fields/{customField} HTTP/1.1
                            +
                            GET /api/boards/{board}/custom-fields/{customField} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/custom-fields/{customField}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/custom-fields/{customField}',
                            +fetch('/api/boards/{board}/custom-fields/{customField}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -8769,15 +11774,35 @@ fetch('/api/boards/{board}/custom-fields/{customField}
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/custom-fields/{customField}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/custom-fields/{customField}',
                            +result = RestClient.get '/api/boards/{board}/custom-fields/{customField}',
                               params: {
                               }, headers: headers
                             
                            @@ -8786,20 +11811,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/custom-fields/{customField}', params={
                            +r = requests.get('/api/boards/{board}/custom-fields/{customField}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}");
                            +
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -8815,20 +11838,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/custom-fields/{customField}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/custom-fields/{customField}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -8836,6 +11858,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/custom-fields/{customField}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/custom-fields/{customField}

                            Get a Custom Fields attached to a board

                            @@ -8867,7 +11914,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            customField: the ID of the custom field

                            Example responses

                            @@ -8877,8 +11924,8 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "boardIds": "string"
                            +    "_id": "string",
                            +    "boardIds": "string"
                               }
                             ]
                             
                            @@ -8941,56 +11988,36 @@ UserSecurity
                            # You can also use wget
                             curl -X PUT /api/boards/{board}/custom-fields/{customField} \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            PUT /api/boards/{board}/custom-fields/{customField} HTTP/1.1
                            +
                            PUT /api/boards/{board}/custom-fields/{customField} HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/custom-fields/{customField}',
                            -  method: 'put',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "name": "string",
                            -  "type": "string",
                            -  "settings": "string",
                            -  "showOnCard": true,
                            -  "automaticallyOnCard": true,
                            -  "alwaysOnCard": "string",
                            -  "showLabelOnMiniCard": true,
                            -  "showSumAtTopOfList": true
                            -}';
                            +
                            const inputBody = '{
                            +  "name": "string",
                            +  "type": "string",
                            +  "settings": "string",
                            +  "showOnCard": true,
                            +  "automaticallyOnCard": true,
                            +  "alwaysOnCard": "string",
                            +  "showLabelOnMiniCard": true,
                            +  "showSumAtTopOfList": true
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/custom-fields/{customField}',
                            +fetch('/api/boards/{board}/custom-fields/{customField}',
                             {
                            -  method: 'PUT',
                            +  method: 'PUT',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -9001,16 +12028,46 @@ fetch('/api/boards/{board}/custom-fields/{customField}
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "name": "string",
                            +  "type": "string",
                            +  "settings": "string",
                            +  "showOnCard": true,
                            +  "automaticallyOnCard": true,
                            +  "alwaysOnCard": "string",
                            +  "showLabelOnMiniCard": true,
                            +  "showSumAtTopOfList": true
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/custom-fields/{customField}',
                            +{
                            +  method: 'PUT',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.put '/api/boards/{board}/custom-fields/{customField}',
                            +result = RestClient.put '/api/boards/{board}/custom-fields/{customField}',
                               params: {
                               }, headers: headers
                             
                            @@ -9019,21 +12076,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.put('/api/boards/{board}/custom-fields/{customField}', params={
                            +r = requests.put('/api/boards/{board}/custom-fields/{customField}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}");
                            +
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("PUT");
                            +con.setRequestMethod("PUT");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -9049,21 +12104,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("PUT", "/api/boards/{board}/custom-fields/{customField}", data)
                            +    req, err := http.NewRequest("PUT", "/api/boards/{board}/custom-fields/{customField}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -9071,6 +12125,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('PUT','/api/boards/{board}/custom-fields/{customField}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            PUT /api/boards/{board}/custom-fields/{customField}

                            Update a Custom Field

                            @@ -9117,7 +12197,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -9185,7 +12265,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -9240,43 +12320,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/custom-fields/{customField} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/custom-fields/{customField} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/custom-fields/{customField} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/custom-fields/{customField}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/custom-fields/{customField}',
                            +fetch('/api/boards/{board}/custom-fields/{customField}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -9287,15 +12348,35 @@ fetch('/api/boards/{board}/custom-fields/{customField}
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/custom-fields/{customField}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/custom-fields/{customField}',
                            +result = RestClient.delete '/api/boards/{board}/custom-fields/{customField}',
                               params: {
                               }, headers: headers
                             
                            @@ -9304,20 +12385,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/custom-fields/{customField}', params={
                            +r = requests.delete('/api/boards/{board}/custom-fields/{customField}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}");
                            +
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -9333,20 +12412,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/custom-fields/{customField}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/custom-fields/{customField}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -9354,6 +12432,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/custom-fields/{customField}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/custom-fields/{customField}

                            Delete a Custom Fields attached to a board

                            @@ -9386,7 +12489,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            customField: the ID of the custom field

                            Example responses

                            @@ -9395,7 +12498,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -9450,49 +12553,29 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/custom-fields/{customField}/dropdown-items \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/custom-fields/{customField}/dropdown-items HTTP/1.1
                            +
                            POST /api/boards/{board}/custom-fields/{customField}/dropdown-items HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/custom-fields/{customField}/dropdown-items',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "items": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "items": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items',
                            +fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -9503,16 +12586,39 @@ fetch('/api/boards/{board}/custom-fields/{customField}
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "items": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/custom-fields/{customField}/dropdown-items',
                            +result = RestClient.post '/api/boards/{board}/custom-fields/{customField}/dropdown-items',
                               params: {
                               }, headers: headers
                             
                            @@ -9521,21 +12627,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/custom-fields/{customField}/dropdown-items', params={
                            +r = requests.post('/api/boards/{board}/custom-fields/{customField}/dropdown-items', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}/dropdown-items");
                            +
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}/dropdown-items");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -9551,21 +12655,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/custom-fields/{customField}/dropdown-items", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/custom-fields/{customField}/dropdown-items", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -9573,6 +12676,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/custom-fields/{customField}/dropdown-items', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/custom-fields/{customField}/dropdown-items

                            Update a Custom Field's dropdown items

                            @@ -9631,7 +12760,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -9686,49 +12815,29 @@ UserSecurity
                            # You can also use wget
                             curl -X PUT /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem} \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            PUT /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem} HTTP/1.1
                            +
                            PUT /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem} HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                            -  method: 'put',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "name": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "name": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                            +fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                             {
                            -  method: 'PUT',
                            +  method: 'PUT',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -9739,16 +12848,39 @@ fetch('/api/boards/{board}/custom-fields/{customField}
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "name": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                            +{
                            +  method: 'PUT',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.put '/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                            +result = RestClient.put '/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                               params: {
                               }, headers: headers
                             
                            @@ -9757,21 +12889,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.put('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}', params={
                            +r = requests.put('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}");
                            +
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("PUT");
                            +con.setRequestMethod("PUT");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -9787,21 +12917,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("PUT", "/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}", data)
                            +    req, err := http.NewRequest("PUT", "/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -9809,6 +12938,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('PUT','/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            PUT /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}

                            Update a Custom Field's dropdown item

                            @@ -9855,7 +13010,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -9874,7 +13029,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -9929,43 +13084,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                            +fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -9976,15 +13112,35 @@ fetch('/api/boards/{board}/custom-fields/{customField}
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                            +result = RestClient.delete '/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}',
                               params: {
                               }, headers: headers
                             
                            @@ -9993,20 +13149,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}', params={
                            +r = requests.delete('/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}");
                            +
                            URL obj = new URL("/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -10022,20 +13176,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -10043,6 +13196,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/custom-fields/{customField}/dropdown-items/{dropdownItem}

                            Update a Custom Field's dropdown items

                            @@ -10088,7 +13266,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -10144,43 +13322,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/integrations \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/integrations HTTP/1.1
                            +
                            GET /api/boards/{board}/integrations HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/integrations',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/integrations',
                            +fetch('/api/boards/{board}/integrations',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -10191,15 +13350,35 @@ fetch('/api/boards/{board}/integrations',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/integrations',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/integrations',
                            +result = RestClient.get '/api/boards/{board}/integrations',
                               params: {
                               }, headers: headers
                             
                            @@ -10208,20 +13387,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/integrations', params={
                            +r = requests.get('/api/boards/{board}/integrations', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/integrations");
                            +
                            URL obj = new URL("/api/boards/{board}/integrations");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -10237,20 +13414,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/integrations", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/integrations", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -10258,6 +13434,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/integrations', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/integrations

                            Get all integrations in board

                            @@ -10282,7 +13483,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            Example responses

                            @@ -10292,18 +13493,18 @@ System.out.println(response.toString());
                            [
                               {
                            -    "enabled": true,
                            -    "title": "string",
                            -    "type": "string",
                            -    "activities": [
                            -      "string"
                            +    "enabled": true,
                            +    "title": "string",
                            +    "type": "string",
                            +    "activities": [
                            +      "string"
                                 ],
                            -    "url": "string",
                            -    "token": "string",
                            -    "boardId": "string",
                            -    "createdAt": "string",
                            -    "modifiedAt": "string",
                            -    "userId": "string"
                            +    "url": "string",
                            +    "token": "string",
                            +    "boardId": "string",
                            +    "createdAt": "string",
                            +    "modifiedAt": "string",
                            +    "userId": "string"
                               }
                             ]
                             
                            @@ -10355,7 +13556,7 @@ System.out.println(response.toString()); » title -string|null +string¦null false none name of the integration @@ -10383,7 +13584,7 @@ System.out.println(response.toString()); » token -string|null +string¦null false none token of the integration @@ -10429,49 +13630,29 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/integrations \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/integrations HTTP/1.1
                            +
                            POST /api/boards/{board}/integrations HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/integrations',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "url": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "url": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/integrations',
                            +fetch('/api/boards/{board}/integrations',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -10482,16 +13663,39 @@ fetch('/api/boards/{board}/integrations',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "url": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/integrations',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/integrations',
                            +result = RestClient.post '/api/boards/{board}/integrations',
                               params: {
                               }, headers: headers
                             
                            @@ -10500,21 +13704,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/integrations', params={
                            +r = requests.post('/api/boards/{board}/integrations', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/integrations");
                            +
                            URL obj = new URL("/api/boards/{board}/integrations");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -10530,21 +13732,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/integrations", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/integrations", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -10552,6 +13753,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/integrations', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/integrations

                            Create a new integration

                            @@ -10584,7 +13811,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -10596,7 +13823,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            Example responses

                            @@ -10605,7 +13832,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -10660,43 +13887,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/integrations/{int} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/integrations/{int} HTTP/1.1
                            +
                            GET /api/boards/{board}/integrations/{int} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/integrations/{int}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/integrations/{int}',
                            +fetch('/api/boards/{board}/integrations/{int}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -10707,15 +13915,35 @@ fetch('/api/boards/{board}/integrations/{int}',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/integrations/{int}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/integrations/{int}',
                            +result = RestClient.get '/api/boards/{board}/integrations/{int}',
                               params: {
                               }, headers: headers
                             
                            @@ -10724,20 +13952,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/integrations/{int}', params={
                            +r = requests.get('/api/boards/{board}/integrations/{int}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/integrations/{int}");
                            +
                            URL obj = new URL("/api/boards/{board}/integrations/{int}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -10753,20 +13979,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/integrations/{int}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/integrations/{int}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -10774,6 +13999,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/integrations/{int}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/integrations/{int}

                            Get a single integration in board

                            @@ -10805,7 +14055,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            int: the integration ID

                            @@ -10815,18 +14065,18 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "enabled": true,
                            -  "title": "string",
                            -  "type": "string",
                            -  "activities": [
                            -    "string"
                            +  "enabled": true,
                            +  "title": "string",
                            +  "type": "string",
                            +  "activities": [
                            +    "string"
                               ],
                            -  "url": "string",
                            -  "token": "string",
                            -  "boardId": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "userId": "string"
                            +  "url": "string",
                            +  "token": "string",
                            +  "boardId": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "userId": "string"
                             }
                             

                            Responses

                            @@ -10859,53 +14109,33 @@ UserSecurity
                            # You can also use wget
                             curl -X PUT /api/boards/{board}/integrations/{int} \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            PUT /api/boards/{board}/integrations/{int} HTTP/1.1
                            +
                            PUT /api/boards/{board}/integrations/{int} HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/integrations/{int}',
                            -  method: 'put',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "enabled": "string",
                            -  "title": "string",
                            -  "url": "string",
                            -  "token": "string",
                            -  "activities": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "enabled": "string",
                            +  "title": "string",
                            +  "url": "string",
                            +  "token": "string",
                            +  "activities": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/integrations/{int}',
                            +fetch('/api/boards/{board}/integrations/{int}',
                             {
                            -  method: 'PUT',
                            +  method: 'PUT',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -10916,16 +14146,43 @@ fetch('/api/boards/{board}/integrations/{int}',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "enabled": "string",
                            +  "title": "string",
                            +  "url": "string",
                            +  "token": "string",
                            +  "activities": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/integrations/{int}',
                            +{
                            +  method: 'PUT',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.put '/api/boards/{board}/integrations/{int}',
                            +result = RestClient.put '/api/boards/{board}/integrations/{int}',
                               params: {
                               }, headers: headers
                             
                            @@ -10934,21 +14191,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.put('/api/boards/{board}/integrations/{int}', params={
                            +r = requests.put('/api/boards/{board}/integrations/{int}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/integrations/{int}");
                            +
                            URL obj = new URL("/api/boards/{board}/integrations/{int}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("PUT");
                            +con.setRequestMethod("PUT");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -10964,21 +14219,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("PUT", "/api/boards/{board}/integrations/{int}", data)
                            +    req, err := http.NewRequest("PUT", "/api/boards/{board}/integrations/{int}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -10986,6 +14240,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('PUT','/api/boards/{board}/integrations/{int}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            PUT /api/boards/{board}/integrations/{int}

                            Edit integration data

                            @@ -11069,7 +14349,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            int: the integration ID

                            @@ -11079,7 +14359,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -11134,43 +14414,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/integrations/{int} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/integrations/{int} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/integrations/{int} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/integrations/{int}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/integrations/{int}',
                            +fetch('/api/boards/{board}/integrations/{int}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -11181,15 +14442,35 @@ fetch('/api/boards/{board}/integrations/{int}',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/integrations/{int}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/integrations/{int}',
                            +result = RestClient.delete '/api/boards/{board}/integrations/{int}',
                               params: {
                               }, headers: headers
                             
                            @@ -11198,20 +14479,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/integrations/{int}', params={
                            +r = requests.delete('/api/boards/{board}/integrations/{int}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/integrations/{int}");
                            +
                            URL obj = new URL("/api/boards/{board}/integrations/{int}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -11227,20 +14506,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/integrations/{int}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/integrations/{int}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -11248,6 +14526,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/integrations/{int}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/integrations/{int}

                            Delete integration

                            @@ -11279,7 +14582,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            int: the integration ID

                            @@ -11289,7 +14592,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -11344,43 +14647,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/integrations/{int}/activities \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/integrations/{int}/activities HTTP/1.1
                            +
                            DELETE /api/boards/{board}/integrations/{int}/activities HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/integrations/{int}/activities',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/integrations/{int}/activities',
                            +fetch('/api/boards/{board}/integrations/{int}/activities',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -11391,15 +14675,35 @@ fetch('/api/boards/{board}/integrations/{int}/activiti
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/integrations/{int}/activities',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/integrations/{int}/activities',
                            +result = RestClient.delete '/api/boards/{board}/integrations/{int}/activities',
                               params: {
                               }, headers: headers
                             
                            @@ -11408,20 +14712,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/integrations/{int}/activities', params={
                            +r = requests.delete('/api/boards/{board}/integrations/{int}/activities', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/integrations/{int}/activities");
                            +
                            URL obj = new URL("/api/boards/{board}/integrations/{int}/activities");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -11437,20 +14739,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/integrations/{int}/activities", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/integrations/{int}/activities", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -11458,6 +14759,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/integrations/{int}/activities', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/integrations/{int}/activities

                            Delete subscribed activities

                            @@ -11489,7 +14815,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            int: the integration ID

                            @@ -11499,18 +14825,18 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "enabled": true,
                            -  "title": "string",
                            -  "type": "string",
                            -  "activities": [
                            -    "string"
                            +  "enabled": true,
                            +  "title": "string",
                            +  "type": "string",
                            +  "activities": [
                            +    "string"
                               ],
                            -  "url": "string",
                            -  "token": "string",
                            -  "boardId": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "userId": "string"
                            +  "url": "string",
                            +  "token": "string",
                            +  "boardId": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "userId": "string"
                             }
                             

                            Responses

                            @@ -11543,49 +14869,29 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/integrations/{int}/activities \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/integrations/{int}/activities HTTP/1.1
                            +
                            POST /api/boards/{board}/integrations/{int}/activities HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/integrations/{int}/activities',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "activities": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "activities": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/integrations/{int}/activities',
                            +fetch('/api/boards/{board}/integrations/{int}/activities',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -11596,16 +14902,39 @@ fetch('/api/boards/{board}/integrations/{int}/activiti
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "activities": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/integrations/{int}/activities',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/integrations/{int}/activities',
                            +result = RestClient.post '/api/boards/{board}/integrations/{int}/activities',
                               params: {
                               }, headers: headers
                             
                            @@ -11614,21 +14943,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/integrations/{int}/activities', params={
                            +r = requests.post('/api/boards/{board}/integrations/{int}/activities', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/integrations/{int}/activities");
                            +
                            URL obj = new URL("/api/boards/{board}/integrations/{int}/activities");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -11644,21 +14971,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/integrations/{int}/activities", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/integrations/{int}/activities", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -11666,6 +14992,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/integrations/{int}/activities', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/integrations/{int}/activities

                            Add subscribed activities

                            @@ -11705,7 +15057,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -11717,7 +15069,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            int: the integration ID

                            @@ -11727,18 +15079,18 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "enabled": true,
                            -  "title": "string",
                            -  "type": "string",
                            -  "activities": [
                            -    "string"
                            +  "enabled": true,
                            +  "title": "string",
                            +  "type": "string",
                            +  "activities": [
                            +    "string"
                               ],
                            -  "url": "string",
                            -  "token": "string",
                            -  "boardId": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "userId": "string"
                            +  "url": "string",
                            +  "token": "string",
                            +  "boardId": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "userId": "string"
                             }
                             

                            Responses

                            @@ -11772,43 +15124,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/lists \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/lists HTTP/1.1
                            +
                            GET /api/boards/{board}/lists HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists',
                            +fetch('/api/boards/{board}/lists',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -11819,15 +15152,35 @@ fetch('/api/boards/{board}/lists',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/lists',
                            +result = RestClient.get '/api/boards/{board}/lists',
                               params: {
                               }, headers: headers
                             
                            @@ -11836,20 +15189,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/lists', params={
                            +r = requests.get('/api/boards/{board}/lists', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists");
                            +
                            URL obj = new URL("/api/boards/{board}/lists");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -11865,20 +15216,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/lists", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/lists", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -11886,6 +15236,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/lists', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/lists

                            Get the list of Lists attached to a board

                            @@ -11910,7 +15285,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            Example responses

                            @@ -11920,8 +15295,8 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "title": "string"
                            +    "_id": "string",
                            +    "title": "string"
                               }
                             ]
                             
                            @@ -11984,49 +15359,29 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/lists \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/lists HTTP/1.1
                            +
                            POST /api/boards/{board}/lists HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "title": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "title": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists',
                            +fetch('/api/boards/{board}/lists',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -12037,16 +15392,39 @@ fetch('/api/boards/{board}/lists',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "title": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/lists',
                            +result = RestClient.post '/api/boards/{board}/lists',
                               params: {
                               }, headers: headers
                             
                            @@ -12055,21 +15433,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/lists', params={
                            +r = requests.post('/api/boards/{board}/lists', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists");
                            +
                            URL obj = new URL("/api/boards/{board}/lists");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -12085,21 +15461,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/lists", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/lists", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -12107,6 +15482,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/lists', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/lists

                            Add a List to a board

                            @@ -12139,7 +15540,7 @@ System.out.println(response.toString()); body body object -false +true none @@ -12151,7 +15552,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            Example responses

                            @@ -12160,7 +15561,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -12215,43 +15616,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/lists/{list} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/lists/{list} HTTP/1.1
                            +
                            GET /api/boards/{board}/lists/{list} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}',
                            +fetch('/api/boards/{board}/lists/{list}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -12262,15 +15644,35 @@ fetch('/api/boards/{board}/lists/{list}',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/lists/{list}',
                            +result = RestClient.get '/api/boards/{board}/lists/{list}',
                               params: {
                               }, headers: headers
                             
                            @@ -12279,20 +15681,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/lists/{list}', params={
                            +r = requests.get('/api/boards/{board}/lists/{list}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -12308,20 +15708,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/lists/{list}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/lists/{list}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -12329,6 +15728,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/lists/{list}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/lists/{list}

                            Get a List attached to a board

                            @@ -12360,7 +15784,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            list: the List ID

                            @@ -12370,24 +15794,23 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "title": "string",
                            -  "starred": true,
                            -  "archived": true,
                            -  "archivedAt": "string",
                            -  "boardId": "string",
                            -  "swimlaneId": "string",
                            -  "createdAt": "string",
                            -  "sort": 0,
                            -  "updatedAt": "string",
                            -  "modifiedAt": "string",
                            -  "wipLimit": {
                            -    "value": 0,
                            -    "enabled": true,
                            -    "soft": true
                            +  "title": "string",
                            +  "starred": true,
                            +  "archived": true,
                            +  "archivedAt": "string",
                            +  "boardId": "string",
                            +  "swimlaneId": "string",
                            +  "createdAt": "string",
                            +  "sort": 0,
                            +  "updatedAt": "string",
                            +  "modifiedAt": "string",
                            +  "wipLimit": {
                            +    "value": 0,
                            +    "enabled": true,
                            +    "soft": true
                               },
                            -  "color": "white",
                            -  "type": "string",
                            -  "collapsed": true
                            +  "color": "white",
                            +  "type": "string"
                             }
                             

                            Responses

                            @@ -12420,43 +15843,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/lists/{list} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/lists/{list} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/lists/{list} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/lists/{list}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/lists/{list}',
                            +fetch('/api/boards/{board}/lists/{list}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -12467,15 +15871,35 @@ fetch('/api/boards/{board}/lists/{list}',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/lists/{list}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/lists/{list}',
                            +result = RestClient.delete '/api/boards/{board}/lists/{list}',
                               params: {
                               }, headers: headers
                             
                            @@ -12484,20 +15908,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/lists/{list}', params={
                            +r = requests.delete('/api/boards/{board}/lists/{list}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/lists/{list}");
                            +
                            URL obj = new URL("/api/boards/{board}/lists/{list}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -12513,20 +15935,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/lists/{list}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/lists/{list}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -12534,6 +15955,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/lists/{list}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/lists/{list}

                            Delete a List

                            @@ -12567,7 +16013,7 @@ The list is not put in the recycle bin.

                            -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the board ID

                            list: the ID of the list to remove

                            @@ -12577,7 +16023,7 @@ The list is not put in the recycle bin.

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -12633,43 +16079,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/swimlanes \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/swimlanes HTTP/1.1
                            +
                            GET /api/boards/{board}/swimlanes HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/swimlanes',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/swimlanes',
                            +fetch('/api/boards/{board}/swimlanes',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -12680,15 +16107,35 @@ fetch('/api/boards/{board}/swimlanes',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/swimlanes',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/swimlanes',
                            +result = RestClient.get '/api/boards/{board}/swimlanes',
                               params: {
                               }, headers: headers
                             
                            @@ -12697,20 +16144,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/swimlanes', params={
                            +r = requests.get('/api/boards/{board}/swimlanes', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/swimlanes");
                            +
                            URL obj = new URL("/api/boards/{board}/swimlanes");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -12726,20 +16171,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/swimlanes", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/swimlanes", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -12747,6 +16191,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/swimlanes', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/swimlanes

                            Get the list of swimlanes attached to a board

                            @@ -12771,7 +16240,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the ID of the board

                            Example responses

                            @@ -12781,8 +16250,8 @@ System.out.println(response.toString());
                            [
                               {
                            -    "_id": "string",
                            -    "title": "string"
                            +    "_id": "string",
                            +    "title": "string"
                               }
                             ]
                             
                            @@ -12845,49 +16314,29 @@ UserSecurity
                            # You can also use wget
                             curl -X POST /api/boards/{board}/swimlanes \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            POST /api/boards/{board}/swimlanes HTTP/1.1
                            +
                            POST /api/boards/{board}/swimlanes HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/swimlanes',
                            -  method: 'post',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "title": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "title": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/swimlanes',
                            +fetch('/api/boards/{board}/swimlanes',
                             {
                            -  method: 'POST',
                            +  method: 'POST',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -12898,16 +16347,39 @@ fetch('/api/boards/{board}/swimlanes',
                             });
                             
                             
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "title": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/swimlanes',
                            +{
                            +  method: 'POST',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.post '/api/boards/{board}/swimlanes',
                            +result = RestClient.post '/api/boards/{board}/swimlanes',
                               params: {
                               }, headers: headers
                             
                            @@ -12916,21 +16388,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.post('/api/boards/{board}/swimlanes', params={
                            +r = requests.post('/api/boards/{board}/swimlanes', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/swimlanes");
                            +
                            URL obj = new URL("/api/boards/{board}/swimlanes");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("POST");
                            +con.setRequestMethod("POST");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -12946,21 +16416,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("POST", "/api/boards/{board}/swimlanes", data)
                            +    req, err := http.NewRequest("POST", "/api/boards/{board}/swimlanes", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -12968,6 +16437,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('POST','/api/boards/{board}/swimlanes', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            POST /api/boards/{board}/swimlanes

                            Add a swimlane to a board

                            @@ -12999,8 +16494,8 @@ System.out.println(response.toString()); body body -new_swimlane -false +object +true none @@ -13012,7 +16507,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the ID of the board

                            Example responses

                            @@ -13021,7 +16516,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -13076,43 +16571,24 @@ UserSecurity
                            # You can also use wget
                             curl -X GET /api/boards/{board}/swimlanes/{swimlane} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            GET /api/boards/{board}/swimlanes/{swimlane} HTTP/1.1
                            +
                            GET /api/boards/{board}/swimlanes/{swimlane} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/swimlanes/{swimlane}',
                            -  method: 'get',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/swimlanes/{swimlane}',
                            +fetch('/api/boards/{board}/swimlanes/{swimlane}',
                             {
                            -  method: 'GET',
                            +  method: 'GET',
                             
                               headers: headers
                             })
                            @@ -13123,15 +16599,35 @@ fetch('/api/boards/{board}/swimlanes/{swimlane}'
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/swimlanes/{swimlane}',
                            +{
                            +  method: 'GET',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.get '/api/boards/{board}/swimlanes/{swimlane}',
                            +result = RestClient.get '/api/boards/{board}/swimlanes/{swimlane}',
                               params: {
                               }, headers: headers
                             
                            @@ -13140,20 +16636,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.get('/api/boards/{board}/swimlanes/{swimlane}', params={
                            +r = requests.get('/api/boards/{board}/swimlanes/{swimlane}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/swimlanes/{swimlane}");
                            +
                            URL obj = new URL("/api/boards/{board}/swimlanes/{swimlane}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("GET");
                            +con.setRequestMethod("GET");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -13169,20 +16663,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("GET", "/api/boards/{board}/swimlanes/{swimlane}", data)
                            +    req, err := http.NewRequest("GET", "/api/boards/{board}/swimlanes/{swimlane}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -13190,6 +16683,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('GET','/api/boards/{board}/swimlanes/{swimlane}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            GET /api/boards/{board}/swimlanes/{swimlane}

                            Get a swimlane

                            @@ -13221,7 +16739,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the ID of the board

                            swimlane: the ID of the swimlane

                            @@ -13231,17 +16749,16 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "title": "string",
                            -  "archived": true,
                            -  "archivedAt": "string",
                            -  "boardId": "string",
                            -  "createdAt": "string",
                            -  "sort": 0,
                            -  "color": "white",
                            -  "updatedAt": "string",
                            -  "modifiedAt": "string",
                            -  "type": "string",
                            -  "collapsed": true
                            +  "title": "string",
                            +  "archived": true,
                            +  "archivedAt": "string",
                            +  "boardId": "string",
                            +  "createdAt": "string",
                            +  "sort": 0,
                            +  "color": "white",
                            +  "updatedAt": "string",
                            +  "modifiedAt": "string",
                            +  "type": "string"
                             }
                             

                            Responses

                            @@ -13274,49 +16791,29 @@ UserSecurity
                            # You can also use wget
                             curl -X PUT /api/boards/{board}/swimlanes/{swimlane} \
                            -  -H 'Content-Type: multipart/form-data' \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Content-Type: multipart/form-data' \
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            PUT /api/boards/{board}/swimlanes/{swimlane} HTTP/1.1
                            +
                            PUT /api/boards/{board}/swimlanes/{swimlane} HTTP/1.1
                             
                             Content-Type: multipart/form-data
                             Accept: application/json
                             
                             
                            -
                            var headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/swimlanes/{swimlane}',
                            -  method: 'put',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            -const inputBody = '{
                            -  "title": "string"
                            -}';
                            +
                            const inputBody = '{
                            +  "title": "string"
                            +}';
                             const headers = {
                            -  'Content-Type':'multipart/form-data',
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/swimlanes/{swimlane}',
                            +fetch('/api/boards/{board}/swimlanes/{swimlane}',
                             {
                            -  method: 'PUT',
                            +  method: 'PUT',
                               body: inputBody,
                               headers: headers
                             })
                            @@ -13327,16 +16824,39 @@ fetch('/api/boards/{board}/swimlanes/{swimlane}'
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +const inputBody = {
                            +  "title": "string"
                            +};
                            +const headers = {
                            +  'Content-Type':'multipart/form-data',
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/swimlanes/{swimlane}',
                            +{
                            +  method: 'PUT',
                            +  body: JSON.stringify(inputBody),
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Content-Type' => 'multipart/form-data',
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Content-Type' => 'multipart/form-data',
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.put '/api/boards/{board}/swimlanes/{swimlane}',
                            +result = RestClient.put '/api/boards/{board}/swimlanes/{swimlane}',
                               params: {
                               }, headers: headers
                             
                            @@ -13345,21 +16865,19 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Content-Type': 'multipart/form-data',
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Content-Type': 'multipart/form-data',
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.put('/api/boards/{board}/swimlanes/{swimlane}', params={
                            +r = requests.put('/api/boards/{board}/swimlanes/{swimlane}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/swimlanes/{swimlane}");
                            +
                            URL obj = new URL("/api/boards/{board}/swimlanes/{swimlane}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("PUT");
                            +con.setRequestMethod("PUT");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -13375,21 +16893,20 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Content-Type": []string{"multipart/form-data"},
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Content-Type": []string{"multipart/form-data"},
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("PUT", "/api/boards/{board}/swimlanes/{swimlane}", data)
                            +    req, err := http.NewRequest("PUT", "/api/boards/{board}/swimlanes/{swimlane}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -13397,6 +16914,32 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'multipart/form-data',
                            +    'Accept' => 'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('PUT','/api/boards/{board}/swimlanes/{swimlane}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            PUT /api/boards/{board}/swimlanes/{swimlane}

                            Edit the title of a swimlane

                            @@ -13435,8 +16978,8 @@ System.out.println(response.toString()); body body -new_swimlane -false +object +true none @@ -13448,7 +16991,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the ID of the board

                            swimlane: the ID of the swimlane to edit

                            @@ -13458,7 +17001,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -13513,43 +17056,24 @@ UserSecurity
                            # You can also use wget
                             curl -X DELETE /api/boards/{board}/swimlanes/{swimlane} \
                            -  -H 'Accept: application/json' \
                            -  -H 'Authorization: API_KEY'
                            +  -H 'Accept: application/json' \
                            +  -H 'Authorization: API_KEY'
                             
                             
                            -
                            DELETE /api/boards/{board}/swimlanes/{swimlane} HTTP/1.1
                            +
                            DELETE /api/boards/{board}/swimlanes/{swimlane} HTTP/1.1
                             
                            -Accept: application/json
                            -
                            -
                            -
                            var headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            -};
                            -
                            -$.ajax({
                            -  url: '/api/boards/{board}/swimlanes/{swimlane}',
                            -  method: 'delete',
                            -
                            -  headers: headers,
                            -  success: function(data) {
                            -    console.log(JSON.stringify(data));
                            -  }
                            -})
                            -
                            -
                            -
                            const fetch = require('node-fetch');
                            +Accept: application/json
                             
                            +
                            +
                            
                             const headers = {
                            -  'Accept':'application/json',
                            -  'Authorization':'API_KEY'
                            -
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                             };
                             
                            -fetch('/api/boards/{board}/swimlanes/{swimlane}',
                            +fetch('/api/boards/{board}/swimlanes/{swimlane}',
                             {
                            -  method: 'DELETE',
                            +  method: 'DELETE',
                             
                               headers: headers
                             })
                            @@ -13560,15 +17084,35 @@ fetch('/api/boards/{board}/swimlanes/{swimlane}'
                            -
                            require 'rest-client'
                            -require 'json'
                            +
                            const fetch = require('node-fetch');
                            +
                            +const headers = {
                            +  'Accept':'application/json',
                            +  'Authorization':'API_KEY'
                            +};
                            +
                            +fetch('/api/boards/{board}/swimlanes/{swimlane}',
                            +{
                            +  method: 'DELETE',
                            +
                            +  headers: headers
                            +})
                            +.then(function(res) {
                            +    return res.json();
                            +}).then(function(body) {
                            +    console.log(body);
                            +});
                            +
                            +
                            +
                            require 'rest-client'
                            +require 'json'
                             
                             headers = {
                            -  'Accept' => 'application/json',
                            -  'Authorization' => 'API_KEY'
                            +  'Accept' => 'application/json',
                            +  'Authorization' => 'API_KEY'
                             }
                             
                            -result = RestClient.delete '/api/boards/{board}/swimlanes/{swimlane}',
                            +result = RestClient.delete '/api/boards/{board}/swimlanes/{swimlane}',
                               params: {
                               }, headers: headers
                             
                            @@ -13577,20 +17121,18 @@ p JSON.parse(result)
                             
                            import requests
                             headers = {
                            -  'Accept': 'application/json',
                            -  'Authorization': 'API_KEY'
                            +  'Accept': 'application/json',
                            +  'Authorization': 'API_KEY'
                             }
                             
                            -r = requests.delete('/api/boards/{board}/swimlanes/{swimlane}', params={
                            +r = requests.delete('/api/boards/{board}/swimlanes/{swimlane}', headers = headers)
                             
                            -}, headers = headers)
                            -
                            -print r.json()
                            +print(r.json())
                             
                             
                            -
                            URL obj = new URL("/api/boards/{board}/swimlanes/{swimlane}");
                            +
                            URL obj = new URL("/api/boards/{board}/swimlanes/{swimlane}");
                             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                            -con.setRequestMethod("DELETE");
                            +con.setRequestMethod("DELETE");
                             int responseCode = con.getResponseCode();
                             BufferedReader in = new BufferedReader(
                                 new InputStreamReader(con.getInputStream()));
                            @@ -13606,20 +17148,19 @@ System.out.println(response.toString());
                             
                            package main
                             
                             import (
                            -       "bytes"
                            -       "net/http"
                            +       "bytes"
                            +       "net/http"
                             )
                             
                             func main() {
                             
                                 headers := map[string][]string{
                            -        "Accept": []string{"application/json"},
                            -        "Authorization": []string{"API_KEY"},
                            -        
                            +        "Accept": []string{"application/json"},
                            +        "Authorization": []string{"API_KEY"},
                                 }
                             
                                 data := bytes.NewBuffer([]byte{jsonReq})
                            -    req, err := http.NewRequest("DELETE", "/api/boards/{board}/swimlanes/{swimlane}", data)
                            +    req, err := http.NewRequest("DELETE", "/api/boards/{board}/swimlanes/{swimlane}", data)
                                 req.Header = headers
                             
                                 client := &http.Client{}
                            @@ -13627,6 +17168,31 @@ System.out.println(response.toString());
                                 // ...
                             }
                             
                            +
                            +
                             'application/json',
                            +    'Authorization' => 'API_KEY',
                            +);
                            +
                            +$client = new \GuzzleHttp\Client();
                            +
                            +// Define array of request body.
                            +$request_body = array();
                            +
                            +try {
                            +    $response = $client->request('DELETE','/api/boards/{board}/swimlanes/{swimlane}', array(
                            +        'headers' => $headers,
                            +        'json' => $request_body,
                            +       )
                            +    );
                            +    print_r($response->getBody()->getContents());
                            + }
                            + catch (\GuzzleHttp\Exception\BadResponseException $e) {
                            +    // handle exception or api errors.
                            +    print_r($e->getMessage());
                            + }
                            +
                            + // ...
                            +
                             

                            DELETE /api/boards/{board}/swimlanes/{swimlane}

                            Delete a swimlane

                            @@ -13659,7 +17225,7 @@ System.out.println(response.toString()); -

                            Detailed descriptions

                            +

                            Detailed descriptions

                            board: the ID of the board

                            swimlane: the ID of the swimlane

                            @@ -13669,7 +17235,7 @@ System.out.println(response.toString());

                            200 Response

                            {
                            -  "_id": "string"
                            +  "_id": "string"
                             }
                             

                            Responses

                            @@ -13718,179 +17284,97 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecurity

                            Schemas

                            -

                            CardComments

                            -

                            +

                            Boards

                            +

                            + + +

                            {
                            -  "boardId": "string",
                            -  "cardId": "string",
                            -  "text": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "userId": "string"
                            -}
                            -
                            -
                            -

                            A comment on a card

                            -

                            Properties

                            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                            NameTypeRequiredRestrictionsDescription
                            boardIdstringtruenonethe board ID
                            cardIdstringtruenonethe card ID
                            textstringtruenonethe text of the comment
                            createdAtstringtruenonewhen was the comment created
                            modifiedAtstringtruenonenone
                            userIdstringtruenonethe author ID of the comment
                            -

                            Cards

                            -

                            -
                            {
                            -  "title": "string",
                            -  "archived": true,
                            -  "archivedAt": "string",
                            -  "parentId": "string",
                            -  "listId": "string",
                            -  "swimlaneId": "string",
                            -  "boardId": "string",
                            -  "coverId": "string",
                            -  "color": "white",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "customFields": [
                            -    {}
                            -  ],
                            -  "dateLastActivity": "string",
                            -  "description": "string",
                            -  "requestedBy": "string",
                            -  "assignedBy": "string",
                            -  "labelIds": [
                            -    "string"
                            -  ],
                            -  "members": [
                            -    "string"
                            -  ],
                            -  "assignees": [
                            -    "string"
                            -  ],
                            -  "receivedAt": "string",
                            -  "startAt": "string",
                            -  "dueAt": "string",
                            -  "endAt": "string",
                            -  "spentTime": 0,
                            -  "isOvertime": true,
                            -  "userId": "string",
                            -  "sort": 0,
                            -  "subtaskSort": 0,
                            -  "type": "string",
                            -  "linkedId": "string",
                            -  "vote": {
                            -    "question": "string",
                            -    "positive": [
                            -      "string"
                            -    ],
                            -    "negative": [
                            -      "string"
                            -    ],
                            -    "end": "string",
                            -    "public": true,
                            -    "allowNonBoardMembers": true
                            -  },
                            -  "poker": {
                            -    "question": true,
                            -    "one": [
                            -      "string"
                            -    ],
                            -    "two": [
                            -      "string"
                            -    ],
                            -    "three": [
                            -      "string"
                            -    ],
                            -    "five": [
                            -      "string"
                            -    ],
                            -    "eight": [
                            -      "string"
                            -    ],
                            -    "thirteen": [
                            -      "string"
                            -    ],
                            -    "twenty": [
                            -      "string"
                            -    ],
                            -    "forty": [
                            -      "string"
                            -    ],
                            -    "oneHundred": [
                            -      "string"
                            -    ],
                            -    "unsure": [
                            -      "string"
                            -    ],
                            -    "end": "string",
                            -    "allowNonBoardMembers": true,
                            -    "estimation": 0
                            -  },
                            -  "targetId_gantt": [
                            -    "string"
                            -  ],
                            -  "linkType_gantt": [
                            -    0
                            -  ],
                            -  "linkId_gantt": [
                            -    "string"
                            -  ],
                            -  "cardNumber": 0,
                            -  "showActivities": true,
                            -  "hideFinishedChecklistIfItemsAreHidden": true
                            +  "title": "string",
                            +  "slug": "string",
                            +  "archived": true,
                            +  "archivedAt": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "stars": 0,
                            +  "labels": [
                            +    {
                            +      "_id": "string",
                            +      "name": "string",
                            +      "color": "white"
                            +    }
                            +  ],
                            +  "members": [
                            +    {
                            +      "userId": "string",
                            +      "isAdmin": true,
                            +      "isActive": true,
                            +      "isNoComments": true,
                            +      "isCommentOnly": true,
                            +      "isWorker": true
                            +    }
                            +  ],
                            +  "permission": "public",
                            +  "orgs": [
                            +    {
                            +      "orgId": "string",
                            +      "orgDisplayName": "string",
                            +      "isActive": true
                            +    }
                            +  ],
                            +  "teams": [
                            +    {
                            +      "teamId": "string",
                            +      "teamDisplayName": "string",
                            +      "isActive": true
                            +    }
                            +  ],
                            +  "color": "belize",
                            +  "backgroundImageURL": "string",
                            +  "allowsCardCounterList": true,
                            +  "allowsBoardMemberList": true,
                            +  "description": "string",
                            +  "subtasksDefaultBoardId": "string",
                            +  "subtasksDefaultListId": "string",
                            +  "dateSettingsDefaultBoardId": "string",
                            +  "dateSettingsDefaultListId": "string",
                            +  "allowsSubtasks": true,
                            +  "allowsAttachments": true,
                            +  "allowsChecklists": true,
                            +  "allowsComments": true,
                            +  "allowsDescriptionTitle": true,
                            +  "allowsDescriptionText": true,
                            +  "allowsDescriptionTextOnMinicard": true,
                            +  "allowsCoverAttachmentOnMinicard": true,
                            +  "allowsBadgeAttachmentOnMinicard": true,
                            +  "allowsCardSortingByNumberOnMinicard": true,
                            +  "allowsCardNumber": true,
                            +  "allowsActivities": true,
                            +  "allowsLabels": true,
                            +  "allowsCreator": true,
                            +  "allowsAssignee": true,
                            +  "allowsMembers": true,
                            +  "allowsRequestedBy": true,
                            +  "allowsCardSortingByNumber": true,
                            +  "allowsShowLists": true,
                            +  "allowsAssignedBy": true,
                            +  "allowsReceivedDate": true,
                            +  "allowsStartDate": true,
                            +  "allowsEndDate": true,
                            +  "allowsDueDate": true,
                            +  "presentParentTask": "prefix-with-full-path",
                            +  "receivedAt": "string",
                            +  "startAt": "string",
                            +  "dueAt": "string",
                            +  "endAt": "string",
                            +  "spentTime": 0,
                            +  "isOvertime": true,
                            +  "type": "board",
                            +  "sort": 0
                             }
                             
                             
                            +

                            This is a Board.

                            Properties

                            @@ -13905,269 +17389,381 @@ UserSecurity - - + + - + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - + - - + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - +
                            titlestring|nullfalsestringtrue nonethe title of the cardThe title of the board
                            slugstringtruenoneThe title slugified.
                            archived boolean true noneis the card archivedIs the board archived?
                            archivedAtstring|nullstring¦null false nonelatest archiving date
                            parentIdstring|nullfalsenoneID of the parent card
                            listIdstring|nullfalsenoneList ID where the card is
                            swimlaneIdstringtruenoneSwimlane ID where the card is
                            boardIdstring|nullfalsenoneBoard ID of the card
                            coverIdstring|nullfalsenoneCover ID of the card
                            colorstring|nullfalsenonenoneLatest archiving time of the board
                            createdAt string true nonecreation dateCreation time of the board
                            modifiedAtstringstring¦nullfalsenoneLast modification time of the board
                            starsnumber true nonenoneHow many stars the board has
                            customFields[CardsCustomfields]|nulllabels[BoardsLabels]¦null false nonelist of custom fields
                            dateLastActivitystringtruenoneDate of last activity
                            descriptionstring|nullfalsenonedescription of the card
                            requestedBystring|nullfalsenonewho requested the card (ID of the user)
                            assignedBystring|nullfalsenonewho assigned the card (ID of the user)
                            labelIds[string]|nullfalsenonelist of labels ID the card hasList of labels attached to a board
                            members[string]|nullfalse[BoardsMembers]true nonelist of members (user IDs)List of members of a board
                            assignees[string]|nullpermissionstringtruenonevisibility of the board
                            orgs[BoardsOrgs]¦null false nonewho is assignee of the card (user ID), maximum one ID of assignee in array.the list of organizations that a board belongs to
                            teams[BoardsTeams]¦nullfalsenonethe list of teams that a board belongs to
                            colorstringtruenoneThe color of the board.
                            backgroundImageURLstring¦nullfalsenoneThe background image URL of the board.
                            allowsCardCounterListbooleantruenoneShow card counter per list
                            allowsBoardMemberListbooleantruenoneShow board member list
                            descriptionstring¦nullfalsenoneThe description of the board
                            subtasksDefaultBoardIdstring¦nullfalsenoneThe default board ID assigned to subtasks.
                            subtasksDefaultListIdstring¦nullfalsenoneThe default List ID assigned to subtasks.
                            dateSettingsDefaultBoardIdstring¦nullfalsenonenone
                            dateSettingsDefaultListIdstring¦nullfalsenonenone
                            allowsSubtasksbooleantruenoneDoes the board allows subtasks?
                            allowsAttachmentsbooleantruenoneDoes the board allows attachments?
                            allowsChecklistsbooleantruenoneDoes the board allows checklists?
                            allowsCommentsbooleantruenoneDoes the board allows comments?
                            allowsDescriptionTitlebooleantruenoneDoes the board allows description title?
                            allowsDescriptionTextbooleantruenoneDoes the board allows description text?
                            allowsDescriptionTextOnMinicardbooleantruenoneDoes the board allows description text on minicard?
                            allowsCoverAttachmentOnMinicardbooleantruenoneDoes the board allows cover attachment on minicard?
                            allowsBadgeAttachmentOnMinicardbooleantruenoneDoes the board allows badge attachment on minicard?
                            allowsCardSortingByNumberOnMinicardbooleantruenoneDoes the board allows card sorting by number on minicard?
                            allowsCardNumberbooleantruenoneDoes the board allows card numbers?
                            allowsActivitiesbooleantruenoneDoes the board allows comments?
                            allowsLabelsbooleantruenoneDoes the board allows labels?
                            allowsCreatorbooleantruenoneDoes the board allow creator?
                            allowsAssigneebooleantruenoneDoes the board allows assignee?
                            allowsMembersbooleantruenoneDoes the board allows members?
                            allowsRequestedBybooleantruenoneDoes the board allows requested by?
                            allowsCardSortingByNumberbooleantruenoneDoes the board allows card sorting by number?
                            allowsShowListsbooleantruenoneDoes the board allows show lists on the card?
                            allowsAssignedBybooleantruenoneDoes the board allows requested by?
                            allowsReceivedDatebooleantruenoneDoes the board allows received date?
                            allowsStartDatebooleantruenoneDoes the board allows start date?
                            allowsEndDatebooleantruenoneDoes the board allows end date?
                            allowsDueDatebooleantruenoneDoes the board allows due date?
                            presentParentTaskstring¦nullfalsenoneControls how to present the parent task:

                            - prefix-with-full-path: add a prefix with the full path
                            - prefix-with-parent: add a prefisx with the parent name
                            - subtext-with-full-path: add a subtext with the full path
                            - subtext-with-parent: add a subtext with the parent name
                            - no-parent: does not show the parent at all
                            receivedAtstring|nullstring¦null false none Date the card was received
                            startAtstring|nullstring¦null false noneDate the card was started to be worked onStarting date of the board.
                            dueAtstring|nullstring¦null false noneDate the card is dueDue date of the board.
                            endAtstring|nullstring¦null false noneDate the card endedEnd date of the board.
                            spentTimenumber|nullnumber¦null false noneHow much time has been spent on thisTime spent in the board.
                            isOvertimeboolean|nullboolean¦null false noneis the card over time?
                            userIdstringtruenoneuser ID of the author of the card
                            sortnumber|nullfalsenoneSort value
                            subtaskSortnumber|nullfalsenonesubtask sort valueIs the board overtimed?
                            type string true nonetype of the cardThe type of board
                            possible values: board, template-board, template-container
                            linkedIdstring|nullfalsenoneID of the linked card
                            voteCardsVotefalsenonevote object, see below
                            pokerCardsPokerfalsenonepoker object, see below
                            targetId_gantt[string]|nullfalsenoneID of card which is the child link in gantt view
                            linkType_gantt[number]|nullfalsenoneID of card which is the parent link in gantt view
                            linkId_gantt[string]|nullfalsenoneID of card which is the parent link in gantt view
                            cardNumbernumber|nullfalsenoneA boardwise sequentially increasing number that is assigned to every newly created card
                            showActivitiesbooleansortnumber true nonenone
                            hideFinishedChecklistIfItemsAreHiddenboolean|nullfalsenonehide completed checklist?Sort value
                            @@ -14181,6 +17777,172 @@ UserSecurity +permission +public + + +permission +private + + +color +belize + + +color +nephritis + + +color +pomegranate + + +color +pumpkin + + +color +wisteria + + +color +moderatepink + + +color +strongcyan + + +color +limegreen + + +color +midnight + + +color +dark + + +color +relax + + +color +corteza + + +color +clearblue + + +color +natural + + +color +modern + + +color +moderndark + + +color +exodark + + +presentParentTask +prefix-with-full-path + + +presentParentTask +prefix-with-parent + + +presentParentTask +subtext-with-full-path + + +presentParentTask +subtext-with-parent + + +presentParentTask +no-parent + + +type +board + + +type +template-board + + +type +template-container + + + +

                            BoardsLabels

                            +

                            + + +

                            +
                            {
                            +  "_id": "string",
                            +  "name": "string",
                            +  "color": "white"
                            +}
                            +
                            +
                            +

                            Properties

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            _idstringtruenoneUnique id of a label
                            namestringfalsenoneName of a label
                            colorstringtruenonecolor of a label.

                            Can be amongst green, yellow, orange, red, purple,
                            blue, sky, lime, pink, black,
                            silver, peachpuff, crimson, plum, darkgreen,
                            slateblue, magenta, gold, navy, gray,
                            saddlebrown, paleturquoise, mistyrose, indigo
                            +

                            Enumerated Values

                            + + + + + + + + + @@ -14282,23 +18044,745 @@ UserSecurity
                            PropertyValue
                            color white
                            -

                            CardsVote

                            -

                            +

                            BoardsMembers

                            +

                            + + +

                            {
                            -  "question": "string",
                            -  "positive": [
                            -    "string"
                            -  ],
                            -  "negative": [
                            -    "string"
                            -  ],
                            -  "end": "string",
                            -  "public": true,
                            -  "allowNonBoardMembers": true
                            +  "userId": "string",
                            +  "isAdmin": true,
                            +  "isActive": true,
                            +  "isNoComments": true,
                            +  "isCommentOnly": true,
                            +  "isWorker": true
                             }
                             
                             
                            -

                            Properties

                            +

                            Properties

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            userIdstringtruenoneThe uniq ID of the member
                            isAdminbooleantruenoneIs the member an admin of the board?
                            isActivebooleantruenoneIs the member active?
                            isNoCommentsbooleanfalsenoneIs the member not allowed to make comments
                            isCommentOnlybooleanfalsenoneIs the member only allowed to comment on the board
                            isWorkerbooleanfalsenoneIs the member only allowed to move card, assign himself to card and comment
                            +

                            BoardsOrgs

                            +

                            + + +

                            +
                            {
                            +  "orgId": "string",
                            +  "orgDisplayName": "string",
                            +  "isActive": true
                            +}
                            +
                            +
                            +

                            Properties

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            orgIdstringtruenoneThe uniq ID of the organization
                            orgDisplayNamestringtruenoneThe display name of the organization
                            isActivebooleantruenoneIs the organization active?
                            +

                            BoardsTeams

                            +

                            + + +

                            +
                            {
                            +  "teamId": "string",
                            +  "teamDisplayName": "string",
                            +  "isActive": true
                            +}
                            +
                            +
                            +

                            Properties

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            teamIdstringtruenoneThe uniq ID of the team
                            teamDisplayNamestringtruenoneThe display name of the team
                            isActivebooleantruenoneIs the team active?
                            +

                            CardComments

                            +

                            + + +

                            +
                            {
                            +  "boardId": "string",
                            +  "cardId": "string",
                            +  "text": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "userId": "string"
                            +}
                            +
                            +
                            +

                            A comment on a card

                            +

                            Properties

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            boardIdstringtruenonethe board ID
                            cardIdstringtruenonethe card ID
                            textstringtruenonethe text of the comment
                            createdAtstringtruenonewhen was the comment created
                            modifiedAtstringtruenonenone
                            userIdstringtruenonethe author ID of the comment
                            +

                            Cards

                            +

                            + + +

                            +
                            {
                            +  "title": "string",
                            +  "archived": true,
                            +  "archivedAt": "string",
                            +  "parentId": "string",
                            +  "listId": "string",
                            +  "swimlaneId": "string",
                            +  "boardId": "string",
                            +  "coverId": "string",
                            +  "color": "white",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "customFields": [
                            +    {}
                            +  ],
                            +  "dateLastActivity": "string",
                            +  "description": "string",
                            +  "requestedBy": "string",
                            +  "assignedBy": "string",
                            +  "labelIds": [
                            +    "string"
                            +  ],
                            +  "members": [
                            +    "string"
                            +  ],
                            +  "assignees": [
                            +    "string"
                            +  ],
                            +  "receivedAt": "string",
                            +  "startAt": "string",
                            +  "dueAt": "string",
                            +  "endAt": "string",
                            +  "spentTime": 0,
                            +  "isOvertime": true,
                            +  "userId": "string",
                            +  "sort": 0,
                            +  "subtaskSort": 0,
                            +  "type": "string",
                            +  "linkedId": "string",
                            +  "vote": {
                            +    "question": "string",
                            +    "positive": [
                            +      "string"
                            +    ],
                            +    "negative": [
                            +      "string"
                            +    ],
                            +    "end": "string",
                            +    "public": true,
                            +    "allowNonBoardMembers": true
                            +  },
                            +  "poker": {
                            +    "question": true,
                            +    "one": [
                            +      "string"
                            +    ],
                            +    "two": [
                            +      "string"
                            +    ],
                            +    "three": [
                            +      "string"
                            +    ],
                            +    "five": [
                            +      "string"
                            +    ],
                            +    "eight": [
                            +      "string"
                            +    ],
                            +    "thirteen": [
                            +      "string"
                            +    ],
                            +    "twenty": [
                            +      "string"
                            +    ],
                            +    "forty": [
                            +      "string"
                            +    ],
                            +    "oneHundred": [
                            +      "string"
                            +    ],
                            +    "unsure": [
                            +      "string"
                            +    ],
                            +    "end": "string",
                            +    "allowNonBoardMembers": true,
                            +    "estimation": 0
                            +  },
                            +  "targetId_gantt": [
                            +    "string"
                            +  ],
                            +  "linkType_gantt": [
                            +    0
                            +  ],
                            +  "linkId_gantt": [
                            +    "string"
                            +  ],
                            +  "cardNumber": 0
                            +}
                            +
                            +
                            +

                            Properties

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            NameTypeRequiredRestrictionsDescription
                            titlestring¦nullfalsenonethe title of the card
                            archivedbooleantruenoneis the card archived
                            archivedAtstring¦nullfalsenonelatest archiving date
                            parentIdstring¦nullfalsenoneID of the parent card
                            listIdstring¦nullfalsenoneList ID where the card is
                            swimlaneIdstringtruenoneSwimlane ID where the card is
                            boardIdstring¦nullfalsenoneBoard ID of the card
                            coverIdstring¦nullfalsenoneCover ID of the card
                            colorstring¦nullfalsenonenone
                            createdAtstringtruenonecreation date
                            modifiedAtstringtruenonenone
                            customFields[CardsCustomfields]¦nullfalsenonelist of custom fields
                            dateLastActivitystringtruenoneDate of last activity
                            descriptionstring¦nullfalsenonedescription of the card
                            requestedBystring¦nullfalsenonewho requested the card (ID of the user)
                            assignedBystring¦nullfalsenonewho assigned the card (ID of the user)
                            labelIds[string]¦nullfalsenonelist of labels ID the card has
                            members[string]¦nullfalsenonelist of members (user IDs)
                            assignees[string]¦nullfalsenonewho is assignee of the card (user ID),
                            maximum one ID of assignee in array.
                            receivedAtstring¦nullfalsenoneDate the card was received
                            startAtstring¦nullfalsenoneDate the card was started to be worked on
                            dueAtstring¦nullfalsenoneDate the card is due
                            endAtstring¦nullfalsenoneDate the card ended
                            spentTimenumber¦nullfalsenoneHow much time has been spent on this
                            isOvertimeboolean¦nullfalsenoneis the card over time?
                            userIdstringtruenoneuser ID of the author of the card
                            sortnumber¦nullfalsenoneSort value
                            subtaskSortnumber¦nullfalsenonesubtask sort value
                            typestringtruenonetype of the card
                            linkedIdstring¦nullfalsenoneID of the linked card
                            voteCardsVotefalsenonenone
                            pokerCardsPokerfalsenonenone
                            targetId_gantt[string]¦nullfalsenoneID of card which is the child link in gantt view
                            linkType_gantt[number]¦nullfalsenoneID of card which is the parent link in gantt view
                            linkId_gantt[string]¦nullfalsenoneID of card which is the parent link in gantt view
                            cardNumbernumber¦nullfalsenoneA boardwise sequentially increasing number that is assigned
                            to every newly created card
                            +

                            Enumerated Values

                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            PropertyValue
                            colorwhite
                            colorgreen
                            coloryellow
                            colororange
                            colorred
                            colorpurple
                            colorblue
                            colorsky
                            colorlime
                            colorpink
                            colorblack
                            colorsilver
                            colorpeachpuff
                            colorcrimson
                            colorplum
                            colordarkgreen
                            colorslateblue
                            colormagenta
                            colorgold
                            colornavy
                            colorgray
                            colorsaddlebrown
                            colorpaleturquoise
                            colormistyrose
                            colorindigo
                            +

                            CardsVote

                            +

                            + + +

                            +
                            {
                            +  "question": "string",
                            +  "positive": [
                            +    "string"
                            +  ],
                            +  "negative": [
                            +    "string"
                            +  ],
                            +  "end": "string",
                            +  "public": true,
                            +  "allowNonBoardMembers": true
                            +}
                            +
                            +
                            +

                            Properties

                            @@ -14354,47 +18838,50 @@ UserSecurity
                            -

                            CardsPoker

                            -

                            +

                            CardsPoker

                            +

                            + + +

                            {
                            -  "question": true,
                            -  "one": [
                            -    "string"
                            +  "question": true,
                            +  "one": [
                            +    "string"
                               ],
                            -  "two": [
                            -    "string"
                            +  "two": [
                            +    "string"
                               ],
                            -  "three": [
                            -    "string"
                            +  "three": [
                            +    "string"
                               ],
                            -  "five": [
                            -    "string"
                            +  "five": [
                            +    "string"
                               ],
                            -  "eight": [
                            -    "string"
                            +  "eight": [
                            +    "string"
                               ],
                            -  "thirteen": [
                            -    "string"
                            +  "thirteen": [
                            +    "string"
                               ],
                            -  "twenty": [
                            -    "string"
                            +  "twenty": [
                            +    "string"
                               ],
                            -  "forty": [
                            -    "string"
                            +  "forty": [
                            +    "string"
                               ],
                            -  "oneHundred": [
                            -    "string"
                            +  "oneHundred": [
                            +    "string"
                               ],
                            -  "unsure": [
                            -    "string"
                            +  "unsure": [
                            +    "string"
                               ],
                            -  "end": "string",
                            -  "allowNonBoardMembers": true,
                            -  "estimation": 0
                            +  "end": "string",
                            +  "allowNonBoardMembers": true,
                            +  "estimation": 0
                             }
                             
                             
                            -

                            Properties

                            +

                            Properties

                            @@ -14409,7 +18896,7 @@ UserSecurity - + @@ -14493,7 +18980,7 @@ UserSecurity - + @@ -14506,28 +18993,34 @@ UserSecurity
                            question booleanfalsetrue none none
                            allowNonBoardMembers booleanfalsetrue none none
                            -

                            CardsCustomfields

                            -

                            +

                            CardsCustomfields

                            +

                            + + +

                            {}
                             
                             
                            -

                            Properties

                            +

                            Properties

                            None

                            -

                            ChecklistItems

                            -

                            +

                            ChecklistItems

                            +

                            + + +

                            {
                            -  "title": "string",
                            -  "sort": 0,
                            -  "isFinished": true,
                            -  "checklistId": "string",
                            -  "cardId": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string"
                            +  "title": "string",
                            +  "sort": 0,
                            +  "isFinished": true,
                            +  "checklistId": "string",
                            +  "cardId": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string"
                             }
                             
                             
                            -

                            An item in a checklist

                            -

                            Properties

                            +

                            An item in a checklist

                            +

                            Properties

                            @@ -14576,7 +19069,7 @@ UserSecurity - + @@ -14590,22 +19083,24 @@ UserSecurity
                            createdAtstring|nullstring¦null false none none
                            -

                            Checklists

                            -

                            +

                            Checklists

                            +

                            + + +

                            {
                            -  "cardId": "string",
                            -  "title": "string",
                            -  "finishedAt": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "sort": 0,
                            -  "hideCheckedChecklistItems": true,
                            -  "hideAllChecklistItems": true
                            +  "cardId": "string",
                            +  "title": "string",
                            +  "finishedAt": "string",
                            +  "showAtMinicard": true,
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "sort": 0
                             }
                             
                             
                            -

                            A Checklist

                            -

                            Properties

                            +

                            A Checklist

                            +

                            Properties

                            @@ -14633,12 +19128,19 @@ UserSecurity - + + + + + + + + @@ -14659,50 +19161,39 @@ UserSecurity - - - - - - - - - - - - - -
                            finishedAtstring|nullstring¦null false none When was the checklist finished
                            showAtMinicardboolean¦nullfalsenoneShow at minicard. Default: false.
                            createdAt string truenone sorting value of the checklist
                            hideCheckedChecklistItemsboolean|nullfalsenonehide the checked checklist-items?
                            hideAllChecklistItemsboolean|nullfalsenonehide all checklist items ?
                            -

                            CustomFields

                            -

                            +

                            CustomFields

                            +

                            + + +

                            {
                            -  "boardIds": [
                            -    "string"
                            +  "boardIds": [
                            +    "string"
                               ],
                            -  "name": "string",
                            -  "type": "text",
                            -  "settings": {
                            -    "currencyCode": "string",
                            -    "dropdownItems": [
                            +  "name": "string",
                            +  "type": "text",
                            +  "settings": {
                            +    "currencyCode": "string",
                            +    "dropdownItems": [
                                   {}
                                 ],
                            -    "stringtemplateFormat": "string",
                            -    "stringtemplateSeparator": "string"
                            +    "stringtemplateFormat": "string",
                            +    "stringtemplateSeparator": "string"
                               },
                            -  "showOnCard": true,
                            -  "automaticallyOnCard": true,
                            -  "alwaysOnCard": true,
                            -  "showLabelOnMiniCard": true,
                            -  "showSumAtTopOfList": true,
                            -  "createdAt": "string",
                            -  "modifiedAt": "string"
                            +  "showOnCard": true,
                            +  "automaticallyOnCard": true,
                            +  "alwaysOnCard": true,
                            +  "showLabelOnMiniCard": true,
                            +  "showSumAtTopOfList": true,
                            +  "createdAt": "string",
                            +  "modifiedAt": "string"
                             }
                             
                             
                            -

                            A custom field on a card in the board

                            -

                            Properties

                            +

                            A custom field on a card in the board

                            +

                            Properties

                            @@ -14740,7 +19231,7 @@ UserSecurity - + @@ -14779,7 +19270,7 @@ UserSecurity - + @@ -14793,7 +19284,7 @@ UserSecurity
                            CustomFieldsSettings true nonesettings of the custom fieldnone
                            showOnCard
                            createdAtstring|nullstring¦null false none none
                            -

                            Enumerated Values

                            +

                            Enumerated Values

                            @@ -14832,19 +19323,22 @@ UserSecurity
                            -

                            CustomFieldsSettings

                            -

                            +

                            CustomFieldsSettings

                            +

                            + + +

                            {
                            -  "currencyCode": "string",
                            -  "dropdownItems": [
                            +  "currencyCode": "string",
                            +  "dropdownItems": [
                                 {}
                               ],
                            -  "stringtemplateFormat": "string",
                            -  "stringtemplateSeparator": "string"
                            +  "stringtemplateFormat": "string",
                            +  "stringtemplateSeparator": "string"
                             }
                             
                             
                            -

                            Properties

                            +

                            Properties

                            @@ -14886,33 +19380,39 @@ UserSecurity
                            -

                            CustomFieldsSettingsDropdownitems

                            -

                            +

                            CustomFieldsSettingsDropdownitems

                            +

                            + + +

                            {}
                             
                             
                            -

                            Properties

                            +

                            Properties

                            None

                            -

                            Integrations

                            -

                            +

                            Integrations

                            +

                            + + +

                            {
                            -  "enabled": true,
                            -  "title": "string",
                            -  "type": "string",
                            -  "activities": [
                            -    "string"
                            +  "enabled": true,
                            +  "title": "string",
                            +  "type": "string",
                            +  "activities": [
                            +    "string"
                               ],
                            -  "url": "string",
                            -  "token": "string",
                            -  "boardId": "string",
                            -  "createdAt": "string",
                            -  "modifiedAt": "string",
                            -  "userId": "string"
                            +  "url": "string",
                            +  "token": "string",
                            +  "boardId": "string",
                            +  "createdAt": "string",
                            +  "modifiedAt": "string",
                            +  "userId": "string"
                             }
                             
                             
                            -

                            Integration with third-party applications

                            -

                            Properties

                            +

                            Integration with third-party applications

                            +

                            Properties

                            @@ -14933,7 +19433,7 @@ UserSecurity - + @@ -14961,7 +19461,7 @@ UserSecurity - + @@ -14996,32 +19496,34 @@ UserSecurity
                            titlestring|nullstring¦null false none name of the integration
                            tokenstring|nullstring¦null false none token of the integration
                            -

                            Lists

                            -

                            +

                            Lists

                            +

                            + + +

                            {
                            -  "title": "string",
                            -  "starred": true,
                            -  "archived": true,
                            -  "archivedAt": "string",
                            -  "boardId": "string",
                            -  "swimlaneId": "string",
                            -  "createdAt": "string",
                            -  "sort": 0,
                            -  "updatedAt": "string",
                            -  "modifiedAt": "string",
                            -  "wipLimit": {
                            -    "value": 0,
                            -    "enabled": true,
                            -    "soft": true
                            +  "title": "string",
                            +  "starred": true,
                            +  "archived": true,
                            +  "archivedAt": "string",
                            +  "boardId": "string",
                            +  "swimlaneId": "string",
                            +  "createdAt": "string",
                            +  "sort": 0,
                            +  "updatedAt": "string",
                            +  "modifiedAt": "string",
                            +  "wipLimit": {
                            +    "value": 0,
                            +    "enabled": true,
                            +    "soft": true
                               },
                            -  "color": "white",
                            -  "type": "string",
                            -  "collapsed": true
                            +  "color": "white",
                            +  "type": "string"
                             }
                             
                             
                            -

                            A list (column) in the Wekan board.

                            -

                            Properties

                            +

                            A list (column) in the Wekan board.

                            +

                            Properties

                            @@ -15042,10 +19544,10 @@ UserSecurity - + - + @@ -15056,7 +19558,7 @@ UserSecurity - + @@ -15084,14 +19586,14 @@ UserSecurity - + - + @@ -15108,11 +19610,11 @@ UserSecurity - + - + @@ -15124,16 +19626,9 @@ UserSecurity - - - - - - -
                            starredboolean|nullboolean¦null false noneif a list is stared then we put it on the topif a list is stared
                            then we put it on the top
                            archived
                            archivedAtstring|nullstring¦null false none latest archiving date
                            sortnumber|nullnumber¦null false none is the list sorted
                            updatedAtstring|nullstring¦null false none last update of the listListsWiplimit false noneWIP object, see belownone
                            colorstring|nullstring¦null false none the color of the listnone The type of list
                            collapsedbooleantruenoneis the list collapsed
                            -

                            Enumerated Values

                            +

                            Enumerated Values

                            @@ -15244,16 +19739,19 @@ UserSecurity
                            -

                            ListsWiplimit

                            -

                            +

                            ListsWiplimit

                            +

                            + + +

                            {
                            -  "value": 0,
                            -  "enabled": true,
                            -  "soft": true
                            +  "value": 0,
                            +  "enabled": true,
                            +  "soft": true
                             }
                             
                             
                            -

                            Properties

                            +

                            Properties

                            @@ -15288,25 +19786,27 @@ UserSecurity
                            -

                            Swimlanes

                            -

                            +

                            Swimlanes

                            +

                            + + +

                            {
                            -  "title": "string",
                            -  "archived": true,
                            -  "archivedAt": "string",
                            -  "boardId": "string",
                            -  "createdAt": "string",
                            -  "sort": 0,
                            -  "color": "white",
                            -  "updatedAt": "string",
                            -  "modifiedAt": "string",
                            -  "type": "string",
                            -  "collapsed": true
                            +  "title": "string",
                            +  "archived": true,
                            +  "archivedAt": "string",
                            +  "boardId": "string",
                            +  "createdAt": "string",
                            +  "sort": 0,
                            +  "color": "white",
                            +  "updatedAt": "string",
                            +  "modifiedAt": "string",
                            +  "type": "string"
                             }
                             
                             
                            -

                            A swimlane is an line in the kaban board.

                            -

                            Properties

                            +

                            A swimlane is an line in the kaban board.

                            +

                            Properties

                            @@ -15334,7 +19834,7 @@ UserSecurity - + @@ -15355,21 +19855,21 @@ UserSecurity - + - + - + @@ -15388,16 +19888,9 @@ UserSecurity - - - - - - -
                            archivedAtstring|nullstring¦null false none latest archiving date of the swimlane
                            sortnumber|nullnumber¦null false none the sort value of the swimlane
                            colorstring|nullstring¦null false none the color of the swimlane
                            updatedAtstring|nullstring¦null false none when was the swimlane last editednone The type of swimlane
                            collapsedbooleantruenoneis the swimlane collapsed
                            -

                            Enumerated Values

                            +

                            Enumerated Values

                            @@ -15508,7 +20001,27 @@ UserSecurity
                            - + + + + + + + + + + + + + + + + + + + + +
                            @@ -15546,6 +20059,10 @@ UserSecurity Go + + PHP + +
                            diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 9fd90b2cc..a396bbe78 100644 --- a/public/api/wekan.yml +++ b/public/api/wekan.yml @@ -1,7 +1,7 @@ swagger: '2.0' info: title: Wekan REST API - version: v7.84 + version: v7.19 description: | The REST API allows you to control and extend Wekan with ease. @@ -134,6 +134,204 @@ paths: description: | Error in registration + /api/boards: + get: + operationId: get_public_boards + summary: Get all public boards + tags: + - Boards + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + type: array + items: + type: object + properties: + _id: + type: string + title: + type: string + post: + operationId: new_board + summary: Create a board + description: | + This allows to create a board. + + The color has to be chosen between `belize`, `nephritis`, `pomegranate`, + `pumpkin`, `wisteria`, `moderatepink`, `strongcyan`, + `limegreen`, `midnight`, `dark`, `relax`, `corteza`: + + Wekan logo + tags: + - Boards + consumes: + - multipart/form-data + - application/json + parameters: + - name: title + in: formData + description: | + the new title of the board + type: string + required: true + - name: owner + in: formData + description: | + "ABCDE12345" <= User ID in Wekan. + (Not username or email) + type: string + required: true + - name: isAdmin + in: formData + description: | + is the owner an admin of the board (default true) + type: boolean + required: false + - name: isActive + in: formData + description: | + is the board active (default true) + type: boolean + required: false + - name: isNoComments + in: formData + description: | + disable comments (default false) + type: boolean + required: false + - name: isCommentOnly + in: formData + description: | + only enable comments (default false) + type: boolean + required: false + - name: isWorker + in: formData + description: | + only move cards, assign himself to card and comment (default false) + type: boolean + required: false + - name: permission + in: formData + description: | + "private" board <== Set to "public" if you + want public Wekan board + type: string + required: false + - name: color + in: formData + description: | + the color of the board + type: string + required: false + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + type: object + properties: + _id: + type: string + defaultSwimlaneId: + type: string + /api/boards/{board}: + get: + operationId: get_board + summary: Get the board with that particular ID + tags: + - Boards + parameters: + - name: board + in: path + description: | + the ID of the board to retrieve the data + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + $ref: "#/definitions/Boards" + delete: + operationId: delete_board + summary: Delete a board + tags: + - Boards + parameters: + - name: board + in: path + description: | + the ID of the board + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + /api/boards/{board}/attachments: + get: + operationId: get_board_attachments + summary: Get the list of attachments of a board + tags: + - Boards + parameters: + - name: board + in: path + description: | + the board ID + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + type: array + items: + type: object + properties: + attachmentId: + type: string + attachmentName: + type: string + attachmentType: + type: string + url: + type: string + urlDownload: + type: string + boardId: + type: string + swimlaneId: + type: string + listId: + type: string + cardId: + type: string /api/boards/{board}/attachments/{attachment}/export: get: operationId: exportJson @@ -1408,6 +1606,40 @@ paths: 200 response schema: $ref: "#/definitions/Integrations" + /api/boards/{board}/labels: + put: + operationId: add_board_label + summary: Add a label to a board + description: | + If the board doesn't have the name/color label, this function + adds the label to the board. + tags: + - Boards + consumes: + - multipart/form-data + - application/json + parameters: + - name: label + in: formData + description: the label value + type: string + required: true + - name: board + in: path + description: | + the board + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + type: string /api/boards/{board}/lists: get: operationId: get_all_lists @@ -1845,11 +2077,6 @@ paths: change the owner of the card type: string required: false - - name: archive - in: formData - description: the archive value - type: string - required: true - name: board in: path description: | @@ -2010,6 +2237,61 @@ paths: properties: list_cards_count: type: integer + /api/boards/{board}/members/{member}: + post: + operationId: set_board_member_permission + summary: Change the permission of a member of a board + tags: + - Boards + - Users + consumes: + - multipart/form-data + - application/json + parameters: + - name: isAdmin + in: formData + description: | + admin capability + type: boolean + required: true + - name: isNoComments + in: formData + description: | + NoComments capability + type: boolean + required: true + - name: isCommentOnly + in: formData + description: | + CommentsOnly capability + type: boolean + required: true + - name: isWorker + in: formData + description: | + Worker capability + type: boolean + required: true + - name: board + in: path + description: | + the ID of the board that we are changing + type: string + required: true + - name: member + in: path + description: | + the ID of the user to change permissions + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response /api/boards/{board}/swimlanes: get: operationId: get_all_swimlanes @@ -2216,7 +2498,494 @@ paths: type: string listId: type: string + /api/boards_count: + get: + operationId: get_boards_count + summary: Get public and private boards count + tags: + - Boards + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + type: object + properties: + private: + type: integer + public: + type: integer + /api/users/{user}/boards: + get: + operationId: get_boards_from_user + summary: Get all boards attached to a user + tags: + - Boards + parameters: + - name: user + in: path + description: | + the ID of the user to retrieve the data + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + type: array + items: + type: object + properties: + _id: + type: string + title: + type: string definitions: + Boards: + type: object + description: This is a Board. + properties: + title: + description: | + The title of the board + type: string + slug: + description: | + The title slugified. + type: string + archived: + description: | + Is the board archived? + type: boolean + archivedAt: + description: | + Latest archiving time of the board + type: string + x-nullable: true + createdAt: + description: | + Creation time of the board + type: string + modifiedAt: + description: | + Last modification time of the board + type: string + x-nullable: true + stars: + description: | + How many stars the board has + type: number + labels: + description: | + List of labels attached to a board + type: array + items: + $ref: "#/definitions/BoardsLabels" + x-nullable: true + members: + description: | + List of members of a board + type: array + items: + $ref: "#/definitions/BoardsMembers" + permission: + description: | + visibility of the board + type: string + enum: + - public + - private + orgs: + description: | + the list of organizations that a board belongs to + type: array + items: + $ref: "#/definitions/BoardsOrgs" + x-nullable: true + teams: + description: | + the list of teams that a board belongs to + type: array + items: + $ref: "#/definitions/BoardsTeams" + x-nullable: true + color: + description: | + The color of the board. + type: string + enum: + - belize + - nephritis + - pomegranate + - pumpkin + - wisteria + - moderatepink + - strongcyan + - limegreen + - midnight + - dark + - relax + - corteza + - clearblue + - natural + - modern + - moderndark + - exodark + backgroundImageURL: + description: | + The background image URL of the board. + type: string + x-nullable: true + allowsCardCounterList: + description: | + Show card counter per list + type: boolean + allowsBoardMemberList: + description: | + Show board member list + type: boolean + description: + description: | + The description of the board + type: string + x-nullable: true + subtasksDefaultBoardId: + description: | + The default board ID assigned to subtasks. + type: string + x-nullable: true + subtasksDefaultListId: + description: | + The default List ID assigned to subtasks. + type: string + x-nullable: true + dateSettingsDefaultBoardId: + type: string + x-nullable: true + dateSettingsDefaultListId: + type: string + x-nullable: true + allowsSubtasks: + description: | + Does the board allows subtasks? + type: boolean + allowsAttachments: + description: | + Does the board allows attachments? + type: boolean + allowsChecklists: + description: | + Does the board allows checklists? + type: boolean + allowsComments: + description: | + Does the board allows comments? + type: boolean + allowsDescriptionTitle: + description: | + Does the board allows description title? + type: boolean + allowsDescriptionText: + description: | + Does the board allows description text? + type: boolean + allowsDescriptionTextOnMinicard: + description: | + Does the board allows description text on minicard? + type: boolean + allowsCoverAttachmentOnMinicard: + description: | + Does the board allows cover attachment on minicard? + type: boolean + allowsBadgeAttachmentOnMinicard: + description: | + Does the board allows badge attachment on minicard? + type: boolean + allowsCardSortingByNumberOnMinicard: + description: | + Does the board allows card sorting by number on minicard? + type: boolean + allowsCardNumber: + description: | + Does the board allows card numbers? + type: boolean + allowsActivities: + description: | + Does the board allows comments? + type: boolean + allowsLabels: + description: | + Does the board allows labels? + type: boolean + allowsCreator: + description: | + Does the board allow creator? + type: boolean + allowsAssignee: + description: | + Does the board allows assignee? + type: boolean + allowsMembers: + description: | + Does the board allows members? + type: boolean + allowsRequestedBy: + description: | + Does the board allows requested by? + type: boolean + allowsCardSortingByNumber: + description: | + Does the board allows card sorting by number? + type: boolean + allowsShowLists: + description: | + Does the board allows show lists on the card? + type: boolean + allowsAssignedBy: + description: | + Does the board allows requested by? + type: boolean + allowsReceivedDate: + description: | + Does the board allows received date? + type: boolean + allowsStartDate: + description: | + Does the board allows start date? + type: boolean + allowsEndDate: + description: | + Does the board allows end date? + type: boolean + allowsDueDate: + description: | + Does the board allows due date? + type: boolean + presentParentTask: + description: | + Controls how to present the parent task: + + - `prefix-with-full-path`: add a prefix with the full path + - `prefix-with-parent`: add a prefisx with the parent name + - `subtext-with-full-path`: add a subtext with the full path + - `subtext-with-parent`: add a subtext with the parent name + - `no-parent`: does not show the parent at all + type: string + enum: + - prefix-with-full-path + - prefix-with-parent + - subtext-with-full-path + - subtext-with-parent + - no-parent + x-nullable: true + receivedAt: + description: | + Date the card was received + type: string + x-nullable: true + startAt: + description: | + Starting date of the board. + type: string + x-nullable: true + dueAt: + description: | + Due date of the board. + type: string + x-nullable: true + endAt: + description: | + End date of the board. + type: string + x-nullable: true + spentTime: + description: | + Time spent in the board. + type: number + x-nullable: true + isOvertime: + description: | + Is the board overtimed? + type: boolean + x-nullable: true + type: + description: | + The type of board + possible values: board, template-board, template-container + type: string + enum: + - board + - template-board + - template-container + sort: + description: | + Sort value + type: number + required: + - title + - slug + - archived + - createdAt + - stars + - members + - permission + - color + - allowsCardCounterList + - allowsBoardMemberList + - allowsSubtasks + - allowsAttachments + - allowsChecklists + - allowsComments + - allowsDescriptionTitle + - allowsDescriptionText + - allowsDescriptionTextOnMinicard + - allowsCoverAttachmentOnMinicard + - allowsBadgeAttachmentOnMinicard + - allowsCardSortingByNumberOnMinicard + - allowsCardNumber + - allowsActivities + - allowsLabels + - allowsCreator + - allowsAssignee + - allowsMembers + - allowsRequestedBy + - allowsCardSortingByNumber + - allowsShowLists + - allowsAssignedBy + - allowsReceivedDate + - allowsStartDate + - allowsEndDate + - allowsDueDate + - type + - sort + BoardsLabels: + type: object + properties: + _id: + description: | + Unique id of a label + type: string + name: + description: | + Name of a label + type: string + color: + description: | + color of a label. + + Can be amongst `green`, `yellow`, `orange`, `red`, `purple`, + `blue`, `sky`, `lime`, `pink`, `black`, + `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`, + `slateblue`, `magenta`, `gold`, `navy`, `gray`, + `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo` + type: string + enum: + - white + - green + - yellow + - orange + - red + - purple + - blue + - sky + - lime + - pink + - black + - silver + - peachpuff + - crimson + - plum + - darkgreen + - slateblue + - magenta + - gold + - navy + - gray + - saddlebrown + - paleturquoise + - mistyrose + - indigo + required: + - _id + - color + BoardsMembers: + type: object + properties: + userId: + description: | + The uniq ID of the member + type: string + isAdmin: + description: | + Is the member an admin of the board? + type: boolean + isActive: + description: | + Is the member active? + type: boolean + isNoComments: + description: | + Is the member not allowed to make comments + type: boolean + isCommentOnly: + description: | + Is the member only allowed to comment on the board + type: boolean + isWorker: + description: | + Is the member only allowed to move card, assign himself to card and comment + type: boolean + required: + - userId + - isAdmin + - isActive + BoardsOrgs: + type: object + properties: + orgId: + description: | + The uniq ID of the organization + type: string + orgDisplayName: + description: | + The display name of the organization + type: string + isActive: + description: | + Is the organization active? + type: boolean + required: + - orgId + - orgDisplayName + - isActive + BoardsTeams: + type: object + properties: + teamId: + description: | + The uniq ID of the team + type: string + teamDisplayName: + description: | + The display name of the team + type: string + isActive: + description: | + Is the team active? + type: boolean + required: + - teamId + - teamDisplayName + - isActive CardComments: type: object description: A comment on a card @@ -2470,13 +3239,6 @@ definitions: to every newly created card type: number x-nullable: true - showActivities: - type: boolean - hideFinishedChecklistIfItemsAreHidden: - description: | - hide completed checklist? - type: boolean - x-nullable: true required: - archived - swimlaneId @@ -2485,7 +3247,6 @@ definitions: - dateLastActivity - userId - type - - showActivities CardsVote: type: object properties: @@ -2598,6 +3359,9 @@ definitions: description: | poker estimation value type: number + required: + - question + - allowNonBoardMembers CardsCustomfields: type: object ChecklistItems: @@ -2653,6 +3417,11 @@ definitions: When was the checklist finished type: string x-nullable: true + showAtMinicard: + description: | + Show at minicard. Default: false. + type: boolean + x-nullable: true createdAt: description: | Creation date of the checklist @@ -2663,16 +3432,6 @@ definitions: description: | sorting value of the checklist type: number - hideCheckedChecklistItems: - description: | - hide the checked checklist-items? - type: boolean - x-nullable: true - hideAllChecklistItems: - description: | - hide all checklist items ? - type: boolean - x-nullable: true required: - cardId - title @@ -2902,10 +3661,6 @@ definitions: description: | The type of list type: string - collapsed: - description: | - is the list collapsed - type: boolean required: - title - archived @@ -2914,7 +3669,6 @@ definitions: - createdAt - modifiedAt - type - - collapsed ListsWiplimit: type: object properties: @@ -3006,10 +3760,6 @@ definitions: description: | The type of swimlane type: string - collapsed: - description: | - is the swimlane collapsed - type: boolean required: - title - archived @@ -3017,4 +3767,3 @@ definitions: - createdAt - modifiedAt - type - - collapsed diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png index bc7dba216..bcd461151 100644 Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ diff --git a/public/card-colors.png b/public/card-colors.png index 14062fd77..91d3a5878 100644 Binary files a/public/card-colors.png and b/public/card-colors.png differ diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png index f1c7d5d8c..0b9a3e223 100644 Binary files a/public/favicon-16x16.png and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png index faca1cd2f..2de6ea1bd 100644 Binary files a/public/favicon-32x32.png and b/public/favicon-32x32.png differ diff --git a/public/ios/100.png b/public/ios/100.png index 0522f6824..bf44f8d93 100644 Binary files a/public/ios/100.png and b/public/ios/100.png differ diff --git a/public/ios/1024.png b/public/ios/1024.png index 56139b7f8..d9926133f 100644 Binary files a/public/ios/1024.png and b/public/ios/1024.png differ diff --git a/public/ios/114.png b/public/ios/114.png index d9aec1a91..e4a3c55a2 100644 Binary files a/public/ios/114.png and b/public/ios/114.png differ diff --git a/public/ios/120.png b/public/ios/120.png index cdc3b8f52..81b799a5f 100644 Binary files a/public/ios/120.png and b/public/ios/120.png differ diff --git a/public/ios/128.png b/public/ios/128.png index 694041bd7..43d9e4740 100644 Binary files a/public/ios/128.png and b/public/ios/128.png differ diff --git a/public/ios/144.png b/public/ios/144.png index 6a7a896b8..4f7050c99 100644 Binary files a/public/ios/144.png and b/public/ios/144.png differ diff --git a/public/ios/152.png b/public/ios/152.png index 8f8ad2197..e7436ab98 100644 Binary files a/public/ios/152.png and b/public/ios/152.png differ diff --git a/public/ios/16.png b/public/ios/16.png index 4e9e18fe2..2a7672ed2 100644 Binary files a/public/ios/16.png and b/public/ios/16.png differ diff --git a/public/ios/167.png b/public/ios/167.png index 7162d305f..5331cee3b 100644 Binary files a/public/ios/167.png and b/public/ios/167.png differ diff --git a/public/ios/180.png b/public/ios/180.png index b62abe93c..29e322a0d 100644 Binary files a/public/ios/180.png and b/public/ios/180.png differ diff --git a/public/ios/192.png b/public/ios/192.png index a4cdc8eee..b6246fb58 100644 Binary files a/public/ios/192.png and b/public/ios/192.png differ diff --git a/public/ios/20.png b/public/ios/20.png index 4e89454df..e1aac1eef 100644 Binary files a/public/ios/20.png and b/public/ios/20.png differ diff --git a/public/ios/256.png b/public/ios/256.png index 2660986d9..d0c581731 100644 Binary files a/public/ios/256.png and b/public/ios/256.png differ diff --git a/public/ios/29.png b/public/ios/29.png index fc034999f..b46d117e1 100644 Binary files a/public/ios/29.png and b/public/ios/29.png differ diff --git a/public/ios/32.png b/public/ios/32.png index b57157a1f..7bd6588d6 100644 Binary files a/public/ios/32.png and b/public/ios/32.png differ diff --git a/public/ios/40.png b/public/ios/40.png index b400821c2..34b9b1c2f 100644 Binary files a/public/ios/40.png and b/public/ios/40.png differ diff --git a/public/ios/50.png b/public/ios/50.png index 9421da3a5..e04186a6b 100644 Binary files a/public/ios/50.png and b/public/ios/50.png differ diff --git a/public/ios/512.png b/public/ios/512.png index 0f69b9976..3d8977986 100644 Binary files a/public/ios/512.png and b/public/ios/512.png differ diff --git a/public/ios/57.png b/public/ios/57.png index 26bdaad01..37d1c5dcf 100644 Binary files a/public/ios/57.png and b/public/ios/57.png differ diff --git a/public/ios/58.png b/public/ios/58.png index 3671b042d..9ecba7fc6 100644 Binary files a/public/ios/58.png and b/public/ios/58.png differ diff --git a/public/ios/60.png b/public/ios/60.png index 8986a56e6..7d168a905 100644 Binary files a/public/ios/60.png and b/public/ios/60.png differ diff --git a/public/ios/64.png b/public/ios/64.png index 1398d20d5..b73abc692 100644 Binary files a/public/ios/64.png and b/public/ios/64.png differ diff --git a/public/ios/72.png b/public/ios/72.png index c62db8504..c8d197893 100644 Binary files a/public/ios/72.png and b/public/ios/72.png differ diff --git a/public/ios/76.png b/public/ios/76.png index fcc879aeb..ed0644110 100644 Binary files a/public/ios/76.png and b/public/ios/76.png differ diff --git a/public/ios/80.png b/public/ios/80.png index 79bb8f21c..497dd8b4c 100644 Binary files a/public/ios/80.png and b/public/ios/80.png differ diff --git a/public/ios/87.png b/public/ios/87.png index 8e25016b6..be2ec222b 100644 Binary files a/public/ios/87.png and b/public/ios/87.png differ diff --git a/public/logo-header.png b/public/logo-header.png index f6248bca4..16ffa102a 100644 Binary files a/public/logo-header.png and b/public/logo-header.png differ diff --git a/public/maskable_icon.png b/public/maskable_icon.png index 6a5ca67ae..cc8818a43 100644 Binary files a/public/maskable_icon.png and b/public/maskable_icon.png differ diff --git a/public/monochrome-icon-512x512.png b/public/monochrome-icon-512x512.png index 20d30f291..feba2ac7d 100644 Binary files a/public/monochrome-icon-512x512.png and b/public/monochrome-icon-512x512.png differ diff --git a/public/mstile-310x150.png b/public/mstile-310x150.png index 2cee8d14f..f80bea7af 100644 Binary files a/public/mstile-310x150.png and b/public/mstile-310x150.png differ diff --git a/public/mstile-310x310.png b/public/mstile-310x310.png index 3ab34d8cc..4d7ac6517 100644 Binary files a/public/mstile-310x310.png and b/public/mstile-310x310.png differ diff --git a/public/mstile-70x70.png b/public/mstile-70x70.png index e55fdf479..8b306ba5c 100644 Binary files a/public/mstile-70x70.png and b/public/mstile-70x70.png differ diff --git a/public/old-icons/favicon-16x16.png b/public/old-icons/favicon-16x16.png index f3bd4f2f0..57eee7644 100644 Binary files a/public/old-icons/favicon-16x16.png and b/public/old-icons/favicon-16x16.png differ diff --git a/public/old-icons/favicon-32x32.png b/public/old-icons/favicon-32x32.png index e96014405..8fb6ae020 100644 Binary files a/public/old-icons/favicon-32x32.png and b/public/old-icons/favicon-32x32.png differ diff --git a/public/old-site.webmanifest b/public/old-site.webmanifest deleted file mode 100644 index 51e25650c..000000000 --- a/public/old-site.webmanifest +++ /dev/null @@ -1,524 +0,0 @@ -{ - "name": "Wekan", - "short_name": "Wekan", - "icons": [ - { - "src": "svg-etc/wekan-logo-512.svg", - "sizes": "any", - "type": "image/svg" - }, - { - "src": "android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - }, - { - "src": "Square150x150Logo.scale-100.png", - "sizes": "150x150", - "type": "image/png" - }, - { - "src": "Square44x44Logo.scale-100.png", - "sizes": "44x44", - "type": "image/png" - }, - { - "src": "StoreLogo.scale-100.png", - "sizes": "50x50", - "type": "image/png" - }, - { - "src": "maskable_icon.png", - "sizes": "474x474", - "type": "image/png", - "purpose": "maskable" - }, - { - "src": "monochrome-icon-512x512.png", - "sizes": "512x512", - "type": "image/png", - "purpose": "monochrome" - }, - { - "src": "windows11/SmallTile.scale-100.png", - "sizes": "71x71" - }, - { - "src": "windows11/SmallTile.scale-125.png", - "sizes": "89x89" - }, - { - "src": "windows11/SmallTile.scale-150.png", - "sizes": "107x107" - }, - { - "src": "windows11/SmallTile.scale-200.png", - "sizes": "142x142" - }, - { - "src": "windows11/SmallTile.scale-400.png", - "sizes": "284x284" - }, - { - "src": "windows11/Square150x150Logo.scale-100.png", - "sizes": "150x150" - }, - { - "src": "windows11/Square150x150Logo.scale-125.png", - "sizes": "188x188" - }, - { - "src": "windows11/Square150x150Logo.scale-150.png", - "sizes": "225x225" - }, - { - "src": "windows11/Square150x150Logo.scale-200.png", - "sizes": "300x300" - }, - { - "src": "windows11/Square150x150Logo.scale-400.png", - "sizes": "600x600" - }, - { - "src": "windows11/Wide310x150Logo.scale-100.png", - "sizes": "310x150" - }, - { - "src": "windows11/Wide310x150Logo.scale-125.png", - "sizes": "388x188" - }, - { - "src": "windows11/Wide310x150Logo.scale-150.png", - "sizes": "465x225" - }, - { - "src": "windows11/Wide310x150Logo.scale-200.png", - "sizes": "620x300" - }, - { - "src": "windows11/Wide310x150Logo.scale-400.png", - "sizes": "1240x600" - }, - { - "src": "windows11/LargeTile.scale-100.png", - "sizes": "310x310" - }, - { - "src": "windows11/LargeTile.scale-125.png", - "sizes": "388x388" - }, - { - "src": "windows11/LargeTile.scale-150.png", - "sizes": "465x465" - }, - { - "src": "windows11/LargeTile.scale-200.png", - "sizes": "620x620" - }, - { - "src": "windows11/LargeTile.scale-400.png", - "sizes": "1240x1240" - }, - { - "src": "windows11/Square44x44Logo.scale-100.png", - "sizes": "44x44" - }, - { - "src": "windows11/Square44x44Logo.scale-125.png", - "sizes": "55x55" - }, - { - "src": "windows11/Square44x44Logo.scale-150.png", - "sizes": "66x66" - }, - { - "src": "windows11/Square44x44Logo.scale-200.png", - "sizes": "88x88" - }, - { - "src": "windows11/Square44x44Logo.scale-400.png", - "sizes": "176x176" - }, - { - "src": "windows11/StoreLogo.scale-100.png", - "sizes": "50x50" - }, - { - "src": "windows11/StoreLogo.scale-125.png", - "sizes": "63x63" - }, - { - "src": "windows11/StoreLogo.scale-150.png", - "sizes": "75x75" - }, - { - "src": "windows11/StoreLogo.scale-200.png", - "sizes": "100x100" - }, - { - "src": "windows11/StoreLogo.scale-400.png", - "sizes": "200x200" - }, - { - "src": "windows11/SplashScreen.scale-100.png", - "sizes": "620x300" - }, - { - "src": "windows11/SplashScreen.scale-125.png", - "sizes": "775x375" - }, - { - "src": "windows11/SplashScreen.scale-150.png", - "sizes": "930x450" - }, - { - "src": "windows11/SplashScreen.scale-200.png", - "sizes": "1240x600" - }, - { - "src": "windows11/SplashScreen.scale-400.png", - "sizes": "2480x1200" - }, - { - "src": "windows11/Square44x44Logo.targetsize-16.png", - "sizes": "16x16" - }, - { - "src": "windows11/Square44x44Logo.targetsize-20.png", - "sizes": "20x20" - }, - { - "src": "windows11/Square44x44Logo.targetsize-24.png", - "sizes": "24x24" - }, - { - "src": "windows11/Square44x44Logo.targetsize-30.png", - "sizes": "30x30" - }, - { - "src": "windows11/Square44x44Logo.targetsize-32.png", - "sizes": "32x32" - }, - { - "src": "windows11/Square44x44Logo.targetsize-36.png", - "sizes": "36x36" - }, - { - "src": "windows11/Square44x44Logo.targetsize-40.png", - "sizes": "40x40" - }, - { - "src": "windows11/Square44x44Logo.targetsize-44.png", - "sizes": "44x44" - }, - { - "src": "windows11/Square44x44Logo.targetsize-48.png", - "sizes": "48x48" - }, - { - "src": "windows11/Square44x44Logo.targetsize-60.png", - "sizes": "60x60" - }, - { - "src": "windows11/Square44x44Logo.targetsize-64.png", - "sizes": "64x64" - }, - { - "src": "windows11/Square44x44Logo.targetsize-72.png", - "sizes": "72x72" - }, - { - "src": "windows11/Square44x44Logo.targetsize-80.png", - "sizes": "80x80" - }, - { - "src": "windows11/Square44x44Logo.targetsize-96.png", - "sizes": "96x96" - }, - { - "src": "windows11/Square44x44Logo.targetsize-256.png", - "sizes": "256x256" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-16.png", - "sizes": "16x16" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-20.png", - "sizes": "20x20" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-24.png", - "sizes": "24x24" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-30.png", - "sizes": "30x30" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-32.png", - "sizes": "32x32" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-36.png", - "sizes": "36x36" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-40.png", - "sizes": "40x40" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-44.png", - "sizes": "44x44" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-48.png", - "sizes": "48x48" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-60.png", - "sizes": "60x60" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-64.png", - "sizes": "64x64" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-72.png", - "sizes": "72x72" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-80.png", - "sizes": "80x80" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-96.png", - "sizes": "96x96" - }, - { - "src": "windows11/Square44x44Logo.altform-unplated_targetsize-256.png", - "sizes": "256x256" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png", - "sizes": "16x16" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png", - "sizes": "20x20" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png", - "sizes": "24x24" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png", - "sizes": "30x30" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png", - "sizes": "32x32" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png", - "sizes": "36x36" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png", - "sizes": "40x40" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png", - "sizes": "44x44" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png", - "sizes": "48x48" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png", - "sizes": "60x60" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png", - "sizes": "64x64" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png", - "sizes": "72x72" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png", - "sizes": "80x80" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png", - "sizes": "96x96" - }, - { - "src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png", - "sizes": "256x256" - }, - { - "src": "android/android-launchericon-512-512.png", - "sizes": "512x512" - }, - { - "src": "android/android-launchericon-192-192.png", - "sizes": "192x192" - }, - { - "src": "android/android-launchericon-144-144.png", - "sizes": "144x144" - }, - { - "src": "android/android-launchericon-96-96.png", - "sizes": "96x96" - }, - { - "src": "android/android-launchericon-72-72.png", - "sizes": "72x72" - }, - { - "src": "android/android-launchericon-48-48.png", - "sizes": "48x48" - }, - { - "src": "ios/16.png", - "sizes": "16x16" - }, - { - "src": "ios/20.png", - "sizes": "20x20" - }, - { - "src": "ios/29.png", - "sizes": "29x29" - }, - { - "src": "ios/32.png", - "sizes": "32x32" - }, - { - "src": "ios/40.png", - "sizes": "40x40" - }, - { - "src": "ios/50.png", - "sizes": "50x50" - }, - { - "src": "ios/57.png", - "sizes": "57x57" - }, - { - "src": "ios/58.png", - "sizes": "58x58" - }, - { - "src": "ios/60.png", - "sizes": "60x60" - }, - { - "src": "ios/64.png", - "sizes": "64x64" - }, - { - "src": "ios/72.png", - "sizes": "72x72" - }, - { - "src": "ios/76.png", - "sizes": "76x76" - }, - { - "src": "ios/80.png", - "sizes": "80x80" - }, - { - "src": "ios/87.png", - "sizes": "87x87" - }, - { - "src": "ios/100.png", - "sizes": "100x100" - }, - { - "src": "ios/114.png", - "sizes": "114x114" - }, - { - "src": "ios/120.png", - "sizes": "120x120" - }, - { - "src": "ios/128.png", - "sizes": "128x128" - }, - { - "src": "ios/144.png", - "sizes": "144x144" - }, - { - "src": "ios/152.png", - "sizes": "152x152" - }, - { - "src": "ios/167.png", - "sizes": "167x167" - }, - { - "src": "ios/180.png", - "sizes": "180x180" - }, - { - "src": "ios/192.png", - "sizes": "192x192" - }, - { - "src": "ios/256.png", - "sizes": "256x256" - }, - { - "src": "ios/512.png", - "sizes": "512x512" - }, - { - "src": "ios/1024.png", - "sizes": "1024x1024" - } - ], - "screenshots": [ - { - "src": "screenshot1.webp", - "sizes": "1280x720", - "type": "image/webp" - }, - { - "src": "screenshot2.webp", - "sizes": "1280x720", - "type": "image/webp" - } - ], - "theme_color": "#000000", - "background_color": "#000000", - "start_url": "sign-in", - "display": "standalone", - "orientation": "any", - "categories": [ - "productivity" - ], - "iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96", - "description": "Open Source kanban with MIT license", - "dir": "auto", - "scope": "https://boards.wekan.team", - "prefer_related_applications": false, - "display_override": [ - "standalone" - ] -} diff --git a/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg index 59974cc64..4320882c9 100644 --- a/public/safari-pinned-tab.svg +++ b/public/safari-pinned-tab.svg @@ -1 +1,51 @@ - \ No newline at end of file + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest index beaf2ffbd..5265a9f72 100644 --- a/public/site.webmanifest +++ b/public/site.webmanifest @@ -2,11 +2,6 @@ "name": "Wekan", "short_name": "Wekan", "icons": [ - { - "src": "svg-etc/wekan-logo-512.svg", - "sizes": "any", - "type": "image/svg" - }, { "src": "android-chrome-192x192.png", "sizes": "192x192", @@ -508,15 +503,17 @@ "theme_color": "#000000", "background_color": "#000000", "start_url": "sign-in", - "display": "standalone", + "display": "fullscreen", "orientation": "any", "categories": [ "productivity" ], + "iarc_rating_id": "70d7c4a4-3e5a-4714-a7dc-fa006613ba96", "description": "Open Source kanban with MIT license", "dir": "auto", + "scope": "https://boards.wekan.team", "prefer_related_applications": false, "display_override": [ - "standalone" + "fullscreen" ] } diff --git a/public/svg-etc/wekan-logo-150.svg b/public/svg-etc/wekan-logo-150.svg index 634d62f36..51d4eedec 100644 --- a/public/svg-etc/wekan-logo-150.svg +++ b/public/svg-etc/wekan-logo-150.svg @@ -1 +1,68 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/svg-etc/wekan-logo-256.png b/public/svg-etc/wekan-logo-256.png index f322521f4..3f29a8974 100644 Binary files a/public/svg-etc/wekan-logo-256.png and b/public/svg-etc/wekan-logo-256.png differ diff --git a/public/svg-etc/wekan-logo-256.svg b/public/svg-etc/wekan-logo-256.svg index 2311e97f9..2a9c5e881 100644 --- a/public/svg-etc/wekan-logo-256.svg +++ b/public/svg-etc/wekan-logo-256.svg @@ -1 +1,203 @@ - \ No newline at end of file + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/svg-etc/wekan-logo-32.png b/public/svg-etc/wekan-logo-32.png index cdb69c41e..c5bdffdac 100644 Binary files a/public/svg-etc/wekan-logo-32.png and b/public/svg-etc/wekan-logo-32.png differ diff --git a/public/svg-etc/wekan-logo-512.png b/public/svg-etc/wekan-logo-512.png index 5a684c59b..0bb904979 100644 Binary files a/public/svg-etc/wekan-logo-512.png and b/public/svg-etc/wekan-logo-512.png differ diff --git a/public/svg-etc/wekan-logo-512.svg b/public/svg-etc/wekan-logo-512.svg index 2e14a43a2..e945a40de 100644 --- a/public/svg-etc/wekan-logo-512.svg +++ b/public/svg-etc/wekan-logo-512.svg @@ -1 +1,200 @@ - \ No newline at end of file + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/wekan-logo.svg b/public/wekan-logo.svg index c010e1edb..da34a07ac 100644 --- a/public/wekan-logo.svg +++ b/public/wekan-logo.svg @@ -1 +1 @@ - \ No newline at end of file +wekan-1_2 \ No newline at end of file diff --git a/public/windows11/LargeTile.scale-100.png b/public/windows11/LargeTile.scale-100.png index 9988c74a2..e7263f010 100644 Binary files a/public/windows11/LargeTile.scale-100.png and b/public/windows11/LargeTile.scale-100.png differ diff --git a/public/windows11/LargeTile.scale-125.png b/public/windows11/LargeTile.scale-125.png index 9292539b5..bd14928b2 100644 Binary files a/public/windows11/LargeTile.scale-125.png and b/public/windows11/LargeTile.scale-125.png differ diff --git a/public/windows11/LargeTile.scale-150.png b/public/windows11/LargeTile.scale-150.png index ee63ef064..40cc3c18b 100644 Binary files a/public/windows11/LargeTile.scale-150.png and b/public/windows11/LargeTile.scale-150.png differ diff --git a/public/windows11/LargeTile.scale-200.png b/public/windows11/LargeTile.scale-200.png index cf7a94c87..429d16493 100644 Binary files a/public/windows11/LargeTile.scale-200.png and b/public/windows11/LargeTile.scale-200.png differ diff --git a/public/windows11/LargeTile.scale-400.png b/public/windows11/LargeTile.scale-400.png index 83ee2593d..4f96ba570 100644 Binary files a/public/windows11/LargeTile.scale-400.png and b/public/windows11/LargeTile.scale-400.png differ diff --git a/public/windows11/SmallTile.scale-100.png b/public/windows11/SmallTile.scale-100.png index 1902a162a..c3b037452 100644 Binary files a/public/windows11/SmallTile.scale-100.png and b/public/windows11/SmallTile.scale-100.png differ diff --git a/public/windows11/SmallTile.scale-125.png b/public/windows11/SmallTile.scale-125.png index 4f8490199..bc83fb8a3 100644 Binary files a/public/windows11/SmallTile.scale-125.png and b/public/windows11/SmallTile.scale-125.png differ diff --git a/public/windows11/SmallTile.scale-150.png b/public/windows11/SmallTile.scale-150.png index bc9f10e84..ea24f0a23 100644 Binary files a/public/windows11/SmallTile.scale-150.png and b/public/windows11/SmallTile.scale-150.png differ diff --git a/public/windows11/SmallTile.scale-200.png b/public/windows11/SmallTile.scale-200.png index 8c66f2ed3..e3eeab1a1 100644 Binary files a/public/windows11/SmallTile.scale-200.png and b/public/windows11/SmallTile.scale-200.png differ diff --git a/public/windows11/SmallTile.scale-400.png b/public/windows11/SmallTile.scale-400.png index 027569e69..040305ba6 100644 Binary files a/public/windows11/SmallTile.scale-400.png and b/public/windows11/SmallTile.scale-400.png differ diff --git a/public/windows11/SplashScreen.scale-100.png b/public/windows11/SplashScreen.scale-100.png index 316ad80a9..226cd44c2 100644 Binary files a/public/windows11/SplashScreen.scale-100.png and b/public/windows11/SplashScreen.scale-100.png differ diff --git a/public/windows11/SplashScreen.scale-125.png b/public/windows11/SplashScreen.scale-125.png index 7993a99e4..8fbdb6b82 100644 Binary files a/public/windows11/SplashScreen.scale-125.png and b/public/windows11/SplashScreen.scale-125.png differ diff --git a/public/windows11/SplashScreen.scale-150.png b/public/windows11/SplashScreen.scale-150.png index 274dcff8c..02fd67182 100644 Binary files a/public/windows11/SplashScreen.scale-150.png and b/public/windows11/SplashScreen.scale-150.png differ diff --git a/public/windows11/SplashScreen.scale-200.png b/public/windows11/SplashScreen.scale-200.png index e07724ba2..004830904 100644 Binary files a/public/windows11/SplashScreen.scale-200.png and b/public/windows11/SplashScreen.scale-200.png differ diff --git a/public/windows11/SplashScreen.scale-400.png b/public/windows11/SplashScreen.scale-400.png index cf504ab45..0a6283af7 100644 Binary files a/public/windows11/SplashScreen.scale-400.png and b/public/windows11/SplashScreen.scale-400.png differ diff --git a/public/windows11/Square150x150Logo.scale-100.png b/public/windows11/Square150x150Logo.scale-100.png index d3f78127a..35c571141 100644 Binary files a/public/windows11/Square150x150Logo.scale-100.png and b/public/windows11/Square150x150Logo.scale-100.png differ diff --git a/public/windows11/Square150x150Logo.scale-125.png b/public/windows11/Square150x150Logo.scale-125.png index 1f8406506..411f2bbc0 100644 Binary files a/public/windows11/Square150x150Logo.scale-125.png and b/public/windows11/Square150x150Logo.scale-125.png differ diff --git a/public/windows11/Square150x150Logo.scale-150.png b/public/windows11/Square150x150Logo.scale-150.png index a0cb293b6..c7da7c361 100644 Binary files a/public/windows11/Square150x150Logo.scale-150.png and b/public/windows11/Square150x150Logo.scale-150.png differ diff --git a/public/windows11/Square150x150Logo.scale-200.png b/public/windows11/Square150x150Logo.scale-200.png index 089d0c1bf..43b296f36 100644 Binary files a/public/windows11/Square150x150Logo.scale-200.png and b/public/windows11/Square150x150Logo.scale-200.png differ diff --git a/public/windows11/Square150x150Logo.scale-400.png b/public/windows11/Square150x150Logo.scale-400.png index 79d7131b2..d090b2793 100644 Binary files a/public/windows11/Square150x150Logo.scale-400.png and b/public/windows11/Square150x150Logo.scale-400.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png index 6c8b5ca79..c371648f7 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png index ad1a18567..c7fb9d520 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png index 3f3e70d24..2d45c6a9d 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png index e47923145..2958333d7 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png index 8239d1db7..2e5c907a3 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png index 0df3f299c..a0cc04741 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png index 980c662bc..1a7922ad5 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png index 2ff936100..14fb99913 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png index d292ca0f4..ba093a44e 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png index f3b94148e..a733cd0e7 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png index 788cbeb45..d5e0de9f0 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png index 37f606814..5bf33ab22 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png index 805107237..ccf4bfafb 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png index c6487cbd5..f20dcacaa 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png differ diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png index 27c7c364e..2575259cb 100644 Binary files a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png and b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-16.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-16.png index 6c8b5ca79..c371648f7 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-16.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-16.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-20.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-20.png index ad1a18567..c7fb9d520 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-20.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-20.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-24.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-24.png index 3f3e70d24..2d45c6a9d 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-24.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-24.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-256.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-256.png index e47923145..2958333d7 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-256.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-256.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-30.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-30.png index 8239d1db7..2e5c907a3 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-30.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-30.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-32.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-32.png index 0df3f299c..a0cc04741 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-32.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-32.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-36.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-36.png index 980c662bc..1a7922ad5 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-36.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-36.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-40.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-40.png index 2ff936100..14fb99913 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-40.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-40.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-44.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-44.png index d292ca0f4..ba093a44e 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-44.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-44.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-48.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-48.png index f3b94148e..a733cd0e7 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-48.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-48.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-60.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-60.png index 788cbeb45..d5e0de9f0 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-60.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-60.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-64.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-64.png index 37f606814..5bf33ab22 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-64.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-64.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-72.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-72.png index 805107237..ccf4bfafb 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-72.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-72.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-80.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-80.png index c6487cbd5..f20dcacaa 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-80.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-80.png differ diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-96.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-96.png index 27c7c364e..2575259cb 100644 Binary files a/public/windows11/Square44x44Logo.altform-unplated_targetsize-96.png and b/public/windows11/Square44x44Logo.altform-unplated_targetsize-96.png differ diff --git a/public/windows11/Square44x44Logo.scale-100.png b/public/windows11/Square44x44Logo.scale-100.png index d292ca0f4..ba093a44e 100644 Binary files a/public/windows11/Square44x44Logo.scale-100.png and b/public/windows11/Square44x44Logo.scale-100.png differ diff --git a/public/windows11/Square44x44Logo.scale-125.png b/public/windows11/Square44x44Logo.scale-125.png index a0966850a..d6bc1855d 100644 Binary files a/public/windows11/Square44x44Logo.scale-125.png and b/public/windows11/Square44x44Logo.scale-125.png differ diff --git a/public/windows11/Square44x44Logo.scale-150.png b/public/windows11/Square44x44Logo.scale-150.png index c60b8e13b..aa91722d8 100644 Binary files a/public/windows11/Square44x44Logo.scale-150.png and b/public/windows11/Square44x44Logo.scale-150.png differ diff --git a/public/windows11/Square44x44Logo.scale-200.png b/public/windows11/Square44x44Logo.scale-200.png index 224aec79a..3cadabfdf 100644 Binary files a/public/windows11/Square44x44Logo.scale-200.png and b/public/windows11/Square44x44Logo.scale-200.png differ diff --git a/public/windows11/Square44x44Logo.scale-400.png b/public/windows11/Square44x44Logo.scale-400.png index d507e3d1b..36f662363 100644 Binary files a/public/windows11/Square44x44Logo.scale-400.png and b/public/windows11/Square44x44Logo.scale-400.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-16.png b/public/windows11/Square44x44Logo.targetsize-16.png index 6c8b5ca79..c371648f7 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-16.png and b/public/windows11/Square44x44Logo.targetsize-16.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-20.png b/public/windows11/Square44x44Logo.targetsize-20.png index ad1a18567..c7fb9d520 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-20.png and b/public/windows11/Square44x44Logo.targetsize-20.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-24.png b/public/windows11/Square44x44Logo.targetsize-24.png index 3f3e70d24..2d45c6a9d 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-24.png and b/public/windows11/Square44x44Logo.targetsize-24.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-256.png b/public/windows11/Square44x44Logo.targetsize-256.png index e47923145..2958333d7 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-256.png and b/public/windows11/Square44x44Logo.targetsize-256.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-30.png b/public/windows11/Square44x44Logo.targetsize-30.png index 8239d1db7..2e5c907a3 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-30.png and b/public/windows11/Square44x44Logo.targetsize-30.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-32.png b/public/windows11/Square44x44Logo.targetsize-32.png index 0df3f299c..a0cc04741 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-32.png and b/public/windows11/Square44x44Logo.targetsize-32.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-36.png b/public/windows11/Square44x44Logo.targetsize-36.png index 980c662bc..1a7922ad5 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-36.png and b/public/windows11/Square44x44Logo.targetsize-36.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-40.png b/public/windows11/Square44x44Logo.targetsize-40.png index 2ff936100..14fb99913 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-40.png and b/public/windows11/Square44x44Logo.targetsize-40.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-44.png b/public/windows11/Square44x44Logo.targetsize-44.png index d292ca0f4..ba093a44e 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-44.png and b/public/windows11/Square44x44Logo.targetsize-44.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-48.png b/public/windows11/Square44x44Logo.targetsize-48.png index f3b94148e..a733cd0e7 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-48.png and b/public/windows11/Square44x44Logo.targetsize-48.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-60.png b/public/windows11/Square44x44Logo.targetsize-60.png index 788cbeb45..d5e0de9f0 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-60.png and b/public/windows11/Square44x44Logo.targetsize-60.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-64.png b/public/windows11/Square44x44Logo.targetsize-64.png index 37f606814..5bf33ab22 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-64.png and b/public/windows11/Square44x44Logo.targetsize-64.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-72.png b/public/windows11/Square44x44Logo.targetsize-72.png index 805107237..ccf4bfafb 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-72.png and b/public/windows11/Square44x44Logo.targetsize-72.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-80.png b/public/windows11/Square44x44Logo.targetsize-80.png index c6487cbd5..f20dcacaa 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-80.png and b/public/windows11/Square44x44Logo.targetsize-80.png differ diff --git a/public/windows11/Square44x44Logo.targetsize-96.png b/public/windows11/Square44x44Logo.targetsize-96.png index 27c7c364e..2575259cb 100644 Binary files a/public/windows11/Square44x44Logo.targetsize-96.png and b/public/windows11/Square44x44Logo.targetsize-96.png differ diff --git a/public/windows11/StoreLogo.scale-100.png b/public/windows11/StoreLogo.scale-100.png index 9421da3a5..e04186a6b 100644 Binary files a/public/windows11/StoreLogo.scale-100.png and b/public/windows11/StoreLogo.scale-100.png differ diff --git a/public/windows11/StoreLogo.scale-125.png b/public/windows11/StoreLogo.scale-125.png index 1e8c02797..fb7edbdfb 100644 Binary files a/public/windows11/StoreLogo.scale-125.png and b/public/windows11/StoreLogo.scale-125.png differ diff --git a/public/windows11/StoreLogo.scale-150.png b/public/windows11/StoreLogo.scale-150.png index e5fdd4a06..1478d6f76 100644 Binary files a/public/windows11/StoreLogo.scale-150.png and b/public/windows11/StoreLogo.scale-150.png differ diff --git a/public/windows11/StoreLogo.scale-200.png b/public/windows11/StoreLogo.scale-200.png index 0522f6824..bf44f8d93 100644 Binary files a/public/windows11/StoreLogo.scale-200.png and b/public/windows11/StoreLogo.scale-200.png differ diff --git a/public/windows11/StoreLogo.scale-400.png b/public/windows11/StoreLogo.scale-400.png index 5ed01f986..ef905ecfd 100644 Binary files a/public/windows11/StoreLogo.scale-400.png and b/public/windows11/StoreLogo.scale-400.png differ diff --git a/public/windows11/Wide310x150Logo.scale-100.png b/public/windows11/Wide310x150Logo.scale-100.png index 7166dfe0d..9d5cccace 100644 Binary files a/public/windows11/Wide310x150Logo.scale-100.png and b/public/windows11/Wide310x150Logo.scale-100.png differ diff --git a/public/windows11/Wide310x150Logo.scale-125.png b/public/windows11/Wide310x150Logo.scale-125.png index dec566ac5..109868a11 100644 Binary files a/public/windows11/Wide310x150Logo.scale-125.png and b/public/windows11/Wide310x150Logo.scale-125.png differ diff --git a/public/windows11/Wide310x150Logo.scale-150.png b/public/windows11/Wide310x150Logo.scale-150.png index 236dca6b1..94e9a81ee 100644 Binary files a/public/windows11/Wide310x150Logo.scale-150.png and b/public/windows11/Wide310x150Logo.scale-150.png differ diff --git a/public/windows11/Wide310x150Logo.scale-200.png b/public/windows11/Wide310x150Logo.scale-200.png index 316ad80a9..226cd44c2 100644 Binary files a/public/windows11/Wide310x150Logo.scale-200.png and b/public/windows11/Wide310x150Logo.scale-200.png differ diff --git a/public/windows11/Wide310x150Logo.scale-400.png b/public/windows11/Wide310x150Logo.scale-400.png index e07724ba2..004830904 100644 Binary files a/public/windows11/Wide310x150Logo.scale-400.png and b/public/windows11/Wide310x150Logo.scale-400.png differ diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh index 1c9bbddd1..5b3e85ce7 100755 --- a/rebuild-wekan.sh +++ b/rebuild-wekan.sh @@ -1,12 +1,14 @@ #!/bin/bash -echo "Recommended for development: Debian 12 amd64, directly to SSD disk or dual boot, not VM. Works fast." +echo "Recommended for development: Newest Ubuntu or Debian amd64, directly to SSD disk or dual boot, not VM. Works fast." echo "Note1: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8" echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly." echo " You can still use any other locale as your main locale." echo "Note2: Console output is also logged to ../wekan-log.txt" +#Below script installs newest node 8.x for Debian/Ubuntu/Mint. + function pause(){ read -p "$*" } @@ -95,12 +97,12 @@ do #cd .. #sudo chown -R $(id -u):$(id -g) $HOME/.npm $HOME/.meteor rm -rf .build/bundle node_modules .meteor/local .build - meteor npm install --production + meteor npm install meteor build .build --directory --platforms=web.browser rm -rf .build/bundle/programs/web.browser.legacy - (cd .build/bundle/programs/server && rm -rf node_modules && chmod u+w *.json && meteor npm install --production) + (cd .build/bundle/programs/server && rm -rf node_modules && chmod u+w *.json && meteor npm install) (cd .build/bundle/programs/server/node_modules/fibers && node build.js) - (cd .build/bundle/programs/server/npm/node_modules/meteor/accounts-password && meteor npm remove bcrypt && meteor npm install bcrypt --production) + (cd .build/bundle/programs/server/npm/node_modules/meteor/accounts-password && meteor npm remove bcrypt && meteor npm install bcrypt) # Cleanup cd .build/bundle find . -type d -name '*-garbage*' | xargs rm -rf diff --git a/releases/build-bundle-win64.bat b/releases/build-bundle-win64.bat index f7e0b1f93..14bafa67d 100755 --- a/releases/build-bundle-win64.bat +++ b/releases/build-bundle-win64.bat @@ -1,30 +1,26 @@ @ECHO OFF -REM 1) Install newest Node.js and NPM version manager https://github.com/nodists/nodist/releases -REM 2) nodist global 14.x -REM 3) nodist npm global 6. -REM 4) choco install -y 7zip curl wget git - IF [%1] == [] GOTO usage ECHO 1) Deleting old bundle CALL DEL /F /S /Q bundle ECHO 2) Downloading new WeKan.zip -DEL wekan-%1-amd64.zip -wget https://github.com/wekan/wekan/releases/download/v%1/wekan-%1-amd64.zip +CALL DEL wekan-%1-amd64.zip +CALL wget https://releases.wekan.team/wekan-%1-amd64.zip --no-check-certificate ECHO 3) Unarchiving new WeKan CALL 7z x wekan-%1-amd64.zip ECHO 4) Reinstalling bcrypt -cmd /c "npm -g install @mapbox/node-pre-gyp" -cmd /c "npm -g install node-gyp" -cmd /c "npm -g install fibers" +REM cmd /c "npm -g install @mapbox/node-pre-gyp" +REM cmd /c "npm -g install node-gyp" +REM cmd /c "npm -g install fibers" CALL DEL /F /S /Q bundle\programs\server\npm\node_modules\meteor\accounts-password\node_modules\bcrypt cmd /c "CD bundle\programs\server\npm\node_modules\meteor\accounts-password && npm install bcrypt" REM # Sometimes may require building from source https://github.com/meteor/meteor/issues/11682 -REM cmd /c "CD bundle\programs\server\npm\node_modules\meteor\accounts-password && npm rebuild --build-from-source && npm --build-from-source install bcrypt" +REM # cmd /c "bundle\programs\server\npm\node_modules\meteor\accounts-password && npm rebuild --build-from-source && npm --build-from-source install bcrypt" +REM # CD ..\..\..\..\..\..\.. ECHO 5) Packing new WeKan.zip CALL DEL wekan-%1-amd64-windows.zip diff --git a/releases/count-lines-of-code-per-committer.sh b/releases/count-lines-of-code-per-committer.sh deleted file mode 100755 index 0b429733f..000000000 --- a/releases/count-lines-of-code-per-committer.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# At 2024, GitHub removed feature of counting lines of code from -# https://github.com/wekan/wekan/graphs/contributors -# "Contributions to main, line counts have been omitted because commit count exceeds 10,000." -# -# This code counts lines of code per email address: -# https://github.com/orgs/community/discussions/89886#discussioncomment-8650093 - -if [ $# -ne 1 ] - then - echo "Syntax to count lines of code per committer, by email address:" - echo " ./releases/count-lines-of-code-per-committer.sh x@xet7.org" - echo "Example result at 2024-03-08:" - echo " added lines: 4594802, removed lines: 4416066, total lines: 178736, added:deleted ratio:1.04047" - exit 1 -fi - -git log --author=$1 --pretty=tformat: --numstat | awk '{ adds += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s, added:deleted ratio:%s\n", adds, subs, loc, adds/subs }' - - -# Related: Most active GitHub users in Finland: -# https://committers.top/finland.html -# at 2024-03-08, xet7 was 3rd. diff --git a/releases/docker-push-wekan.sh b/releases/docker-push-wekan.sh index 8efb3dfa8..f861c64a9 100755 --- a/releases/docker-push-wekan.sh +++ b/releases/docker-push-wekan.sh @@ -12,8 +12,7 @@ if [ $# -ne 2 ] exit 1 fi -#sudo apt -y install skopeo -#~/repos/wekan/releases/docker-registry-sync.sh +sudo apt -y install skopeo # Quay docker tag $1 quay.io/wekan/wekan:v$2 @@ -21,6 +20,7 @@ docker push quay.io/wekan/wekan:v$2 docker tag $1 quay.io/wekan/wekan:latest docker push quay.io/wekan/wekan:latest +~/repos/wekan/releases/docker-registry-sync.sh # Docker Hub docker tag $1 wekanteam/wekan:v$2 diff --git a/releases/docker-registry-sync.sh b/releases/docker-registry-sync.sh index e57344add..293c8a262 100755 --- a/releases/docker-registry-sync.sh +++ b/releases/docker-registry-sync.sh @@ -1,46 +1,35 @@ #!/bin/bash -#sudo apt -y install skopeo +sudo apt -y install skopeo # WeKan -#skopeo copy docker://ghcr.io/wekan/wekan docker://quay.io/wekan/wekan -#skopeo copy docker://ghcr.io/wekan/wekan docker://wekanteam/wekan - -# MongoDB -#skopeo copy docker://mongo docker://ghcr.io/wekan/mongo -#skopeo copy docker://mongo docker://quay.io/wekan/mongo - -# PostgreSQL -#skopeo copy docker://postgres docker://ghcr.io/wekan/postgres -#skopeo copy docker://postgres docker://quay.io/wekan/postgres - - -# Ubuntu -#skopeo copy docker://ubuntu docker://ghcr.io/wekan/ubuntu -#skopeo copy docker://ubuntu docker://quay.io/wekan/ubuntu - -#--------------------------------------------------------------- - -## OLD +skopeo copy docker://ghcr.io/wekan/wekan docker://quay.io/wekan/wekan +skopeo copy docker://ghcr.io/wekan/wekan docker://wekanteam/wekan # Wekan Gantt GPL -#skopeo copy docker://ghcr.io/wekan/wekan-gantt-gpl docker://quay.io/wekan/wekan-gantt-gpl -#skopeo copy docker://ghcr.io/wekan/wekan-gantt-gpl docker://wekanteam/wekan-gantt-gpl +skopeo copy docker://ghcr.io/wekan/wekan-gantt-gpl docker://quay.io/wekan/wekan-gantt-gpl +skopeo copy docker://ghcr.io/wekan/wekan-gantt-gpl docker://wekanteam/wekan-gantt-gpl -#--------------------------------------------------------------- +# MongoDB +skopeo copy docker://mongo docker://ghcr.io/wekan/mongo +skopeo copy docker://mongo docker://quay.io/wekan/mongo -## Auth errors, no permission to copy from Docker Hub to other Docker registry -## to have a backup, in case some Docker registry not available. +# PostgreSQL +skopeo copy docker://postgres docker://ghcr.io/wekan/postgres +skopeo copy docker://postgres docker://quay.io/wekan/postgres # MariaDB -#skopeo copy docker://mariadb docker://ghcr.io/wekan/mariadb -#skopeo copy docker://mariadb docker://quay.io/wekan/mariadb -# +skopeo copy docker://mariadb docker://ghcr.io/wekan/mariadb +skopeo copy docker://mariadb docker://quay.io/wekan/mariadb + +# Ubuntu +skopeo copy docker://ubuntu docker://ghcr.io/wekan/ubuntu +skopeo copy docker://ubuntu docker://quay.io/wekan/ubuntu + # Debian -#skopeo copy docker://debian docker://ghcr.io/wekan/debian -#skopeo copy docker://debian docker://quay.io/wekan/debian -# +skopeo copy docker://debian docker://ghcr.io/wekan/debian +skopeo copy docker://debian docker://quay.io/wekan/debian + # Alpine -#skopeo copy docker://alpine docker://ghcr.io/wekan/alpine -#skopeo copy docker://alpine docker://quay.io/wekan/alpine -# +skopeo copy docker://alpine docker://ghcr.io/wekan/alpine +skopeo copy docker://alpine docker://quay.io/wekan/alpine diff --git a/releases/rebuild-docs.sh b/releases/rebuild-docs.sh index 5121a66e1..273422723 100755 --- a/releases/rebuild-docs.sh +++ b/releases/rebuild-docs.sh @@ -15,8 +15,7 @@ fi if [ ! -d ~/python/esprima-python ]; then sudo apt-get -y install python3-pip python3-swagger-spec-validator python3-wheel python3-setuptools - # Install older version of api2html that works with Node.js 14 - sudo npm install -g api2html@0.3.0 || sudo npm install -g swagger-ui-watcher + sudo npm install -g api2html (mkdir -p ~/python && cd ~/python && git clone --depth 1 -b master https://github.com/Kronuz/esprima-python) (cd ~/python/esprima-python && git fetch origin pull/20/head:delete_fix && git checkout delete_fix && sudo python3 setup.py install --record files.txt) #(cd ~/python/esprima-python && git fetch origin pull/20/head:delete_fix && git checkout delete_fix && sudo pip3 install .) @@ -39,11 +38,10 @@ if [ ! -d public/api ]; then mkdir -p public/api fi -# 4) Generate docs with api2html or fallback to swagger-ui-watcher +# 4) Generate docs. +#python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml python3 ./openapi/generate_openapi.py --release v$1 > ./public/api/wekan.yml -if ! api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; then - swagger-ui-watcher ./public/api/wekan.yml -p 8080 -fi +api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml # Copy docs to bundle #cp -pR ./public/api ~/repos/wekan/.build/bundle/programs/web.browser/app/ diff --git a/releases/release-bundle.sh b/releases/release-bundle.sh index e33c1f2cd..f791eaf9d 100755 --- a/releases/release-bundle.sh +++ b/releases/release-bundle.sh @@ -1,23 +1,21 @@ cd ~/repos/wekan -#sudo apt-get -y install parallel +sudo apt-get -y install parallel ./releases/rebuild-release.sh #./releases/delete-phantomjs.sh cd ~/repos/wekan/.build zip -r wekan-$1-amd64.zip bundle -#{ - #scp ~/repos/wekan/releases/build-bundle-arm64.sh a:/home/wekan/ - #scp ~/repos/wekan/releases/build-bundle-s390x.sh s:/home/linux1/ +{ + scp ~/repos/wekan/releases/build-bundle-arm64.sh a:/home/wekan/ + scp ~/repos/wekan/releases/build-bundle-s390x.sh s:/home/linux1/ #scp ~/repos/wekan/releases/build-bundle-ppc64el.sh o:/home/ubuntu/ - #scp ~/repos/wekan/releases/release-x2.sh 20i:/data/websites/ - #scp wekan-$1-amd64.zip 20i:/data/websites/releases.wekan.team/ - #scp wekan-$1-amd64.zip a:/home/wekan/ - #scp wekan-$1-amd64.zip s:/home/linux1/ + scp ~/repos/wekan/releases/release-x2.sh x2:/data/websites/ + scp wekan-$1-amd64.zip x2:/data/websites/releases.wekan.team/ + scp wekan-$1-amd64.zip a:/home/wekan/ + scp wekan-$1-amd64.zip s:/home/linux1/ #scp wekan-$1.zip o:/home/ubuntu/ -#} | parallel -k +} | parallel -k cd .. -#echo "x64 bundle and arm64/s390x build scripts uploaded to x2/a/s." -#echo "x64 bundle and build script uploaded to 20i." -echo "x64 bundle done." +echo "x64 bundle and arm64/s390x build scripts uploaded to x2/a/s." diff --git a/releases/release-website.sh b/releases/release-website.sh index ba4420a0b..f738c6489 100755 --- a/releases/release-website.sh +++ b/releases/release-website.sh @@ -20,7 +20,7 @@ cd ~/repos/w/wekan.github.io git pull # 4) Change version number in website -sed -i "s|>v$1<\/span>|>v$2<\/span>|g" install/index.html +sed -i "s|>v$1<\/span>|>v$2<\/span>|g" index.html # 5) Change version number in API docs index page cd api diff --git a/releases/sed-snapcraft-version.sh b/releases/sed-snapcraft-version.sh deleted file mode 100755 index 07b8ffc0d..000000000 --- a/releases/sed-snapcraft-version.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -# Update WeKan version at snapcraft.yaml - -# 1) Check that there is 2 parameters -# of Wekan version number: - -if [ $# -ne 2 ] - then - echo "Syntax with Wekan version number:" - echo " ./releases/sed-snapcraft-version.sh 7.10 7.11" - exit 1 -fi - -sed -i 's|$1|$2|g' snapcraft.yaml diff --git a/releases/virtualbox/start-wekan.sh b/releases/virtualbox/start-wekan.sh index bc0acda19..1763b3c1b 100755 --- a/releases/virtualbox/start-wekan.sh +++ b/releases/virtualbox/start-wekan.sh @@ -154,8 +154,6 @@ #export OAUTH2_ENABLED=true # Use OAuth2 ADFS additional changes. Also needs OAUTH2_ENABLED=true setting. #export OAUTH2_ADFS_ENABLED=false - # Azure AD B2C. https://github.com/wekan/wekan/issues/5242 - #- OAUTH2_B2C_ENABLED=false # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 # OAuth2 login style: popup or redirect. #export OAUTH2_LOGIN_STYLE=redirect @@ -411,7 +409,6 @@ #export WAIT_SPINNER=Bounce #--------------------------------------------------------------------- - # node --stack-size=65500 --max-old-space-size=8192 main.js & >> ~/repos/wekan.log node main.js & >> ~/repos/wekan.log cd ~/repos #done diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index e94fe5d03..841c5f1b2 100644 --- a/sandstorm-pkgdef.capnp +++ b/sandstorm-pkgdef.capnp @@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = ( appTitle = (defaultText = "Wekan"), # The name of the app as it is displayed to the user. - appVersion = 784, + appVersion = 719, # Increment this for every release. - appMarketingVersion = (defaultText = "7.84.0~2025-03-23"), + appMarketingVersion = (defaultText = "7.19.0~2023-11-20"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, @@ -258,7 +258,6 @@ const myCommand :Spk.Manifest.Command = ( (key = "OAUTH2_ENABLED", value="false"), (key = "OAUTH2_CA_CERT", value=""), (key = "OAUTH2_ADFS_ENABLED", value="false"), - (key = "OAUTH2_B2C_ENABLED", value="false"), (key = "OAUTH2_CLIENT_ID", value="false"), (key = "OAUTH2_SECRET", value=""), (key = "OAUTH2_SERVER_URL", value=""), diff --git a/server/authentication.js b/server/authentication.js index 474de6e25..653840a54 100644 --- a/server/authentication.js +++ b/server/authentication.js @@ -52,11 +52,14 @@ Meteor.startup(() => { } }; - // Helper function. Will throw an error if the user is not active BoardAdmin or active Normal user of the board. + // Helper function. Will throw an error if the user does not have read only access to the given board Authentication.checkBoardAccess = function(userId, boardId) { Authentication.checkLoggedIn(userId); + const board = ReactiveCache.getBoard(boardId); - const normalAccess = board.members.some(e => e.userId === userId && e.isActive && !e.isNoComments && !e.isCommentOnly && !e.isWorker); + const normalAccess = + board.permission === 'public' || + board.members.some(e => e.userId === userId && e.isActive); Authentication.checkAdminOrCondition(userId, normalAccess); }; @@ -126,7 +129,7 @@ Meteor.startup(() => { validateUrl: process.env.CASE_VALIDATE_URL, casVersion: 3.0, attributes: { - debug: process.env.DEBUG === 'true', + debug: process.env.DEBUG, }, }, }, diff --git a/server/migrations.js b/server/migrations.js index 2930d6fa7..6fcee54e5 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -169,8 +169,6 @@ Migrations.add('use-css-class-for-boards-colors', () => { '#2A80B8': 'modern', '#2a2a2a': 'moderndark', '#222222': 'exodark', - '#0A0A14': 'cleandark', - '#FFFFFF': 'cleanlight', }; Boards.find().forEach(board => { const oldBoardColor = board.background.color; @@ -1443,49 +1441,3 @@ Migrations.add('attachment-cardCopy-fix-boardId-etc', () => { }); }); */ - -Migrations.add('remove-unused-planning-poker', () => { - Cards.update( - { - "poker.question": false, - }, - { - $unset: { - "poker": 1, - }, - }, - noValidateMulti, - ); -}); - -Migrations.add('remove-user-profile-hiddenSystemMessages', () => { - Users.update( - { - "profile.hiddenSystemMessages": { - $exists: true, - }, - }, - { - $unset: { - "profile.hiddenSystemMessages": 1, - }, - }, - noValidateMulti, - ); -}); - -Migrations.add('remove-user-profile-hideCheckedItems', () => { - Users.update( - { - "profile.hideCheckedItems": { - $exists: true, - }, - }, - { - $unset: { - "profile.hideCheckedItems": 1, - }, - }, - noValidateMulti, - ); -}); diff --git a/server/publications/activities.js b/server/publications/activities.js index fe1456e3a..8e1f90aec 100644 --- a/server/publications/activities.js +++ b/server/publications/activities.js @@ -5,7 +5,7 @@ import { ReactiveCache } from '/imports/reactiveCache'; // 2. The card activity tab // We use this publication to paginate for these two publications. -Meteor.publish('activities', (kind, id, limit, showActivities) => { +Meteor.publish('activities', (kind, id, limit, hideSystem) => { check( kind, Match.Where(x => { @@ -14,7 +14,7 @@ Meteor.publish('activities', (kind, id, limit, showActivities) => { ); check(id, String); check(limit, Number); - check(showActivities, Boolean); + check(hideSystem, Boolean); // Get linkedBoard let linkedElmtId = [id]; @@ -27,9 +27,12 @@ Meteor.publish('activities', (kind, id, limit, showActivities) => { }); } - const selector = showActivities - ? { [`${kind}Id`]: { $in: linkedElmtId } } - : { $and: [{ activityType: 'addComment' }, { [`${kind}Id`]: { $in: linkedElmtId } }] }; + //const selector = hideSystem + // ? { $and: [{ activityType: 'addComment' }, { [`${kind}Id`]: id }] } + // : { [`${kind}Id`]: id }; + const selector = hideSystem + ? { $and: [{ activityType: 'addComment' }, { [`${kind}Id`]: { $in: linkedElmtId } }] } + : { [`${kind}Id`]: { $in: linkedElmtId } }; const ret = ReactiveCache.getActivities(selector, { limit, diff --git a/server/publications/settings.js b/server/publications/settings.js index e2365d523..28afeea09 100644 --- a/server/publications/settings.js +++ b/server/publications/settings.js @@ -38,9 +38,6 @@ Meteor.publish('setting', () => { oidcBtnText: 1, mailDomainName: 1, legalNotice: 1, - accessibilityPageEnabled: 1, - accessibilityTitle: 1, - accessibilityContent: 1, }, }, ); diff --git a/snap-src/bin/config b/snap-src/bin/config index 3265f3aa0..77e71afca 100755 --- a/snap-src/bin/config +++ b/snap-src/bin/config @@ -3,7 +3,7 @@ # All supported keys are defined here together with descriptions and default values # list of supported keys -keys="DEBUG S3 MONGO_LOG_DESTINATION MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM MAIL_SERVICE MAIL_SERVICE_USER MAIL_SERVICE_PASSWORD ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM ATTACHMENTS_UPLOAD_MIME_TYPES ATTACHMENTS_UPLOAD_MAX_SIZE AVATARS_UPLOAD_EXTERNAL_PROGRAM AVATARS_UPLOAD_MIME_TYPES AVATARS_UPLOAD_MAX_SIZE MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY DEFAULT_BOARD_ID EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME METRICS_ALLOWED_IP_ADDRESSES BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OIDC_REDIRECTION_ENABLED OAUTH2_CA_CERT OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS OAUTH2_ADFS_ENABLED OAUTH2_B2C_ENABLED LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_AD_SIMPLE_AUTH LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD PASSWORD_LOGIN_ENABLED CAS_ENABLED CAS_BASE_URL CAS_LOGIN_URL CAS_VALIDATE_URL SAML_ENABLED SAML_PROVIDER SAML_ENTRYPOINT SAML_ISSUER SAML_CERT SAML_IDPSLO_REDIRECTURL SAML_PRIVATE_KEYFILE SAML_PUBLIC_CERTFILE SAML_IDENTIFIER_FORMAT SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE SAML_ATTRIBUTES ORACLE_OIM_ENABLED RESULTS_PER_PAGE WAIT_SPINNER NODE_OPTIONS" +keys="DEBUG S3 MONGO_LOG_DESTINATION MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM MAIL_SERVICE MAIL_SERVICE_USER MAIL_SERVICE_PASSWORD ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS ATTACHMENTS_UPLOAD_EXTERNAL_PROGRAM ATTACHMENTS_UPLOAD_MIME_TYPES ATTACHMENTS_UPLOAD_MAX_SIZE AVATARS_UPLOAD_EXTERNAL_PROGRAM AVATARS_UPLOAD_MIME_TYPES AVATARS_UPLOAD_MAX_SIZE MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY DEFAULT_BOARD_ID EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME METRICS_ALLOWED_IP_ADDRESSES BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OIDC_REDIRECTION_ENABLED OAUTH2_CA_CERT OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS OAUTH2_ADFS_ENABLED LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_AD_SIMPLE_AUTH LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD PASSWORD_LOGIN_ENABLED CAS_ENABLED CAS_BASE_URL CAS_LOGIN_URL CAS_VALIDATE_URL SAML_ENABLED SAML_PROVIDER SAML_ENTRYPOINT SAML_ISSUER SAML_CERT SAML_IDPSLO_REDIRECTURL SAML_PRIVATE_KEYFILE SAML_PUBLIC_CERTFILE SAML_IDENTIFIER_FORMAT SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE SAML_ATTRIBUTES ORACLE_OIM_ENABLED RESULTS_PER_PAGE WAIT_SPINNER NODE_OPTIONS" DESCRIPTION_S3='AWS S3 for files. Example: {"s3":{"key": "xxx", "secret": "xxx", "bucket": "xxx", "region": "eu-west-1"}}' DEFAULT_S3="" @@ -267,10 +267,6 @@ DESCRIPTION_OAUTH2_ADFS_ENABLED="Enable OAuth2 ADFS. Default: false" DEFAULT_OAUTH2_ADFS_ENABLED="false" KEY_OAUTH2_ADFS_ENABLED="oauth2-adfs-enabled" -DESCRIPTION_OAUTH2_B2C_ENABLED="Enable OAuth2 Azure AD B2C https://github.com/wekan/wekan/issues/5242. Default: false" -DEFAULT_OAUTH2_B2C_ENABLED="false" -KEY_OAUTH2_B2C_ENABLED="oauth2-b2c-enabled" - DESCRIPTION_OAUTH2_LOGIN_STYLE="OAuth2 login style: popup or redirect. Default: redirect" DEFAULT_OAUTH2_LOGIN_STYLE="redirect" KEY_OAUTH2_LOGIN_STYLE="oauth2-login-style" diff --git a/snap-src/bin/mongodb-backup b/snap-src/bin/mongodb-backup index 210375e17..3e0e652ea 100755 --- a/snap-src/bin/mongodb-backup +++ b/snap-src/bin/mongodb-backup @@ -9,8 +9,7 @@ if [ -z "$LANG" ]; then fi export LC_ALL=C -export PATH=/snap/${SNAP_NAME}/current/usr/bin:/snap/${SNAP_NAME}/current/bin:$PATH -export LD_LIBRARY_PATH=/snap/${SNAP_NAME}/current/lib:/snap/${SNAP_NAME}/current/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu if [ -z $1 ]; then DATE=`/bin/date +%Y%m%dT%H%M%S` diff --git a/snap-src/bin/mongodb-control b/snap-src/bin/mongodb-control index 88c8258ba..d4ecdea65 100755 --- a/snap-src/bin/mongodb-control +++ b/snap-src/bin/mongodb-control @@ -10,65 +10,59 @@ if [ "true" == "${DISABLE_MONGODB}" ]; then fi # make sure we have set minimum env variables for locale -if [ -z "${LANG}" ]; then +if [ -z "$LANG" ]; then export LANG=en_US.UTF-8 fi export LC_ALL=C -export PATH=/snap/${SNAP_NAME}/current/usr/bin:/snap/${SNAP_NAME}/current/bin:${PATH} -export LD_LIBRARY_PATH=/snap/${SNAP_NAME}/current/lib:/snap/${SNAP_NAME}/current/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH} +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/${SNAP_NAME}/current/lib/x86_64-linux-gnu -# If temporary settings log exists, delete it -if [ -f ${SNAP_COMMON}/settings.log ]; then - rm ${SNAP_COMMON}/settings.log +if test -f "$SNAP_COMMON/01-migrate-mongo3-to-mongo5.txt"; then + touch "$SNAP_COMMON/01-migrate-mongo3-to-mongo5.txt" + # Stop MongoDB + touch "$SNAP_COMMON/02-disable-mongo.txt" + snapctl stop --disable ${SNAP_NAME}.mongodb + touch "$SNAP_COMMON/03-eval-stop-mongo.txt" + mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS + # Start MongoDB 4.4 + touch "$SNAP_COMMON/04-start-mongo44.txt" + $SNAP/mongo44bin/mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/02_mongodb_log_while_migrate.txt --logappend --journal $MONGO_URL --quiet + # Wait MongoDB 4.4 to start + touch "$SNAP_COMMON/05-wait-2s-mongo44-start.txt" + sleep 2s + # Dump Old MongoDB 3.x database + touch "$SNAP_COMMON/06-dump-database.txt" + (cd $SNAP_COMMON && mongodump --port ${MONGODB_PORT}) + # Stop MongoDB 4.4 + touch "$SNAP_COMMON/07-stop-mongo44.txt" + $SNAP/mongo44bin/mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS + # Wait MongoDB 4.4 to stop + touch "$SNAP_COMMON/08-wait-2s-mongo44-stop.txt" + sleep 2s + # Start MongoDB 5 + touch "$SNAP_COMMON/09-start-mongo5.txt" + mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/10_mongodb_log_while_migrate.txt --logappend --journal $MONGO_URL --quiet + # Restore database + touch "$SNAP_COMMON/11-mongorestore-to-mongo5.txt" + (cd $SNAP_COMMON && mongorestore --port ${MONGODB_PORT}) + # Wait 5s + touch "$SNAP_COMMON/12-wait-5s-after-restore.txt" + sleep 5s + # Shutdown mongodb + touch "$SNAP_COMMON/13-shutdown-mongodb.txt" + mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS + touch "$SNAP_COMMON/14-wait-5s-after-mongo5-shutdown.txt" + sleep 5s + # Enable MongoDB 5 + touch "$SNAP_COMMON/15-enable-mongo-5.txt" + snapctl start --enable ${SNAP_NAME}.mongodb fi - -#if test -f "$SNAP_COMMON/01-migrate-mongo3-to-mongo5.txt"; then -# touch "$SNAP_COMMON/01-migrate-mongo3-to-mongo5.txt" -# # Stop MongoDB -# touch "$SNAP_COMMON/02-disable-mongo.txt" -# snapctl stop --disable ${SNAP_NAME}.mongodb -# touch "$SNAP_COMMON/03-eval-stop-mongo.txt" -# mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS -# # Start MongoDB 4.4 -# touch "$SNAP_COMMON/04-start-mongo44.txt" -# $SNAP/mongo44bin/mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/02_mongodb_log_while_migrate.txt --logappend --journal $MONGO_URL --quiet -# # Wait MongoDB 4.4 to start -# touch "$SNAP_COMMON/05-wait-2s-mongo44-start.txt" -# sleep 2s -# # Dump Old MongoDB 3.x database -# touch "$SNAP_COMMON/06-dump-database.txt" -# (cd $SNAP_COMMON && mongodump --port ${MONGODB_PORT}) -# # Stop MongoDB 4.4 -# touch "$SNAP_COMMON/07-stop-mongo44.txt" -# $SNAP/mongo44bin/mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS -# # Wait MongoDB 4.4 to stop -# touch "$SNAP_COMMON/08-wait-2s-mongo44-stop.txt" -# sleep 2s -# # Start MongoDB 5 -# touch "$SNAP_COMMON/09-start-mongo5.txt" -# mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/10_mongodb_log_while_migrate.txt --logappend --journal $MONGO_URL --quiet -# # Restore database -# touch "$SNAP_COMMON/11-mongorestore-to-mongo5.txt" -# (cd $SNAP_COMMON && mongorestore --port ${MONGODB_PORT}) -# # Wait 5s -# touch "$SNAP_COMMON/12-wait-5s-after-restore.txt" -# sleep 5s -# # Shutdown mongodb -# touch "$SNAP_COMMON/13-shutdown-mongodb.txt" -# mongo wekan --eval "db.getSiblingDB('admin').shutdownServer()" $BIND_OPTIONS -# touch "$SNAP_COMMON/14-wait-5s-after-mongo5-shutdown.txt" -# sleep 5s -# # Enable MongoDB 5 -# touch "$SNAP_COMMON/15-enable-mongo-5.txt" -# snapctl start --enable ${SNAP_NAME}.mongodb -#fi # When starting MongoDB, if logfile exist, delete it, because now uses syslog instead of logfile, # because syslog usually already has log rotation. # https://github.com/wekan/wekan-snap/issues/92 -#if test -f "$SNAP_COMMON/mongodb.log"; then -# rm -f "$SNAP_COMMON/mongodb.log" -#fi +if test -f "$SNAP_COMMON/mongodb.log"; then + rm -f "$SNAP_COMMON/mongodb.log" +fi # Alternative: When starting MongoDB, and using logfile, truncate log to last 1000 lines of text. # 1) If file exists: @@ -81,87 +75,78 @@ fi # loglast1000lines="" #fi -if [ -z "${MONGO_URL}" ]; then +if [ -z "$MONGO_URL" ]; then + + # Disable MongoDB telemetry and free monitoring + mongo --eval "disableTelemetry()" + mongo --eval "db.disableFreeMonitoring()" + # Snap: Disable apparmor="DENIED" at syslog + # https://github.com/wekan/wekan/issues/4855 + mongo wekan --eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' $BIND_OPTIONS # start mongo deamon BIND_OPTIONS="" - if [ "nill" != "${MONGODB_BIND_UNIX_SOCKET}" ] && [ "x" != "x${MONGODB_BIND_UNIX_SOCKET}" ]; then - BIND_OPTIONS+=" --unixSocketPrefix ${MONGODB_BIND_UNIX_SOCKET}" + if [ "nill" != "$MONGODB_BIND_UNIX_SOCKET" ] && [ "x" != "x${MONGODB_BIND_UNIX_SOCKET}" ]; then + BIND_OPTIONS+=" --unixSocketPrefix $MONGODB_BIND_UNIX_SOCKET" fi - # Newest MongoDB uses --host or --bind_ip if [ "x" != "x${MONGODB_BIND_IP}" ]; then BIND_OPTIONS+=" --bind_ip $MONGODB_BIND_IP" fi if [ "x" != "x${MONGODB_PORT}" ]; then - BIND_OPTIONS+=" --port ${MONGODB_PORT}" + BIND_OPTIONS+=" --port $MONGODB_PORT" fi + echo "mongodb bind options: $BIND_OPTIONS" if [ "syslog" == "${MONGO_LOG_DESTINATION}" ]; then echo "Sending mongodb logs to syslog" - mongod --dbpath ${SNAP_COMMON} --syslog --journal ${BIND_OPTIONS} --quiet + mongod --dbpath $SNAP_COMMON --syslog --journal $BIND_OPTIONS --quiet exit 0 fi if [ "snapcommon" == "${MONGO_LOG_DESTINATION}" ]; then echo "Sending mongodb logs to $SNAP_COMMON" - mongod --dbpath ${SNAP_COMMON} --logpath ${SNAP_COMMON}/mongodb.log --logappend --journal ${BIND_OPTIONS} --quiet + mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $BIND_OPTIONS --quiet fi if [ "devnull" == "${MONGO_LOG_DESTINATION}" ]; then echo "Sending mongodb logs to /dev/null" - mongod --dbpath ${SNAP_COMMON} --logpath /dev/null --journal ${BIND_OPTIONS} --quiet + mongod --dbpath $SNAP_COMMON --logpath /dev/null --journal $BIND_OPTIONS --quiet fi - #echo "mongodb log destination: ${MONGO_LOG_DESTINATION}" >> "${SNAP_COMMON}/settings.log" - - # Disable MongoDB telemetry and free monitoring - /snap/${SNAP_NAME}/current/usr/bin/mongosh wekan --eval 'disableTelemetry();' --port ${MONGODB_PORT} - /snap/${SNAP_NAME}/current/usr/bin/mongosh wekan --eval 'db.disableFreeMonitoring();' --port ${MONGODB_PORT} - - # Snap: Disable apparmor="DENIED" at syslog - # https://github.com/wekan/wekan/issues/4855 - /snap/${SNAP_NAME}/current/usr/bin/mongosh wekan --eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' --port ${MONGODB_PORT} # Drop indexes on database upgrade, when starting MongoDB - #mongosh wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $BIND_OPTIONS - - # Set MongoDB feature compatibility version - #mongosh wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.4" });' ${BIND_OPTIONS} - + #mongo wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $BIND_OPTIONS + mongo wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.4" });' $BIND_OPTIONS # Delete incomplete uploads so that they would not prevent starting WeKan - /snap/${SNAP_NAME}/current/usr/bin/mongosh wekan --eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' --port ${MONGODB_PORT} + mongo wekan --eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' $BIND_OPTIONS else + # Disable MongoDB telemetry and free monitoring + mongo --eval "disableTelemetry()" + mongo --eval "db.disableFreeMonitoring()" + # Snap: Disable apparmor="DENIED" at syslog + # https://github.com/wekan/wekan/issues/4855 + mongo wekan --eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' $BIND_OPTIONS + if [ "syslog" == "${MONGO_LOG_DESTINATION}" ]; then echo "Sending mongodb logs to syslog" - mongod --dbpath ${SNAP_COMMON} --syslog --journal ${MONGO_URL} --quiet + mongod --dbpath $SNAP_COMMON --syslog --journal $MONGO_URL --quiet fi if [ "snapcommon" == "${MONGO_LOG_DESTINATION}" ]; then - echo "Sending mongodb logs to ${SNAP_COMMON}" - mongod --dbpath ${SNAP_COMMON} --logpath ${SNAP_COMMON}/mongodb.log --logappend --journal ${MONGO_URL} --quiet + echo "Sending mongodb logs to $SNAP_COMMON" + mongod --dbpath $SNAP_COMMON --logpath $SNAP_COMMON/mongodb.log --logappend --journal $MONGO_URL --quiet fi if [ "devnull" == "${MONGO_LOG_DESTINATION}" ]; then echo "Sending mongodb logs to /dev/null" - mongod --dbpath ${SNAP_COMMON} --logpath /dev/null --journal ${MONGO_URL} --quiet + mongod --dbpath $SNAP_COMMON --logpath /dev/null --journal $MONGO_URL --quiet fi - # Disable MongoDB telemetry and free monitoring - /snap/${SNAP_NAME}/current/usr/bin/mongosh ${MONGO_URL} --eval 'disableTelemetry();' - /snap/${SNAP_NAME}/current/usr/bin/mongosh ${MONGO_URL} --eval 'db.disableFreeMonitoring();' - - # Snap: Disable apparmor="DENIED" at syslog - # https://github.com/wekan/wekan/issues/4855 - /snap/${SNAP_NAME}/current/usr/bin/mongosh ${MONGO_URL} --eval 'db.adminCommand({ setParameter: 1, diagnosticDataCollectionEnabled: false});' - # Drop indexes on database upgrade, when starting MongoDB - #mongosh wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $BIND_OPTIONS - - # Set MongoDB feature compatibility version - #/snap/${SNAP_NAME}/current/usr/bin/mongosh ${MONGO_URL} --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.4" });' - - # Delete incomplete uploads so that they would not prevent starting WeKan - /snap/${SNAP_NAME}/current/usr/bin/mongosh ${MONGO_URL} --eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' + #mongo wekan --eval "db.getCollectionNames().forEach(function(col_name) { var coll = db.getCollection(col_name); coll.dropIndexes(); });" $BIND_OPTIONS + mongo wekan --eval 'db.adminCommand({ setFeatureCompatibilityVersion: "4.2" });' $BIND_OPTIONS + # Delete incomplete uploads so that they would not prevent starting WeKan + mongo wekan --eval 'db.getCollection("cfs.attachments.filerecord").find( { "uploadedAt": { "$exists": true }, "copies.attachments" : null,"failures.copies.attachments.doneTrying" : {"$ne" : true}});' $BIND_OPTIONS fi diff --git a/snap-src/bin/mongodb-restore b/snap-src/bin/mongodb-restore index d03ee19e1..e1570a48b 100755 --- a/snap-src/bin/mongodb-restore +++ b/snap-src/bin/mongodb-restore @@ -9,8 +9,7 @@ if [ -z "$LANG" ]; then fi export LC_ALL=C -export PATH=/snap/${SNAP_NAME}/current/usr/bin:/snap/${SNAP_NAME}/current/bin:$PATH -export LD_LIBRARY_PATH=/snap/${SNAP_NAME}/current/lib:/snap/${SNAP_NAME}/current/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu # start mongodb backup [ "x" == "x${MONGODB_BIND_IP}" ] && MONGODB_BIND_IP="127.0.0.1" diff --git a/snap-src/bin/wekan-control b/snap-src/bin/wekan-control index 0962fc4e3..e4260851d 100755 --- a/snap-src/bin/wekan-control +++ b/snap-src/bin/wekan-control @@ -36,5 +36,4 @@ cd $APPLICATION_DIRECTORY # bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js" #--------------------------------------------------------------------- #bash -c "ulimit -s 65500; exec $NODE_PATH/node --stack-size=65500 $APPLICATION_START" -#bash -c "ulimit -s 65500; exec $NODE_PATH/node --stack-size=65500 --max-old-space-size=8192 $APPLICATION_START" bash -c "ulimit -s 65500; exec $NODE_PATH/node $APPLICATION_START" diff --git a/snap-src/bin/wekan-help b/snap-src/bin/wekan-help index 32365cf28..4a74d15e5 100755 --- a/snap-src/bin/wekan-help +++ b/snap-src/bin/wekan-help @@ -310,12 +310,6 @@ echo -e "\t$ snap set $SNAP_NAME oauth2-adfs-enabled='true'" echo -e "\t-Disable the OAuth2 ADFS of Wekan:" echo -e "\t$ snap unset $SNAP_NAME oauth2-adfs-enabled" echo -e "\n" -echo -e "OAuth2 Azure AD B2C Enabled. Also requires oauth2-enabled='true' . https://github.com/wekan/wekan/issues/5242." -echo -e "To enable the OAuth2 Azure AD B2C of Wekan:" -echo -e "\t$ snap set $SNAP_NAME oauth2-b2c-enabled='true'" -echo -e "\t-Disable the OAuth2 Azure AD B2C of Wekan:" -echo -e "\t$ snap unset $SNAP_NAME oauth2-b2c-enabled" -echo -e "\n" echo -e "OAuth2 Client ID." echo -e "To enable the OAuth2 Client ID of Wekan:" echo -e "\t$ snap set $SNAP_NAME oauth2-client-id='54321abcde'" diff --git a/snap/gui/icon.png b/snap/gui/icon.png index 8e2e024b4..1382e2565 100644 Binary files a/snap/gui/icon.png and b/snap/gui/icon.png differ diff --git a/snapcraft.yaml b/snapcraft.yaml index d61c73bb0..9c56e1149 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -1,5 +1,5 @@ name: wekan -version: '7.84' +version: '7.19' base: core20 summary: Open Source kanban description: | @@ -65,7 +65,7 @@ apps: parts: mongodb: - source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.20.tgz + source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.11.tgz plugin: dump stage-packages: - libssl1.1 @@ -90,13 +90,13 @@ parts: prime: - $mongo - mongosh: - source: https://downloads.mongodb.com/compass/mongodb-mongosh_2.1.1_amd64.deb - plugin: dump +# mongosh: +# source: https://downloads.mongodb.com/compass/mongodb-mongosh_1.6.2_amd64.deb +# plugin: dump - mongotools: - source: https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2004-x86_64-100.9.4.tgz - plugin: dump +# mongotools: +# source: https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2004-x86_64-100.6.1.tgz +# plugin: dump # mongodb44: # source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-4.4.18.tgz @@ -170,9 +170,9 @@ parts: # Cleanup mkdir .build cd .build - wget https://github.com/wekan/wekan/releases/download/v7.84/wekan-7.84-amd64.zip - unzip wekan-7.84-amd64.zip - rm wekan-7.84-amd64.zip + wget https://github.com/wekan/wekan/releases/download/v7.19/wekan-7.19-amd64.zip + unzip wekan-7.19-amd64.zip + rm wekan-7.19-amd64.zip cd .. ##cd .build/bundle ##find . -type d -name '*-garbage*' | xargs rm -rf @@ -196,13 +196,6 @@ parts: cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/ cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/ rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan - # Migrate MongoDB 3 to 6 - wget https://github.com/wekan/migratemongo/archive/refs/heads/main.zip - unzip main.zip - mv migratemongo-main migratemongo - cp -pR migratemongo $SNAPCRAFT_PART_INSTALL/ - rm -rf migratemongo - rm main.zip #rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs # Delete phantomjs that is in accounts-lockout #rm -rf $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/lucasantoniassi_accounts-lockout/node_modules/phantomjs-prebuilt @@ -240,9 +233,9 @@ parts: source-type: 7z organize: caddy: bin/caddy - CHANGES.txt: license/CADDY_CHANGES.txt - EULA.txt: license/CADDY_EULA.txt - LICENSES.txt: license/CADDY_LICENSES.txt - README.txt: license/CADDY_README.txt + CHANGES.txt: CADDY_CHANGES.txt + EULA.txt: CADDY_EULA.txt + LICENSES.txt: CADDY_LICENSES.txt + README.txt: CADDY_README.txt stage: - -init diff --git a/stacksmith/user-scripts/run.sh b/stacksmith/user-scripts/run.sh index fe40c48f8..1e9d3b460 100755 --- a/stacksmith/user-scripts/run.sh +++ b/stacksmith/user-scripts/run.sh @@ -20,10 +20,9 @@ echo "starting the wekan service..." #--------------------------------------------------------------------- # https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132 # Add more Node heap: -#export NODE_OPTIONS="--max_old_space_size=4096" +export NODE_OPTIONS="--max_old_space_size=4096" # Add more stack: #bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js" -#bash -c "ulimit -s 65500; exec --stack-size=65500 --max-old-space-size=8192 node main.js" bash -c "ulimit -s 65500; exec node main.js" #--------------------------------------------------------------------- #node main.js diff --git a/start-wekan.bat b/start-wekan.bat index 81624601b..08bee2a20 100644 --- a/start-wekan.bat +++ b/start-wekan.bat @@ -183,121 +183,6 @@ REM SET ORACLE_OIM_ENABLED=true REM ------------------------------------------------------------ -REM ## ==== OAUTH2 AZURE ==== -REM ## https://github.com/wekan/wekan/wiki/Azure -REM ## 1) Register the application with Azure. Make sure you capture -REM ## the application ID as well as generate a secret key. -REM ## 2) Configure the environment variables. This differs slightly -REM ## by installation type, but make sure you have the following: -REM SET OAUTH2_ENABLED=true -REM ## Optional OAuth2 CA Cert, see https://github.com/wekan/wekan/issues/3299 -REM # SET OAUTH2_CA_CERT=ABCD1234 -REM ## Use OAuth2 ADFS additional changes. Also needs OAUTH2_ENABLED=true setting. -REM # SET OAUTH2_ADFS_ENABLED=false -REM ## Azure AD B2C. https://github.com/wekan/wekan/issues/5242 -REM # SET OAUTH2_B2C_ENABLED=false -REM ## OAuth2 login style: popup or redirect. -REM SET OAUTH2_LOGIN_STYLE=popup -REM ## Application GUID captured during app registration: -REM SET OAUTH2_CLIENT_ID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx -REM ## Secret key generated during app registration: -REM SET OAUTH2_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -REM SET OAUTH2_SERVER_URL=https://login.microsoftonline.com/ -REM SET OAUTH2_AUTH_ENDPOINT=/oauth2/v2.0/authorize -REM SET OAUTH2_USERINFO_ENDPOINT=https://graph.microsoft.com/oidc/userinfo -REM SET OAUTH2_TOKEN_ENDPOINT=/oauth2/v2.0/token -REM ## The claim name you want to map to the unique ID field: -REM SET OAUTH2_ID_MAP=email -REM ## The claim name you want to map to the username field: -REM SET OAUTH2_USERNAME_MAP=email -REM ## The claim name you want to map to the full name field: -REM SET OAUTH2_FULLNAME_MAP=name -REM ## The claim name you want to map to the email field: -REM SET OAUTH2_EMAIL_MAP=email - -REM ------------------------------------------------------------ - -REM ## ==== OAUTH2 Nextcloud ==== -REM ## 1) Register the application with Nextcloud: https://your.nextcloud/index.php/settings/admin/security -REM ## Make sure you capture the application ID as well as generate a secret key. -REM ## Use https://your.wekan/_oauth/oidc for the redirect URI. -REM ## 2) Configure the environment variables. This differs slightly -REM ## by installation type, but make sure you have the following: -REM SET OAUTH2_ENABLED=true -REM ## OAuth2 login style: popup or redirect. -REM SET OAUTH2_LOGIN_STYLE=popup -REM ## Application GUID captured during app registration: -REM SET OAUTH2_CLIENT_ID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx -REM ## Secret key generated during app registration: -REM SET OAUTH2_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -REM SET OAUTH2_SERVER_URL=https://your-nextcloud.tld -REM SET OAUTH2_AUTH_ENDPOINT=/index.php/apps/oauth2/authorize -REM SET OAUTH2_USERINFO_ENDPOINT=/ocs/v2.php/cloud/user?format=json -REM SET OAUTH2_TOKEN_ENDPOINT=/index.php/apps/oauth2/api/v1/token -REM ## The claim name you want to map to the unique ID field: -REM SET OAUTH2_ID_MAP=id -REM ## The claim name you want to map to the username field: -REM SET OAUTH2_USERNAME_MAP=id -REM ## The claim name you want to map to the full name field: -REM SET OAUTH2_FULLNAME_MAP=display-name -REM ## The claim name you want to map to the email field: -REM SET OAUTH2_EMAIL_MAP=email - -REM ------------------------------------------------------------ - -REM ## ==== OAUTH2 KEYCLOAK ==== -REM ## https://github.com/wekan/wekan/wiki/Keycloak <== MAPPING INFO, REQUIRED -REM SET OAUTH2_ENABLED=true -REM ## OAuth2 login style: popup or redirect. -REM SET OAUTH2_LOGIN_STYLE=popup -REM SET OAUTH2_CLIENT_ID= -REM SET OAUTH2_SERVER_URL= -REM SET OAUTH2_AUTH_ENDPOINT=/realms//protocol/openid-connect/auth -REM SET OAUTH2_USERINFO_ENDPOINT=/realms//protocol/openid-connect/userinfo -REM SET OAUTH2_TOKEN_ENDPOINT=/realms//protocol/openid-connect/token -REM SET OAUTH2_SECRET= -REM SET OAUTH2_ID_MAP=sub -REM SET OAUTH2_USERNAME_MAP=preferred_username -REM SET OAUTH2_EMAIL_MAP=email -REM SET OAUTH2_FULLNAME_MAP=name - -REM ------------------------------------------------------------ - -REM ## ==== OAUTH2 DOORKEEPER ==== -REM ## https://github.com/wekan/wekan/issues/1874 -REM ## https://github.com/wekan/wekan/wiki/OAuth2 -REM ## Enable the OAuth2 connection -REM SET OAUTH2_ENABLED=true -REM ## OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 -REM ## OAuth2 login style: popup or redirect. -REM SET OAUTH2_LOGIN_STYLE=popup -REM ## OAuth2 Client ID. -REM SET OAUTH2_CLIENT_ID=abcde12345 -REM ## OAuth2 Secret. -REM SET OAUTH2_SECRET=54321abcde -REM ## OAuth2 Server URL. -REM SET OAUTH2_SERVER_URL=https://chat.example.com -REM ## OAuth2 Authorization Endpoint. -REM SET OAUTH2_AUTH_ENDPOINT=/oauth/authorize -REM ## OAuth2 Userinfo Endpoint. -REM SET OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo -REM ## OAuth2 Token Endpoint. -REM SET OAUTH2_TOKEN_ENDPOINT=/oauth/token -REM ## OAUTH2 ID Token Whitelist Fields. -REM SET OAUTH2_ID_TOKEN_WHITELIST_FIELDS="" -REM ## OAUTH2 Request Permissions. -REM SET OAUTH2_REQUEST_PERMISSIONS=openid profile email -REM ## OAuth2 ID Mapping -REM # SET OAUTH2_ID_MAP= -REM ## OAuth2 Username Mapping -REM # SET OAUTH2_USERNAME_MAP= -REM ## OAuth2 Fullname Mapping -REM # SET OAUTH2_FULLNAME_MAP= -REM ## OAuth2 Email Mapping -REM # SET OAUTH2_EMAIL_MAP= - -REM ------------------------------------------------------------ - REM # Enable the OAuth2 connection REM # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 REM # example: OAUTH2_ENABLED=true @@ -309,9 +194,6 @@ REM SET OAUTH2_CA_CERT=ABCD1234 REM # Use OAuth2 ADFS additional changes. Also needs OAUTH2_ENABLED=true setting. REM SET OAUTH2_ADFS_ENABLED=false -REM # Use OAuth2 Azure AD B2C. Also requires OAUTH2_ENABLED=true setting . https://github.com/wekan/wekan/issues/5242 -REM SET DEFAULT_OAUTH2_B2C_ENABLED=false - REM # OAuth2 Client ID, for example from Rocket.Chat. Example: abcde12345 REM # example: OAUTH2_CLIENT_ID=abcde12345 REM SET OAUTH2_CLIENT_ID= @@ -357,22 +239,17 @@ REM SET OAUTH2_EMAIL_MAP= REM ------------------------------------------------------------ -REM ## ==== LDAP: UNCOMMENT ALL TO ENABLE LDAP ==== -REM ## https://github.com/wekan/wekan/wiki/LDAP -REM ## Note: Do not add single quotes '' to variables. Having spaces still works without quotes where required. - -REM # The default authentication method used if a user does not exist to create and authenticate. Can be set as ldap. -REM # (this is set properly in the Admin Panel, changing this item does not remove Password login option) -REM SET DEFAULT_AUTHENTICATION_METHOD=ldap - REM # LDAP_ENABLE : Enable or not the connection by the LDAP -REM SET LDAP_ENABLE=true +REM # example : LDAP_ENABLE=true +REM SET LDAP_ENABLE=false REM # LDAP_PORT : The port of the LDAP server +REM # example : LDAP_PORT=389 REM SET LDAP_PORT=389 REM # LDAP_HOST : The host server for the LDAP server -REM SET LDAP_HOST=localhost +REM # example : LDAP_HOST=localhost +REM SET LDAP_HOST= REM #----------------------------------------------------------------- REM # ==== LDAP AD Simple Auth ==== @@ -459,9 +336,6 @@ REM # example : LDAP_BACKGROUND_SYNC=true REM SET LDAP_BACKGROUND_SYNC=false REM # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds -REM # The format must be as specified in: -REM # https://bunkat.github.io/later/parsers.html#text -REM SET LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours REM # At which interval does the background task sync in milliseconds. REM # Leave this unset, so it uses default, and does not crash. REM # https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 @@ -616,13 +490,11 @@ REM # LOGOUT_ON_MINUTES : The number of minutes REM # example : LOGOUT_ON_MINUTES=55 REM SET LOGOUT_ON_MINUTES= -REM ## https://github.com/wekan/wekan/wiki/CAS REM SET CAS_ENABLED=true REM SET CAS_BASE_URL=https://cas.example.com/cas REM SET CAS_LOGIN_URL=https://cas.example.com/login REM SET CAS_VALIDATE_URL=https://cas.example.com/cas/p3/serviceValidate -REM ## https://github.com/wekan/wekan/wiki/SAML REM SET SAML_ENABLED=true REM SET SAML_PROVIDER= REM SET SAML_ENTRYPOINT= @@ -635,7 +507,7 @@ REM SET SAML_IDENTIFIER_FORMAT= REM SET SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE= REM SET SAML_ATTRIBUTES= -REM # Wait spinner to use https://github.com/wekan/wekan/wiki/Wait-Spinners +REM # Wait spinner to use REM SET WAIT_SPINNER=Bounce REM # https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132 diff --git a/start-wekan.sh b/start-wekan.sh index 3bf00af06..a936e3a4f 100755 --- a/start-wekan.sh +++ b/start-wekan.sh @@ -195,9 +195,6 @@ # Use OAuth2 ADFS additional changes. Also needs OAUTH2_ENABLED=true setting. #export OAUTH2_ADFS_ENABLED=false # - # Azure AD B2C. https://github.com/wekan/wekan/issues/5242 - #export OAUTH2_B2C_ENABLED=false - # # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 # OAuth2 login style: popup or redirect. #export OAUTH2_LOGIN_STYLE=redirect @@ -230,15 +227,11 @@ # OAuth2 login style: popup or redirect. #export OAUTH2_LOGIN_STYLE=redirect #export OAUTH2_CLIENT_ID= - #export OAUTH2_SERVER_URL= + #export OAUTH2_SERVER_URL=/auth #export OAUTH2_AUTH_ENDPOINT=/realms//protocol/openid-connect/auth #export OAUTH2_USERINFO_ENDPOINT=/realms//protocol/openid-connect/userinfo #export OAUTH2_TOKEN_ENDPOINT=/realms//protocol/openid-connect/token #export OAUTH2_SECRET= - #export OAUTH2_ID_MAP=sub - #export OAUTH2_USERNAME_MAP=preferred_username - #export OAUTH2_EMAIL_MAP=email - #export OAUTH2_FULLNAME_MAP=name #----------------------------------------------------------------- # ==== OAUTH2 DOORKEEPER ==== # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 @@ -385,9 +378,6 @@ #export LDAP_BACKGROUND_SYNC=false # # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds - # The format must be as specified in: - # https://bunkat.github.io/later/parsers.html#text - #export LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours # At which interval does the background task sync in milliseconds. # Leave this unset, so it uses default, and does not crash. # https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 @@ -562,7 +552,6 @@ #bash -c "ulimit -s 65500; exec node --stack-size=65500 --trace-deprecation main.js" #bash -c "ulimit -s 65500; exec node --stack-size=65500 main.js" #-------------------- OPTIONAL SETTINGS END ---------------------- - #bash -c "ulimit -s 65500; exec node --stack-size=65500 --max-old-space-size=8192 main.js" bash -c "ulimit -s 65500; exec node main.js" #node main.js #--------------------------------------------------------------------- diff --git a/support-at-wekan.team_pgp-publickey.asc b/support-at-wekan.team_pgp-publickey.asc new file mode 100644 index 000000000..e59ce9034 --- /dev/null +++ b/support-at-wekan.team_pgp-publickey.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: OpenPGP.js v4.10.8 +Comment: https://openpgpjs.org + +xjMEX3HbABYJKwYBBAHaRw8BAQdAQ2UBWCK1H3/z7gMgwVudRL+NlwJVCPw+ +Vsp9PGSLh9jNJ3N1cHBvcnRAd2VrYW4udGVhbSA8c3VwcG9ydEB3ZWthbi50 +ZWFtPsKPBBAWCgAgBQJfcdsABgsJBwgDAgQVCAoCBBYCAQACGQECGwMCHgEA +IQkQRkG8ZpPn6f4WIQRI5gPihwJLiXfveDBGQbxmk+fp/kCXAQD/JXsgVq4d +9sKmYDGHpCaIfsO//6cmiCGz3Mf5SDc0ygD/WpJO31Fyu6pfr3nWe4n50H93 +lXXz937+K1bB9rfqugDOOARfcdsAEgorBgEEAZdVAQUBAQdALydXPub/n7hx +8qYjZa2tzBvcz5KkdnIxOoB+vaQZFQwDAQgHwngEGBYIAAkFAl9x2wACGwwA +IQkQRkG8ZpPn6f4WIQRI5gPihwJLiXfveDBGQbxmk+fp/uyXAQCRLPksHCJ6 +RTl7HrtSS9lkeOmh32u+Rnjijn970PYIIQEAiGgXoJGBTzyVil9aPeqfWFK+ +0hvTsnNY3JT3K84OmQQ= +=SNk3 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/docs/Platforms/FOSS/torodb-postgresql/CHANGELOG.md b/torodb-postgresql/CHANGELOG.md similarity index 100% rename from docs/Platforms/FOSS/torodb-postgresql/CHANGELOG.md rename to torodb-postgresql/CHANGELOG.md diff --git a/docs/Platforms/FOSS/torodb-postgresql/LICENSE b/torodb-postgresql/LICENSE similarity index 100% rename from docs/Platforms/FOSS/torodb-postgresql/LICENSE rename to torodb-postgresql/LICENSE diff --git a/docs/Platforms/FOSS/torodb-postgresql/README.md b/torodb-postgresql/README.md similarity index 88% rename from docs/Platforms/FOSS/torodb-postgresql/README.md rename to torodb-postgresql/README.md index 91336a2c3..6e8decdbe 100644 --- a/docs/Platforms/FOSS/torodb-postgresql/README.md +++ b/torodb-postgresql/README.md @@ -1,11 +1,3 @@ -# Try FerretDB instead - -https://github.com/wekan/wekan/wiki/PostgreSQL - -ToroDB is not developed anymore. - -ToroDB is compatible with MongoDB 3.0. WeKan 7.x is compatible with MongoDB 6.x. - # Docker: Wekan to PostgreSQL read-only mirroring * [Wekan kanban board, made with Meteor.js framework, running on @@ -27,8 +19,8 @@ ToroDB is compatible with MongoDB 3.0. WeKan 7.x is compatible with MongoDB 6.x. 2) Clone this repo. ```bash -git clone https://github.com/wekan/wekan -cd torodb-postgresql +git clone https://github.com/wekan/wekan-postgresql.git +cd wekan-postgresql ``` 3) IMPORTANT: In docker-compose.yml, to use Wekan on local network, change ROOT_URL=http://localhost to http://IPADRESS like http://192.168.10.100 or http://example.com diff --git a/docs/Platforms/FOSS/torodb-postgresql/docker-compose.yml b/torodb-postgresql/docker-compose.yml similarity index 98% rename from docs/Platforms/FOSS/torodb-postgresql/docker-compose.yml rename to torodb-postgresql/docker-compose.yml index c47b831d1..0307705c5 100644 --- a/docs/Platforms/FOSS/torodb-postgresql/docker-compose.yml +++ b/torodb-postgresql/docker-compose.yml @@ -394,8 +394,6 @@ services: #- OAUTH2_CA_CERT=ABCD1234 # Use OAuth2 ADFS additional changes. Also needs OAUTH2_ENABLED=true setting. #- OAUTH2_ADFS_ENABLED=false - # Azure AD B2C. https://github.com/wekan/wekan/issues/5242 - #- OAUTH2_B2C_ENABLED=false # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 # OAuth2 Client ID, for example from Rocket.Chat. Example: abcde12345 # example: OAUTH2_CLIENT_ID=abcde12345 @@ -520,15 +518,6 @@ services: # https://bunkat.github.io/later/parsers.html#text #- LDAP_BACKGROUND_SYNC_INTERVAL='every 1 hour' # - # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds - # The format must be as specified in: - # https://bunkat.github.io/later/parsers.html#text - #- LDAP_BACKGROUND_SYNC_INTERVAL=every 1 hours - # At which interval does the background task sync in milliseconds. - # Leave this unset, so it uses default, and does not crash. - # https://github.com/wekan/wekan/issues/2354#issuecomment-515305722 - - LDAP_BACKGROUND_SYNC_INTERVAL='' - # # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true #- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false diff --git a/docs/ImportExport/trello/CHANGELOG.md b/trello/CHANGELOG.md similarity index 100% rename from docs/ImportExport/trello/CHANGELOG.md rename to trello/CHANGELOG.md diff --git a/docs/ImportExport/trello/LICENSE b/trello/LICENSE similarity index 100% rename from docs/ImportExport/trello/LICENSE rename to trello/LICENSE diff --git a/docs/ImportExport/trello/api.py b/trello/api.py similarity index 100% rename from docs/ImportExport/trello/api.py rename to trello/api.py diff --git a/docs/ImportExport/trello/trello-project100.json b/trello/trello-project100.json similarity index 100% rename from docs/ImportExport/trello/trello-project100.json rename to trello/trello-project100.json