diff --git a/.future-snap/broken-snapcraft.yaml b/.future-snap/broken-snapcraft.yaml deleted file mode 100644 index 9e04d4817..000000000 --- a/.future-snap/broken-snapcraft.yaml +++ /dev/null @@ -1,257 +0,0 @@ -name: wekan -version: 0 -version-script: git describe --tags | cut -c 2- -summary: The open-source kanban -description: | - Wekan is an open-source and collaborative kanban board application. - - 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. - Depending on target environment, some configuration settings might need to be adjusted. - For full list of configuration options call: - $ wekan.help - -confinement: strict -grade: stable - -architectures: - - amd64 - -plugs: - mongodb-plug: - interface: content - target: $SNAP_DATA/shared - -hooks: - configure: - plugs: - - network - - network-bind - -slots: - mongodb-slot: - interface: content - write: - - $SNAP_DATA/share - -apps: - wekan: - command: wekan-control - daemon: simple - plugs: [network, network-bind] - - mongodb: - command: mongodb-control - daemon: simple - plugs: [network, network-bind] - - caddy: - command: caddy-control - daemon: simple - plugs: [network, network-bind] - - help: - command: wekan-help - - database-backup: - command: mongodb-backup - plugs: [network, network-bind] - - database-list-backups: - command: ls -al $SNAP_COMMON/db-backups/ - - database-restore: - command: mongodb-restore - plugs: [network, network-bind] - -parts: - mongodb: - source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.6.tgz - plugin: dump - stage-packages: [libssl1.0.0, libcurl3] - filesets: - mongo: - - usr - - bin - - lib - stage: - - $mongo - prime: - - $mongo - - wekan: - source: . - plugin: nodejs - node-engine: 14.21.3 - node-packages: - - node-gyp - - node-pre-gyp - - fibers - build-packages: - - ca-certificates - - apt-utils - - python - - python3 - - g++ - - capnproto - - curl - - libcurl3 - - execstack - - nodejs - - npm - stage-packages: - - libfontconfig1 - override-build: | - echo "Cleaning environment first" - rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules - # Create the OpenAPI specification - rm -rf .build - ## Use Meteor 1.8.x on Snap - #rm -rf .meteor - #mv .snap-meteor-1.8/.meteor . - #mv .snap-meteor-1.8/package.json . - #mv .snap-meteor-1.8/package-lock.json . - ## Meteor 1.9.x has changes to Buffer() => Buffer.alloc(), so reverting those - #mv .snap-meteor-1.8/cfs_access-point.txt fix-download-unicode/ - #mv .snap-meteor-1.8/export.js models/ - #mv .snap-meteor-1.8/wekanCreator.js models/ - #mv .snap-meteor-1.8/ldap.js packages/wekan-ldap/server/ldap.js - #mv .snap-meteor-1.8/oidc_server.js packages/wekan-oidc/oidc_server.js - rm -rf .snap-meteor-1.8 - #mkdir -p .build/python - #cd .build/python - #git clone --depth 1 -b master https://github.com/Kronuz/esprima-python - #cd esprima-python - #python3 setup.py install - #cd ../../.. - #mkdir -p ./public/api - #python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml - # we temporary need api2html and mkdirp - #npm install -g api2html@0.3.0 - #npm install -g mkdirp - #api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml - #npm uninstall -g mkdirp - #npm uninstall -g api2html - # Node Fibers 100% CPU usage issue: - # https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-381453161 - # https://github.com/meteor/meteor/issues/9796#issuecomment-381676326 - # https://github.com/sandstorm-io/sandstorm/blob/0f1fec013fe7208ed0fd97eb88b31b77e3c61f42/shell/server/00-startup.js#L99-L129 - # Also see beginning of wekan/server/authentication.js - # import Fiber from "fibers"; - # Fiber.poolSize = 1e9; - # OLD: Download node version 8.12.0 prerelease build => Official node 8.12.0 has been released - # Description at https://releases.wekan.team/node.txt - ##echo "375bd8db50b9c692c0bbba6e96d4114cd29bee3770f901c1ff2249d1038f1348 node" >> node-SHASUMS256.txt.asc - ##curl https://releases.wekan.team/node -o node - # Verify Fibers patched node authenticity - ##echo "Fibers 100% CPU issue patched node authenticity:" - ##grep node node-SHASUMS256.txt.asc | shasum -a 256 -c - - ##rm -f node-SHASUMS256.txt.asc - ##chmod +x node - ##mv node `which node` - # DOES NOT WORK: paxctl fix. - # Removed from build-packages: - paxctl - #echo "Applying paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303" - #paxctl -mC `which node` - #echo "Installing npm" - #curl -L https://www.npmjs.com/install.sh | sh - echo "Installing meteor" - curl https://install.meteor.com/ -o install_meteor.sh - #sed -i "s|RELEASE=.*|RELEASE=\"1.8.1-beta.0\"|g" install_meteor.sh - chmod +x install_meteor.sh - sh install_meteor.sh - rm install_meteor.sh - # REPOS BELOW ARE INCLUDED TO WEKAN REPO - #if [ ! -d "packages" ]; then - # mkdir packages - #fi - #if [ ! -d "packages/kadira-flow-router" ]; then - # cd packages - # git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router - # cd .. - #fi - #if [ ! -d "packages/meteor-useraccounts-core" ]; then - # cd packages - # git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core - # sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' meteor-useraccounts-core/package.js - # cd .. - #fi - #if [ ! -d "packages/meteor-accounts-cas" ]; then - # cd packages - # git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git meteor-accounts-cas - # cd .. - #fi - #if [ ! -d "packages/wekan-ldap" ]; then - # cd packages - # git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git - # cd .. - #fi - #if [ ! -d "packages/wekan-scrollbar" ]; then - # cd packages - # git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git - # cd .. - #fi - #if [ ! -d "packages/wekan_accounts-oidc" ]; then - # cd packages - # git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git - # mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan-accounts-oidc - # mv meteor-accounts-oidc/packages/switch_oidc wekan-oidc - # rm -rf meteor-accounts-oidc - # cd .. - #fi - #if [ ! -d "packages/markdown" ]; then - # cd packages - # git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git - # cd .. - #fi - rm -rf .build - meteor add standard-minifier-js --allow-superuser - meteor npm install --allow-superuser - meteor npm install --allow-superuser --save babel-runtime - meteor build .build --directory --allow-superuser - cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js - #Removed binary version of bcrypt because of security vulnerability that is not fixed yet. - #https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac - #https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c - #cd .build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt - #rm -rf node_modules/bcrypt - #meteor npm install --save bcrypt - # Change from npm-bcrypt directory back to .build/bundle/programs/server directory. - #cd ../../../../ - # Change to directory .build/bundle/programs/server - cd .build/bundle/programs/server - npm install - npm install --allow-superuser --save babel-runtime - #meteor npm install --save bcrypt - # Change back to Wekan source directory - cd ../../../.. - 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 - 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 - rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/tar/lib/.mkdir.js.swp - rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp - rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp - # Meteor 1.8.x additional .swp remove - rm -f $SNAPCRAFT_PART_INSTALL/programs/server/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp - - organize: - README: README.wekan - prime: - - -lib/node_modules/node-pre-gyp/node_modules/tar/lib/.unpack.js.swp - - helpers: - source: snap-src - plugin: dump - - caddy: - plugin: dump - source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off - source-type: tar - organize: - caddy: bin/caddy - 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/.future-snap/old-rebuild-wekan.sh b/.future-snap/old-rebuild-wekan.sh deleted file mode 100755 index 62dbf409c..000000000 --- a/.future-snap/old-rebuild-wekan.sh +++ /dev/null @@ -1,198 +0,0 @@ -#!/bin/bash - -echo "Note: 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." - -#Below script installs newest node 8.x for Debian/Ubuntu/Mint. -#NODE_VERSION=12.21.0 -#X64NODE="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" - -function pause(){ - read -p "$*" -} - -function cprec(){ - if [[ -d "$1" ]]; then - if [[ ! -d "$2" ]]; then - sudo mkdir -p "$2" - fi - - for i in $(ls -A "$1"); do - cprec "$1/$i" "$2/$i" - done - else - sudo cp "$1" "$2" - fi -} - -# sudo npm doesn't work right, so this is a workaround -function npm_call(){ - TMPDIR="/tmp/tmp_npm_prefix" - if [[ -d "$TMPDIR" ]]; then - rm -rf $TMPDIR - fi - mkdir $TMPDIR - NPM_PREFIX="$(npm config get prefix)" - npm config set prefix $TMPDIR - npm "$@" - npm config set prefix "$NPM_PREFIX" - - echo "Moving files to $NPM_PREFIX" - for i in $(ls -A $TMPDIR); do - cprec "$TMPDIR/$i" "$NPM_PREFIX/$i" - done - rm -rf $TMPDIR -} - -#function wekan_repo_check(){ -## UNCOMMENTING, IT'S NOT REQUIRED THAT /HOME/USERNAME IS /HOME/WEKAN -# git_remotes="$(git remote show 2>/dev/null)" -# res="" -# for i in $git_remotes; do -# res="$(git remote get-url $i | sed 's/.*wekan\/wekan.*/wekan\/wekan/')" -# if [[ "$res" == "wekan/wekan" ]]; then -# break -# fi -# done -# -# if [[ "$res" != "wekan/wekan" ]]; then -# echo "$PWD is not a wekan repository" -# exit; -# fi -#} - -echo -PS3='Please enter your choice: ' -options=("Install Wekan dependencies" "Build Wekan" "Run Meteor for dev on http://localhost:4000" "Run Meteor for dev on http://CURRENT-IP-ADDRESS:4000" "Run Meteor for dev on http://CUSTOM-IP-ADDRESS:PORT" "Quit") - -select opt in "${options[@]}" -do - case $opt in - "Install Wekan dependencies") - - if [[ "$OSTYPE" == "linux-gnu" ]]; then - echo "Linux"; - # Debian, Ubuntu, Mint - sudo apt-get install -y build-essential gcc g++ make git curl wget - # npm nodejs - #sudo npm -g install npm - curl -0 -L https://npmjs.org/install.sh | sudo sh - sudo chown -R $(id -u):$(id -g) $HOME/.npm - sudo npm -g install n - sudo n 12.21.0 - #curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - - #sudo apt-get install -y nodejs - elif [[ "$OSTYPE" == "darwin"* ]]; then - echo "macOS"; - pause '1) Install XCode 2) Install Node 8.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.' - elif [[ "$OSTYPE" == "cygwin" ]]; then - # POSIX compatibility layer and Linux environment emulation for Windows - echo "TODO: Add Cygwin"; - exit; - elif [[ "$OSTYPE" == "msys" ]]; then - # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) - echo "TODO: Add msys on Windows"; - exit; - elif [[ "$OSTYPE" == "win32" ]]; then - # I'm not sure this can happen. - echo "TODO: Add Windows"; - exit; - elif [[ "$OSTYPE" == "freebsd"* ]]; then - echo "TODO: Add FreeBSD"; - exit; - else - echo "Unknown" - echo ${OSTYPE} - exit; - fi - - ## Latest npm with Meteor 1.8.x - npm_call -g install npm - npm_call -g install node-gyp - # Latest fibers for Meteor 1.8.x - sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp - npm_call -g install fibers - # Install Meteor, if it's not yet installed - curl https://install.meteor.com | bash - sudo chown -R $(id -u):$(id -g) $HOME/.npm $HOME/.meteor - break - ;; - - "Build Wekan") - echo "Building Wekan." - #wekan_repo_check - # REPOS BELOW ARE INCLUDED TO WEKAN REPO - #rm -rf packages/kadira-flow-router packages/meteor-useraccounts-core packages/meteor-accounts-cas packages/wekan-ldap packages/wekan-ldap packages/wekan-scrfollbar packages/meteor-accounts-oidc packages/markdown - #mkdir packages - #cd packages - #git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router - #git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core - #git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git - #git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git - #git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git - #git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git - #git clone --depth 1 -b master --recurse-submodules https://github.com/wekan/markdown.git - #mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc - #mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc - #rm -rf meteor-accounts-oidc - #if [[ "$OSTYPE" == "darwin"* ]]; then - # echo "sed at macOS"; - # sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js - #else - # echo "sed at ${OSTYPE}" - # sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js - #fi - #cd .. - sudo chown -R $(id -u):$(id -g) $HOME/.npm $HOME/.meteor - rm -rf node_modules .meteor/local - npm install - rm -rf .build - meteor build .build --directory - cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js - # Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc. - rm -rf .build/bundle/programs/web.browser.legacy - #Removed binary version of bcrypt because of security vulnerability that is not fixed yet. - #https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac - #https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c - #cd ~/repos/wekan/.build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt - #rm -rf node_modules/bcrypt - #meteor npm install bcrypt - cd .build/bundle/programs/server - rm -rf node_modules - npm install - #meteor npm install bcrypt - cd ../../../.. - echo Done. - break - ;; - - "Run Meteor for dev on http://localhost:4000") - WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://localhost:4000 meteor run --exclude-archs web.browser.legacy,web.cordova --port 4000 - break - ;; - - "Run Meteor for dev on http://CURRENT-IP-ADDRESS:4000") - IPADDRESS=$(ip a | grep 'noprefixroute' | grep 'inet ' | cut -d: -f2 | awk '{ print $2}' | cut -d '/' -f 1) - echo "Your IP address is $IPADDRESS" - WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://$IPADDRESS:4000 meteor run --exclude-archs web.browser.legacy,web.cordova --port 4000 - break - ;; - - "Run Meteor for dev on http://CUSTOM-IP-ADDRESS:PORT") - ip address - echo "From above list, what is your IP address?" - read IPADDRESS - echo "On what port you would like to run Wekan?" - read PORT - echo "ROOT_URL=http://$IPADDRESS:$PORT" - WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=http://$IPADDRESS:$PORT meteor run --exclude-archs web.browser.legacy,web.cordova --port $PORT - break - ;; - - "Quit") - break - ;; - *) echo invalid option;; - esac -done diff --git a/.future-snap/old-snapcraft.yaml b/.future-snap/old-snapcraft.yaml deleted file mode 100644 index 78bdd53c0..000000000 --- a/.future-snap/old-snapcraft.yaml +++ /dev/null @@ -1,155 +0,0 @@ -name: wekan -version: git -summary: The open-source kanban -description: | - Wekan is an open-source and collaborative kanban board application. - - 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. - Depending on target environment, some configuration settings might need to be adjusted. - For full list of configuration options call: - $ wekan.help - -confinement: strict -grade: stable -base: core18 - -architectures: - - amd64 - -plugs: - mongodb-plug: - interface: content - target: $SNAP_DATA/shared - -hooks: - configure: - plugs: - - network - - network-bind - -slots: - mongodb-slot: - interface: content - write: - - $SNAP_DATA/share - -apps: - wekan: - command: wekan-control - daemon: simple - plugs: [network, network-bind] - - mongodb: - command: mongodb-control - daemon: simple - plugs: [network, network-bind] - - caddy: - command: caddy-control - daemon: simple - plugs: [network, network-bind] - - help: - command: wekan-help - - database-backup: - command: mongodb-backup - plugs: [network, network-bind] - - database-list-backups: - command: ls -al $SNAP_COMMON/db-backups/ - - database-restore: - command: mongodb-restore - plugs: [network, network-bind] - -parts: - mongodb: - source: https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.2/multiverse/binary-amd64/mongodb-org-server_4.2.2_amd64.deb - #https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.14.tgz - #https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.22.tgz - plugin: dump - stage-packages: [libssl1.0.0, libcurl3] - filesets: - mongo: - - usr - - bin - - lib - stage: - - $mongo - prime: - - $mongo - - wekan: - source: . - plugin: nodejs - node-engine: 14.19.0 - node-packages: - - node-gyp - - node-pre-gyp - - fibers - build-packages: - - ca-certificates - - apt-utils - - build-essential - - python - - python3 - - g++ - - capnproto - - curl - - libcurl3 - - execstack - - nodejs - - npm - stage-packages: - - libfontconfig1 - override-build: | - echo "Cleaning environment first" - rm -rf ~/.meteor ~/.npm /usr/local/lib/node_modules - rm -rf .build - echo "Installing meteor" - curl https://install.meteor.com/ -o install_meteor.sh - chmod +x install_meteor.sh - sh install_meteor.sh - rm install_meteor.sh - rm -rf .build - meteor add standard-minifier-js --allow-superuser - meteor npm install --allow-superuser - meteor npm install --allow-superuser --save babel-runtime - meteor build .build --directory --allow-superuser - cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js - cd .build/bundle/programs/server - npm install - npm install --allow-superuser --save babel-runtime - # Change back to Wekan source directory - cd ../../../.. - 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 - 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 - rm -f $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/tar/lib/.mkdir.js.swp - rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp - rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp - rm -f $SNAPCRAFT_PART_INSTALL/programs/server/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp - - organize: - README: README.wekan - prime: - - -lib/node_modules/node-pre-gyp/node_modules/tar/lib/.unpack.js.swp - - helpers: - source: snap-src - plugin: dump - - caddy: - plugin: dump - source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off - source-type: tar - organize: - caddy: bin/caddy - 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/.future-snap/snapcraft.yaml b/.future-snap/snapcraft.yaml deleted file mode 100644 index b6b792494..000000000 --- a/.future-snap/snapcraft.yaml +++ /dev/null @@ -1,183 +0,0 @@ -name: wekan -version: '6.21' -base: core20 -summary: Open Source kanban -description: | - WeKan ® is an Open Source and collaborative kanban board application. - - 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. - Depending on target environment, some configuration settings might need to be adjusted. - For full list of configuration options call: - $ wekan.help - -confinement: strict -grade: stable - -architectures: - - build-on: amd64 - run-on: amd64 - - - build-on: arm64 - run-on: arm64 - - - build-on: ppc64el - run-on: ppc64el - - - build-on: s390x - run-on: s390x - -plugs: - mongodb-plug: - interface: content - target: $SNAP_DATA/shared - -hooks: - configure: - plugs: - - network - - network-bind - -slots: - mongodb-slot: - interface: content - write: - - $SNAP_DATA/share - -apps: - wekan: - command: wekan-control - daemon: simple - plugs: [network, network-bind, mount-observe, system-observe, bluetooth-control] - restart-condition: on-failure - - mongodb: - command: mongodb-control - daemon: simple - plugs: [network, network-bind, mount-observe, system-observe, bluetooth-control] - restart-condition: on-failure - - caddy: - command: caddy-control - daemon: simple - plugs: [network, network-bind] - - help: - command: wekan-help - - database-backup: - command: mongodb-backup - plugs: [network, network-bind, mount-observe, system-observe, bluetooth-control] - - database-list-backups: - command: ls -al $SNAP_COMMON/db-backups/ - - database-restore: - command: mongodb-restore - plugs: [network, network-bind, mount-observe, system-observe, bluetooth-control] - -parts: - mongodb: - plugin: dump - source: - - on amd64: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-amd64/mongodb-org-server_4.4.13_amd64.deb - - on arm64: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-arm64/mongodb-org-server_4.4.13_arm64.deb - - on ppc64el: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-ppc64el/mongodb-org-server_4.4.13_ppc64el.deb - - on s390x: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-s390x/mongodb-org-server_4.4.13_s390x.deb - stage-packages: - - libssl1.1 - - libcurl3-dev - - libcurl4-openssl-dev - filesets: - mongo: - - usr - - bin - - lib - stage: - - $mongo - prime: - - $mongo - - wekan: - #plugin: npm - plugin: dump - source: - # Fixed URLs to some allowed GitHub releases URL. - # Non-GitHub build server file urls are not allowed at 2022-03-02 and later. - - on amd64: https://github.com/wekan/wekan/releases/download/v6.20/wekan-6.20-amd64.zip - - on arm64: https://github.com/wekan/wekan/releases/download/v6.20/wekan-6.20-arm64.zip - - on ppc64el: https://github.com/wekan/wekan/releases/download/v6.20/wekan-6.20-ppc64el.zip - - on s390x: https://github.com/wekan/wekan/releases/download/v6.20/wekan-6.20-s390x.zip -# npm-node-version: 14.19.1 -# node-packages: -# - node-gyp -# - node-pre-gyp -# - fibers -# build-packages: -# - npm -# - build-essential -# - ca-certificates -# - apt-utils -# - python -# - python3 -# - g++ -# - capnproto -# - curl -# - execstack -# - nodejs -# - npm -# - p7zip-full -# stage-packages: -# - libfontconfig1 - override-build: | - cp -r bundle/* $SNAPCRAFT_PART_INSTALL/ - cp bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/ - rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan - snapcraftctl build - organize: - README: README.wekan - prime: - - -lib/node_modules/node-pre-gyp/node_modules/tar/lib/.unpack.js.swp - - -lib/node_modules/weka* - - helpers: - source: snap-src - plugin: dump - - caddy: - plugin: dump - ## Caddy v1 is not developed anymore. TODO: Sometime migrate to Caddy v2. - ## https://caddy.community/t/caddyfile-v1-adapter/9129 - ## https://github.com/caddyserver/caddy/tree/v1 - #source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off - #source-type: tar - # Using last working binary that was downloaded from above URL to Wekan Snap, - # and .txt files from https://github.com/caddyserver/caddy/tree/v1/dist - source: https://wekan.github.io/caddy-v1-linux-amd64.7z - source-type: 7z - organize: - caddy: bin/caddy - CHANGES.txt: CADDY_CHANGES.txt - EULA.txt: CADDY_EULA.txt - LICENSES.txt: CADDY_LICENSES.txt - README.txt: CADDY_README.txt - stage: - - -init - - caddy2: - plugin: dump - source: - # Fixed URLs to some allowed GitHub releases URL. - # Non-GitHub build server file urls are not allowed at 2022-03-02 and later. - - on amd64: https://github.com/wekan/wekan/releases/download/v6.20/caddy-v2-amd64.zip - - on arm64: https://github.com/wekan/wekan/releases/download/v6.20/caddy-v2-arm64.zip - - on ppc64el: https://github.com/wekan/wekan/releases/download/v6.20/caddy-v2-ppc64el.zip - - on s390x: https://github.com/wekan/wekan/releases/download/v6.20/caddy-v2-s390x.zip - source-type: zip - organize: - caddy: bin/caddy - 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/.github/FUNDING.yml b/.github/FUNDING.yml index 277cc9a6d..5b621fac0 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,3 @@ # These are supported funding model platforms -custom: ['https://wekan.team/commercial-support/'] +custom: ['https://wekan.fi/commercial-support/'] diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 9bbe942fd..07765d05f 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,5 +1,9 @@ ## Issue +UPGRADE: https://wekan.fi/upgrade/ + +Pull requests welcome to fix any broken links at docs directory, and organizing docs/Features and their screenshots to subdirectories of each feature. + Please report these issues elsewhere: - SECURITY ISSUES, PGP EMAIL: https://github.com/wekan/wekan/blob/main/SECURITY.md @@ -7,9 +11,6 @@ Please report these issues elsewhere: If WeKan Snap is slow, try this: https://github.com/wekan/wekan/wiki/Cron -**[PLEASE UPGRADE](https://github.com/wekan/wekan/wiki/Backup)** to the newest -WeKan ® before reporting an issue, if possible. - Please search existing Open and Closed issues, most questions have already been answered. If you can not login for any reason: https://github.com/wekan/wekan/wiki/Forgot-Password diff --git a/.github/workflows/depsreview.yaml b/.github/workflows/depsreview.yaml index b9d6d20ff..8461b453c 100644 --- a/.github/workflows/depsreview.yaml +++ b/.github/workflows/depsreview.yaml @@ -9,6 +9,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: 'Dependency Review' uses: actions/dependency-review-action@v4 diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 173603b2c..03d47b61f 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -32,13 +32,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Login against a Docker registry except on PR # 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@184bdaa0721073962dff0199f1fb9940f07167d1 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@c1e51972afc2121e065aed6d45c65596fe445f3f 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@263435318d21b8e681c14492fe198d362a7d2c83 with: context: . push: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 0a081ae7c..14f8dfe01 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -15,6 +15,6 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Build the Docker image run: docker build . --file Dockerfile --tag wekan:$(date +%s) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fcdbed26d..9d93b7588 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 diff --git a/.github/workflows/test_suite.yml b/.github/workflows/test_suite.yml index a02b3e254..b3498f613 100644 --- a/.github/workflows/test_suite.yml +++ b/.github/workflows/test_suite.yml @@ -18,7 +18,7 @@ jobs: # runs-on: ubuntu-latest # steps: # - name: checkout -# uses: actions/checkout@v4 +# uses: actions/checkout@v5 # # - name: setup node # uses: actions/setup-node@v1 @@ -42,7 +42,7 @@ jobs: # needs: [lintcode] # steps: # - name: checkout -# uses: actions/checkout@v4 +# uses: actions/checkout@v5 # # - name: setup node # uses: actions/setup-node@v1 @@ -65,7 +65,7 @@ jobs: # needs: [lintcode,lintstyle] # steps: # - name: checkout -# uses: actions/checkout@v4 +# uses: actions/checkout@v5 # # - name: setup node # uses: actions/setup-node@v1 @@ -90,7 +90,7 @@ jobs: # CHECKOUTS - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 # CACHING - name: Install Meteor @@ -147,10 +147,10 @@ jobs: needs: [tests] steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Download coverage - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: coverage-folder path: .coverage/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b169e670..17eb03de4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,22 +1,382 @@ [Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac) -Newest WeKan at these amd64 platforms: +Newest WeKan at these platforms: -- Windows and Linux bundle -- Snap Candidate -- Docker -- Kubernetes +- [bundle zip at releases](https://github.com/wekan/wekan/releases), docs at + - [Linux amd64, arm64, s390x](https://github.com/wekan/wekan/blob/main/docs/Platforms/FOSS/RaspberryPi/Raspberry-Pi.md) + - [Windows amd64, works also at Windows arm64](https://github.com/wekan/wekan/blob/main/docs/Platforms/Propietary/Windows/Offline.md) + - [Mac amd64, works also with Rosetta2 at Apple Silicon](https://github.com/wekan/wekan/blob/main/docs/Platforms/Propietary/Mac.md) +- https://wekan.fi/install/ + - Snap Candidate amd64 + - Docker amd64 + - Kubernetes Docker amd64 + - Bitnami MongoDB Docker images do not exist anymore. [MongoDump/MongoRestore to groundhog2k MongoDB images](https://github.com/wekan/charts/issues/45) Fixing other platforms In Progress. -- 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 +- Node.js 14.x at https://github.com/wekan/node-v14-esm/releases/tag/v14.21.4 and https://nodejs.org/dist/latest-v14.x/ +- MongoDB 6.x and 7.x, or FerretDB/PostgreSQL https://blog.ferretdb.io/building-project-management-stack-wekan-ferretdb/ -[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585) +[Upgrade WeKan](https://wekan.fi/upgrade/) + +# Upcoming WeKan ® release + +This release adds the following updates: + +- [Updated release script for new command of uploading snap package to Snap Store](https://github.com/wekan/wekan/commit/dec9b82da0d700aafd7e2b2063b5d5b07dd383c3). + Thanks to xet7. +- [Updated to MongoDB 7.0.24 at Snap Candidate](https://github.com/wekan/wekan/commit/3253dd501067c617aec272efec1c4c2bb9861983). + Thanks to MongoDB developers. + +and fixes the following bugs: + +- [Added missing mobile drag drop image to docs from wekan.github.io git history](https://github.com/wekan/wekan/commit/5151814e98599c22fff98dc7c42fbf634004ab20). + Thanks to xet7. +- [Fix links in docker-compose.yml to point to doc in repo](https://github.com/wekan/wekan/pull/5882). + Thanks to Skylark13. +- [Fixed find.sh script errors about unmatched single quotes and binary files that are now ignored](https://github.com/wekan/wekan/commit/730bb6d166baa5530cc75b4c94ae46c8077884b0). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.95 2025-09-18 WeKan ® release + +This release adds the following updates: + +- [Updated upgrade link at repo readme](https://github.com/wekan/wekan/commit/b3d3bf159376d56048361a385f0b295667e2319c). + Thanks to xet7. +- [Fixed image link at docs](https://github.com/wekan/wekan/commit/ad7e3774c2b29265a8fbefdde7b9b83822af6def). + Thanks to xet7. +- [More info about ToroDB, FerretDB, Turso, TigerBeetle, PostgreSQL, SQLite etc](https://github.com/wekan/wekan/commit/701485d76aded5ee4fa17967d94918132a821af6). + Thanks to xet7. +- [Added missing image to WeKan Multiverse page](https://github.com/wekan/wekan/commit/946f7045e92e26bbe8d182634844ee5eebf73564). + Thanks to xet7. +- [Added more info to Windows Offline docs about WRITABLE_PATH and ATTACHMENTS_STORE_PATH](https://github.com/wekan/wekan/pull/5872). + Thanks to sowwos. +- [Added PGP public key for sending encrypted email](https://github.com/wekan/wekan/commit/dd80b7308bb6c66113c8e6009c442a44a29e477a). + Thanks to xet7. +- [Updated dependencies](https://github.com/wekan/wekan/commit/c4161c5ce69a35c76364b13bcc456905f6335162). + Thanks to developers of dependencies. +- [Replace bitnami mongodb Helm chart by groundhog2k one](https://github.com/wekan/charts/pull/44). + Thanks to ariep. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.94 2025-08-18 WeKan ® release + +This release adds the following new features: + +- [Feature: Accessibility page at /accessibility. Settings at Admin Panel. When enabled, link at right sidebar](https://github.com/wekan/wekan/commit/d83ce5e6335c175f2f4a384f6090c18c7f860555). + Thanks to xet7. +- [Feature: Added brute force login protection settings to Admin Panel/People/Locked Users](https://github.com/wekan/wekan/commit/ae0d059b6feb38a438ca21aa154c63b410641763). + Added filtering of Admin Panel/People/People: All Users/Locked Users Only/Active/Not Active. + Added visual indicators: red lock icon for locked users, green check for active users, and red X for inactive users. + Added "Unlock All" button to quickly unlock all brute force locked users. + Added ability to toggle user active status directly from the People page. + Moved lockout settings from environment variables to database so admins can configure the lockout thresholds directly in the UI. + Thanks to xet7. +- Added docs for Windows SSL/TLS. + [Part 1](https://github.com/wekan/wekan/commit/92c0543614fb92cf8217d8cc24a367296f3ade37), + [Part 2](https://github.com/wekan/wekan/commit/ce528b1826255ebf3ac9533dd8ed91bec8bbe8b1), + [Part 3](https://github.com/wekan/wekan/commit/ee01a07b0ac7c6b06054b3d7bfac8c38161adf19), + [Part 4](https://github.com/wekan/wekan/commit/cc78e19740ae1bf42f2bbb17f801fe2d4dac135d), + [Part 5](https://github.com/wekan/wekan/commit/044793cc4473bebc8eefa64a0df9e9a20115d049), + [Part 6](https://github.com/wekan/wekan/commit/a7bcfc6db7cc78892ed20cdf0d03f84094853687). + Thanks to xet7. + +and adds the following updates: + +- Update CHANGELOG.md platforms info at top. + [Part 1](https://github.com/wekan/wekan/commit/0e43a08689c0d47c816ce781e93650f0c37efe28), + [Part 2](https://github.com/wekan/wekan/commit/4bc2fd4a7fc166041a5c483aad73bf8079c3ae45), + [Part 3](https://github.com/wekan/wekan/commit/62269a99024744c789ac931921c96d5edae9d79e), + [Part 4](https://github.com/wekan/wekan/commit/4aad3dafd4530cc7779072fc9a550d8732f32558), + [Part 5](https://github.com/wekan/wekan/commit/c2aabbc6db9ffbb73d9f06edb73a15a9f4838df4), + [Part 6](https://github.com/wekan/wekan/commit/b0865c8d06a31d07b5b5df719871c298e1cf4ad8), + [Part 7](https://github.com/wekan/wekan/commit/30795a46cfb5f37837206a6de653913bfb631595), + [Part 8](https://github.com/wekan/wekan/commit/9a91214043d93307074cf33e54d40cb43c14ad62). +- [Updated security email address](https://github.com/wekan/wekan/commit/11872545734db82229e873b48f122d826457fec3). + Thanks to xet7. +- Updated GitHub Docker Actions. + [Part 1](https://github.com/wekan/wekan/pull/5855), + [Part 2](https://github.com/wekan/wekan/pull/5856), + [Part 3](https://github.com/wekan/wekan/pull/5864), + [Part 4](https://github.com/wekan/wekan/pull/5865). + Thanks to Dependabot. +- [Added info about Sandstorm Radicale Calendar and Contacts](https://github.com/wekan/wekan/commit/dfdd0b6cbbbb60bf6dba7a61f34dc52e74f98b41). + Thanks to xet7. +- [Updated dependencies](https://github.com/wekan/wekan/commit/97b5931a4f717541631dde55f2b834d037e1d82d). + Thanks to developers of dependencies. +- Reorganized Design Docs. + [Part 1](https://github.com/wekan/wekan/commit/f34490fe2820352c8303f0bac47ad7158592e8f0), + [Part 2](https://github.com/wekan/wekan/commit/a662283b7de91c0ef63195691e06b5cbc6cdff6c). + Thanks to xet7. +- [Added related link to design docs](https://github.com/wekan/wekan/commit/a662283b7de91c0ef63195691e06b5cbc6cdff6c). + Thanks to xet7. +- [Upgraded to MongoDB 7.0.23 at Snap Candidate](https://github.com/wekan/wekan/commit/8e01e3c762748269c2e60f9f349dac30f30971d7). + Thanks to MongoDB developers. + +and fixes the following bugs: + +- [Fixes for building at macOS](https://github.com/wekan/wekan/commit/200545822c5c778521f76525938fe777ed9666f0). + Thanks to xet7. +- [Improves accessibility by disabling custom Tab handling](https://github.com/wekan/wekan/pull/5853). + Thanks to seve12, co-maintainer of WeKan. +- [Comment out not used Tab code at accessibility related changes](https://github.com/wekan/wekan/commit/0e32f666eb30cc254177119907e6eae3c09ce0ca). + Thanks to xet7. +- [Fixed link at OpenShift docs](https://github.com/wekan/wekan/commit/b9887fc91758edb31259a8df7770a1d992bc9251). + Thanks to xet7. +- [Added FerretDB/PostgreSQL to changelog](https://github.com/wekan/wekan/commit/c16e99ba1ec7bc25a4e0449ea463ea8f4b02da11). + Thanks to xet7. +- [Accessibility](https://github.com/wekan/wekan/pull/5857): + Added product name to page titles, settings and global search. + More accessible header and layout templates, modal dialogs, DOM structure, color contrast. + Thanks to seve12. +- [Fixed uppercase K of WeKan](https://github.com/wekan/wekan/commit/b137108ae15a9c5685cca5f45cfa9480ec7d3510). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.93 2025-07-18 WeKan ® release + +This release adds the following new features: + +- [Enhance API documentation and add board-related endpoints](https://github.com/wekan/wekan/pull/5815). + Thanks to Atry. +- Snap Candidate: If CPU does not support AVX, use Qemu that supports AVX, so that MongoDB 6 works. + [Part 1](https://github.com/wekan/migratemongo/commit/e7ca69584f021c4de16062f7074f177cca7ab25c), + [Part 2](https://github.com/wekan/migratemongo/commit/e34efeeced9e293ff6ea12bf36486eab3ce3a3f5), + [Part 3](https://github.com/wekan/wekan/commit/59ab6c1cd8ca3d71616201b02de6536b15b2303d). + Thanks to xet7. +- [Added docs about using MongoDB at unsupported CPUs with Qemu](https://github.com/wekan/wekan/commit/f926448bbbbd570ad1e6a1015c755b12c6b229c0). + Thanks to xet7. +- [Helm Chart: Add podAnnotations support](https://github.com/wekan/charts/pull/42). + Thanks to adalinesimonian. +- [Added release script to switch between using kvm, snapcraft.io/multipass, waydroid and virtualbox](https://github.com/wekan/wekan/commit/dfc658b910f038fa6d6ae2e06c190eb8e6205a78). + Thanks to xet7. +- [Add a REST API endpoint to retrieve a card by ID](https://github.com/wekan/wekan/pull/5828). + Thanks to Atry. +- [Avoid calling ReactiveCache.getCard twice](https://github.com/wekan/wekan/pull/5829). + Thanks to Atry. +- [Add REST API endpoint to edit a list with various properties](https://github.com/wekan/wekan/pull/5832). + Thanks to Atry. + +and adds the following major updates to links of WeKan websites, blog and docs: + +- These changes are because most people at Finland expect Finnish company to be at .fi domain. + - It did take too much time at local computer shop to explain about domain being .team + - Most content have been moved to wekan.fi . For app stores https://wekan.fi/app/ there is still wekan.team used for app. + - Many wikis and images from wekan.github.io have been moved to wekan repo docs directory + - Pull requests welcome to fix any broken links at docs directory, and organizing docs/Features and their screenshots to subdirectories of each feature. +- [Updated issue template about pull requests for fixes to docs](https://github.com/wekan/wekan/commit/e4822d8bc4dd0c200b63983013625d2c3677e9f9). + Thanks to xet7. +- wekan.team to wekan.fi. + [Part 1](https://github.com/wekan/wekan/commit/790bafbb096a606cdb34a1d942478ae53174ff1c), + [Part 2](https://github.com/wekan/wekan/commit/b52d1ca6c47fbeeb3c5f93111809a1863478b833). + Thanks to xet7. +- [Moved images from wekan.github.io to repo wekan/docs](https://github.com/wekan/wekan/commit/c5e5bb613e9d0e8652bce24a1cecb620dd8e7cd4). + Thanks to xet7. +- [wekan.github.io to wekan.fi, and blog.wekan.team to wekan.fi/blog](https://github.com/wekan/wekan/commit/89480b61ce98d5a344108ad7c2ce9b3577fd3d7e> + Thanks to xet7. +- Update Browser-compatibility-matrix.md about + [Servo](https://github.com/wekan/wekan/commit/c256ce69688e47675245bf68f13d3025b2a7d7ab), + [uWolf](https://github.com/wekan/wekan/commit/ad3306e19e422b9b8ce70a13e862bc107fec1eba), + [TUI webbrowsers](https://github.com/wekan/wekan/commit/7841c9e801c737aab07e9bd68f8d84f9e4becc3e), + [Chawan](https://github.com/wekan/wekan/commit/be1b9595196e2072ec2259de9b81bc3b823722eb) and + [Elinks](https://github.com/wekan/wekan/commit/12e6e469249c9392181df20f51bcc684e2656960). + Thanks to xet7. +- Updated links, after moving many wikis to wekan repo docs directory: + [Part 1: Updated docs](https://github.com/wekan/wekan/commit/31e043c1d7c0d4031054234241f6a1b7479f2134), + [Part 2: Removed footer](https://github.com/wekan/wekan/commit/40a52da2d3fd472847b9bfd2696f3f9a72021b52), + [Part 3: Moved content from Home.md to README.md](https://github.com/wekan/wekan/commit/2a415cbd2661bd210fdd18626f1e606f73334bd2), + [Part 4: Updated links at readme](https://github.com/wekan/wekan/commit/9aa028f32dc7c186d55ada422b73a7e331de2cbb), + [Part 5: Updated deep dive link](https://github.com/wekan/wekan/commit/11415cd51781bde20375c6d98fccde17227136fd), + [Part 6: Fixed links](https://github.com/wekan/wekan/commit/cc7459b98395f15fd2c97992f74c279a93f8956a), + [Part 7: Updated links](https://github.com/wekan/wekan/commit/4bfc0140bef8504ba24b237a9c5c525a5bf3fb7d), + [Part 8: Reorganized docs file locations](https://github.com/wekan/wekan/commit/f54cbac37008fc99f19fb20930d2fa5ecb535a69), + [Part 9: Fix Discord image link and WeKan API link](https://github.com/wekan/wekan/commit/3a8473e6326bff2f17ada1bb48f0c7f38b356721), + [Part 10: Fix links about docs that were moved from wiki to readme](https://github.com/wekan/wekan/commit/bd796ce64248dc58ff4a192ca58796096dbef019), + [Part 11: Updated building Snap](https://github.com/wekan/wekan/commit/aa681cde88d17ee0fd957233c52297e9ab0047ce), + [Part 12: Updated Snap platforms setting](https://github.com/wekan/wekan/commit/6b401000b91dc46b810dfc27964246891b7cd68c), + [Part 13: Fix link to image about PWA app icon install. Thanks to stevenroose and xet7](https://github.com/wekan/wekan/commit/9271b07383c3544bd1368f95e79a7d4d637d5922), + [Part 14: Formatting](https://github.com/wekan/wekan/commit/fa1adfec768ad1d34f3fbd45e6332c6c0db87b05), + [Part 15: Removed old link Test Edge from docs index](https://github.com/wekan/wekan/commit/5d0a0c931f3d4ea2e65fcc412f1eeaa6cc2107d5), + [Part 16: Fix link to image at docs](https://github.com/wekan/wekan/commit/2cf57250e8bc6f6f220f0a0f8dc85a5196f80138), + [Part 17: Fixed not working link](https://github.com/wekan/wekan/commit/76769d1b855032ef17aeae3c82558cd301e2da0d), + [Part 18: Added most often used links](https://github.com/wekan/wekan/commit/4fe955650a11d77a06a319a2e707ae97d77b471f), + [Part 19: Update info about hashing](https://github.com/wekan/wekan/commit/5d09100cb6cf0cc686112587327c8cb993a559e4), + [Part 20: Updated docs about Kubernetes](https://github.com/wekan/wekan/commit/a052cc8fa5bffad652cf585cf5cab84e13afa442), + [Part 21: Removed not working link from docs](https://github.com/wekan/wekan/commit/a2654b2e2950974cf25e6acaa36a6d5a4285564c), + [Part 22: Fix docs link about CSV. Part 1](https://github.com/wekan/wekan/commit/3892be47ac0fc0ff3bdafcf44ce818eea47fe6b0), + [Part 23: Fix docs link about CSV. Part 2](https://github.com/wekan/wekan/commit/a9c67ac2006592ac575a5cb68fe575d8ac3f4d6a), + [Part 24: Updated docs about importing from Trello. Part 1](https://github.com/wekan/wekan/commit/55ef6c0c56b3b383edeb2984bcdfbf2ab7e74e6d), + [Part 25: Updated docs about importing from Trello. Part 2](https://github.com/wekan/wekan/commit/40b2cf88fc7c8a94fd9ad8690ca4ca68add68d5f), + [Part 26: Updated docs about importing from Trello. Part 3](https://github.com/wekan/wekan/commit/1610b84845f332eabc8e204a917ca5daa284d24d), + [Part 27: Updated docs about importing from Asana](https://github.com/wekan/wekan/commit/9adf5027fafbb9f44507dcc703a38de9b6215287), + [Part 28: Updated docs about migrating manually. Part 1](https://github.com/wekan/wekan/commit/450b33f98a8527423e6c5cee98bb5020a77e113f), + [Part 29: Updated docs about migrating manually. Part 2](https://github.com/wekan/wekan/commit/2f27a3f839a26a773b3a2cf8e7f93d3930b01b1a), + [Part 30: Updated docs](https://github.com/wekan/wekan/commit/d59337ae47876396c2571aa803bd57236abfc328), + [Part 31: Updated Azure link](https://github.com/wekan/wekan/commit/a5acd0801aa55b49243bdc1c001c226546537cb3), + [Part 32: Updated Keycloak link](https://github.com/wekan/wekan/commit/e0284f225b6567eb90ac0224fd348cf8e4e87229), + [Part 33: Updated image links at Azure docs](https://github.com/wekan/wekan/commit/6d16ec238a00f456494c84e08ea13eb166e42f6e), + [Part 34: Updated Python docs](https://github.com/wekan/wekan/commit/bb0814bb11bf00e73c3c48c9954792c6ca09e3be). + Thanks to xet7. + +and adds the following updates: + +- [Updated dependencies](https://github.com/wekan/wekan/commit/e6980be061a6ab54d592cd86f1079a7672a3e081). + Thanks to developers of dependencies. +- [Upgraded Snap Candidate to have base core24, MongoDB 7 and Caddy 2](https://github.com/wekan/wekan/commit/6526d99123b047fe4dfcf8f60a23f65d1261324c). + Thanks to xet7. +- [Removed old broken not used snap configuration files](https://github.com/wekan/wekan/commit/b7409c1d0b574b77f0fa95f7289d815671c1e224). + Thanks to xet7. +- [Updated release website script](https://github.com/wekan/wekan/commit/6c6b66c802e88e8dcc7d9215b9caad4c269861c5). + Thanks to xet7. + +and fixes the following bugs: + +- [CleanDark Theme Fixes](https://github.com/wekan/wekan/pull/5805). + Thanks to walster001. +- Specify meteor version, otherwise the latest meteor version is not compatible with node14. + [Part 1](https://github.com/wekan/wekan/pull/5816), + [Part 2](https://github.com/wekan/wekan/commit/51e43f1c254abee7ee12e8fdab8c52695e858fa2). + Thanks to dassio and xet7. +- [Reorganized docs to fix building WeKan](https://github.com/wekan/wekan/commit/6e11aa27f896e41c57980b45b59dc8248259421f). + Thanks to xet7. +- Fixed rebuild-wekan.sh install deps for macOS. + [Part 1](https://github.com/wekan/wekan/commit/938fe49b2c0dd523e3402b514b13ba5b605dac2b), + [Part 2](https://github.com/wekan/wekan/commit/2df73bedeebf6e6da2e4003bd236668e185f6701). + Thanks to xet7. +- [Fixed release script of building Snap locally at Ubuntu](https://github.com/wekan/wekan/commit/159324858bb2a72761082265558329eee0c0863d). + Thanks to xet7. +- [Fix: Correct return type in API documentation for Custom Fields](https://github.com/wekan/wekan/pull/5826). + Thanks to Atry. +- [Fixed Snap local build script](https://github.com/wekan/wekan/commit/69ce79a7b9e86b60482d42455701b58ae9926c69). + Thanks to xet7. +- [Fixed building Docker image. Pushed new Docker image to Docker Hub, Quay and GitHub](https://github.com/wekan/wekan/commit/f894f9ef6d8bad47260d0b648f18c36a5b208517). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.92 2025-06-12 WeKan ® release + +This release adds the following updates: + +- [Updated Docker build push action](https://github.com/wekan/wekan/pull/5795). + Thanks to dependabot. +- [Updated to MongoDB 6.0.24 at Snap Candidate](https://github.com/wekan/wekan/commit/6905e24199186274f37d8bbdfac313f957fdd54f). + Thanks to MongoDB developers. +- Updated dependencies. + [Part 1](https://github.com/wekan/wekan/commit/7115c292c7066d8d00778fa738bb11c2db467895), + [Part 2](https://github.com/wekan/wekan/commit/1f10c208744ec45e062db08a179b6e9a3b1bcd2e). + Thanks to developers of dependencies. +- [Upgrade to MongoDB 7.0.21](https://github.com/wekan/wekan/commit/d2f17ef1402335e4b3bd9de8864c68f97714febf). + Thanks to MongoDB developers. +- [Snap Candidate back to MongoDB 6.0.24, because 7.0.21 did not work](https://github.com/wekan/wekan/commit/985afafed0eb608fb95d4e54f846836b1fb0e800). + Thanks to xet7. + + +and fixes the following bugs: + +- [Allow selection of card text via webkit/user-select attributes](https://github.com/wekan/wekan/pull/5793). + Thanks to walster001. +- [Helm Chart: Fix: quote host names](https://github.com/wekan/charts/pull/41). + Thanks to Atry. +- [Fix: properly document /users/login API](https://github.com/wekan/wekan/pull/5801). + Thanks to Atry. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.91 2025-05-25 WeKan ® release + +This release adds the following updates: + +- [Updated Docker build push action](https://github.com/wekan/wekan/pull/5780). + Thanks to dependabot. + +and fixes the following bugs: + +- Reverted due date fixes. + [Part 1](https://github.com/wekan/wekan/commit/1979b1692dcaf6fd909cabfb894635f1e6a66fa8), + [Part 2](https://github.com/wekan/wekan/commit/aaa5f9885d37a369606e61a759af37f444ec606d). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.90 2025-05-14 WeKan ® release + +This release fixes the following bugs: + +- [Fix Due Date Problem in Non-English Numbers](https://github.com/wekan/wekan/pull/5774). + Thanks to valhalla-creator. +- [Added missing quotes to Fix Due Date Problem in Non-English Numbers](https://github.com/wekan/wekan/commit/c0a9780f803ed445a93a274d13504a8f245c1885). + Thanks to xet7. +- [Changed start.bat default ROOT_URL=http://localhost , although it only works for local user](https://github.com/wekan/wekan/commit/e52158b729c8ba39a55fe52e38fd6b134b42548e). + Thanks to xet7. +- [Fix Lines in multiline markdown code block to not anymore have darker background](https://github.com/wekan/wekan/commit/b82ba63532b32ec3a0c860a380648cef6739db0f). + Thanks to mueller-ma and xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.89 2025-05-13 WeKan ® release + +Note: Docker image is only at ghcr.io (GitHub) and Docker Hub (wekanteam/wekan). +Quay.io is at read only mode, they are fixing something, so it's not possible to +push Docker image yet to quay.io . + +This release adds the following new features: + +- [Add email notifications language localization feature](https://github.com/wekan/wekan/pull/5769). + Thanks to Adamsss001. + +and adds the following updates: + +- [Added script to build snap locally and push to snapcraft.io candidate and edge](https://github.com/wekan/wekan/commit/072ced9d0e53dc6c8964e9b37fc7d1036962ca19). + Thanks to xet7. +- [Updated Browser Compatibility Matrix by adding Servo](https://github.com/wekan/wekan/commit/394f2eae69542067fde9e2511ffcef165d170d2d). + Thanks to xet7. +- [Updated Caddy docs](https://github.com/wekan/wekan/commit/9aa12b0eb62962bd107fe1aa87cdf5bad5a5905f). + Thanks to xet7. +- [Upgraded to MongoDB 6.0.23 at Snap Candidate](https://github.com/wekan/wekan/commit/0bd410866196bc2faa76b9c26c12f42617321a03). + Thanks to MongoDB developers. + +and fixes the following bugs: + +- [Fix list insertion order and prevent runtime error in "Add After" feature](https://github.com/wekan/wekan/pull/5767). + Thanks to valhalla-creator. +- [Add missing code of fix insertion order of list](https://github.com/wekan/wekan/commit/7d1a1475baefb3fd20da3df835c349a62b425041). + Thanks to xet7. +- [Fix: Add CSS vendor prefixes for user-select and text-size-adjust for better browser compatibility](https://github.com/wekan/wekan/pull/5772). + Thanks to oussama-madimagh. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.88 2025-04-25 WeKan ® release + +This release fixes the following bugs: + +- [Reverted translation fix that sometimes did not work](https://github.com/wekan/wekan/commit/c825895cebd24355d076741512c9aa16844393d9). + Thanks to xet7. + +Thanks to above GitHub users for their contributions and translators for their translations. + +# v7.87 2025-04-25 WeKan ® release + +Note: This release does not work, there is bugs. Use newest release. + +This release fixes the following bugs: + +- [Fix typos](https://github.com/wekan/wekan/commit/d0ea5bf50067fd76359330986edbad8dd1fbcdcc). + Thanks to xet7. +- [Fix more contrasting issues](https://github.com/wekan/wekan/pull/5750). + Thanks to walster001. + +Thanks to above GitHub users for their contributions and translators for their translations. # v7.86 2025-04-25 WeKan ® release +Note: This release does not work, there is typos. Use newest release. + This release adds the following updates: - [Improve impersonate user documentation in docs/Admin/Impersonate-user.md](https://github.com/wekan/wekan/pull/5746). @@ -2078,7 +2438,7 @@ This release adds the following new features: - [Count of attachments on minicard. (Badges renamed to Count of attachments)](https://github.com/wekan/wekan/pull/4940). Thanks to helioguardabaxo. - [Renamed Badge to Count of attachments on minicard. Changed icons to Cover image on minicard](https://github.com/wekan/wekan/commit/825742359ef0738b110ed0904853c604bdbd1bac). - Thanks to xet7. + Thanks to xet7. - [Added conditional to show after list field only if board has at least one list. Now after list shows the last list by default](https://github.com/wekan/wekan/pull/4941). Thanks to helioguardabaxo. - [Changed Add List to be at left. Before it was at right](https://github.com/wekan/wekan/commit/467835192fbcd9d4016674fa2ee406258cc106e7). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 051a3a90a..e4d4d92e1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ Not paid: Paid by customers of WeKan Team: -- Commercial Support at https://wekan.team/commercial-support/ +- Commercial Support at https://wekan.fi/commercial-support/ - Support - Private Chat - Features diff --git a/Dockerfile b/Dockerfile index 64a4e921f..69d5aff9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ LABEL org.opencontainers.image.source="https://github.com/wekan/wekan" # to Quay to avoid Docker Hub rate limits. ARG DEBIAN_FRONTEND=noninteractive -ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3" +ENV BUILD_DEPS="apt-utils gnupg gosu wget bzip2 g++ curl libarchive-tools build-essential git ca-certificates python3 unzip" ENV \ DEBUG=false \ @@ -167,7 +167,7 @@ ENV \ #--------------------------------------------------------------------- # Copy the app to the image -COPY ${SRC_PATH} /home/wekan/app +#COPY ${SRC_PATH} /home/wekan/app # Install OS RUN < { + if (err) { + this.isLoadingLockedUsers.set(false); + const reason = err.reason || ''; + const message = `${TAPi18n.__(err.error)}\n${reason}`; + alert(message); + return; + } + + // If no users are locked, don't show loading spinner and set empty array + if (!users || users.length === 0) { + this.isLoadingLockedUsers.set(false); + this.lockedUsers.set([]); + return; + } + + // Format the remaining time to be more human-readable + users.forEach(user => { + if (user.remainingLockTime > 60) { + const minutes = Math.floor(user.remainingLockTime / 60); + const seconds = user.remainingLockTime % 60; + user.remainingTimeFormatted = `${minutes}m ${seconds}s`; + } else { + user.remainingTimeFormatted = `${user.remainingLockTime}s`; + } + }); + + this.lockedUsers.set(users); + this.isLoadingLockedUsers.set(false); + }); + }, + + unlockUser(event) { + const userId = $(event.currentTarget).data('user-id'); + if (!userId) return; + + if (confirm(TAPi18n.__('accounts-lockout-confirm-unlock'))) { + Meteor.call('unlockUser', userId, (err, result) => { + if (err) { + const reason = err.reason || ''; + const message = `${TAPi18n.__(err.error)}\n${reason}`; + alert(message); + return; + } + + if (result) { + alert(TAPi18n.__('accounts-lockout-user-unlocked')); + this.refreshLockedUsers(); + } + }); + } + }, + + unlockAllUsers() { + if (confirm(TAPi18n.__('accounts-lockout-confirm-unlock-all'))) { + Meteor.call('unlockAllUsers', (err, result) => { + if (err) { + const reason = err.reason || ''; + const message = `${TAPi18n.__(err.error)}\n${reason}`; + alert(message); + return; + } + + if (result) { + alert(TAPi18n.__('accounts-lockout-user-unlocked')); + this.refreshLockedUsers(); + } + }); + } + }, + + saveLockoutSettings() { + // Get values from form + const knownFailuresBeforeLockout = parseInt($('#known-failures-before-lockout').val(), 10) || 3; + const knownLockoutPeriod = parseInt($('#known-lockout-period').val(), 10) || 60; + const knownFailureWindow = parseInt($('#known-failure-window').val(), 10) || 15; + + const unknownFailuresBeforeLockout = parseInt($('#unknown-failures-before-lockout').val(), 10) || 3; + const unknownLockoutPeriod = parseInt($('#unknown-lockout-period').val(), 10) || 60; + const unknownFailureWindow = parseInt($('#unknown-failure-window').val(), 10) || 15; + + // Update the database + LockoutSettings.update('known-failuresBeforeLockout', { + $set: { value: knownFailuresBeforeLockout }, + }); + LockoutSettings.update('known-lockoutPeriod', { + $set: { value: knownLockoutPeriod }, + }); + LockoutSettings.update('known-failureWindow', { + $set: { value: knownFailureWindow }, + }); + + LockoutSettings.update('unknown-failuresBeforeLockout', { + $set: { value: unknownFailuresBeforeLockout }, + }); + LockoutSettings.update('unknown-lockoutPeriod', { + $set: { value: unknownLockoutPeriod }, + }); + LockoutSettings.update('unknown-failureWindow', { + $set: { value: unknownFailureWindow }, + }); + + // Reload the AccountsLockout configuration + Meteor.call('reloadAccountsLockout', (err, ret) => { + if (!err && ret) { + const message = TAPi18n.__('accounts-lockout-settings-updated'); + alert(message); + } else { + const reason = err?.reason || ''; + const message = `${TAPi18n.__(err?.error || 'error-updating-settings')}\n${reason}`; + alert(message); + } + }); + }, + + knownFailuresBeforeLockout() { + return LockoutSettings.findOne('known-failuresBeforeLockout')?.value || 3; + }, + + knownLockoutPeriod() { + return LockoutSettings.findOne('known-lockoutPeriod')?.value || 60; + }, + + knownFailureWindow() { + return LockoutSettings.findOne('known-failureWindow')?.value || 15; + }, + + unknownFailuresBeforeLockout() { + return LockoutSettings.findOne('unknown-failuresBeforeLockout')?.value || 3; + }, + + unknownLockoutPeriod() { + return LockoutSettings.findOne('unknown-lockoutPeriod')?.value || 60; + }, + + unknownFailureWindow() { + return LockoutSettings.findOne('unknown-failureWindow')?.value || 15; + }, + + lockedUsers() { + return this.lockedUsers.get(); + }, + + isLoadingLockedUsers() { + return this.isLoadingLockedUsers.get(); + }, + + events() { + return [ + { + 'click button.js-refresh-locked-users': this.refreshLockedUsers, + 'click button#refreshLockedUsers': this.refreshLockedUsers, + 'click button.js-unlock-user': this.unlockUser, + 'click button.js-unlock-all-users': this.unlockAllUsers, + 'click button.js-lockout-save': this.saveLockoutSettings, + }, + ]; + }, +}).register('lockedUsersGeneral'); diff --git a/client/components/settings/peopleBody.css b/client/components/settings/peopleBody.css index 5d426ce37..9a8a0a640 100644 --- a/client/components/settings/peopleBody.css +++ b/client/components/settings/peopleBody.css @@ -89,3 +89,94 @@ table tr:nth-child(even) { #deleteAction { margin-left: 5% !important; } + +.divLockedUsersFilter { + display: flex; + align-items: center; + margin: 0 15px; +} + +.divLockedUsersFilter .flex-container { + display: flex; + align-items: center; + gap: 8px; +} + +.divLockedUsersFilter .people-filter { + margin-bottom: 0; + color: #777; + line-height: 34px; +} + +.divLockedUsersFilter .user-filter { + border: 1px solid #ccc; + border-radius: 2px; + padding: 4px 8px; + background-color: white; +} + +.unlock-all-btn { + margin-left: 15px; + background-color: white; + color: #4d4d4d; + border: 1px solid rgba(0,0,0,.15); + border-radius: 2px; + padding: 0 10px; + cursor: pointer; + display: flex; + align-items: center; + gap: 5px; + height: 28px; + min-width: 90px; + /* box-shadow: 0 1px 6px rgba(0,0,0,.3); */ +} + +.unlock-all-btn:hover { + background-color: #f2f2f2; +} + +.account-active-status { + width: 20px; + text-align: center; +} + +.js-toggle-active-status { + cursor: pointer; +} + +.unlock-all-success { + position: fixed; + top: 10%; + left: 50%; + transform: translateX(-50%); + background-color: #27ae60; + color: white; + padding: 10px 20px; + border-radius: 4px; + z-index: 9999; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); + animation: fadeOut 3s ease-in forwards; +} + +@keyframes fadeOut { + 0% { opacity: 1; } + 70% { opacity: 1; } + 100% { opacity: 0; } +} + +.account-status { + width: 20px; + text-align: center; +} + +.text-green { + color: #27ae60; +} + +.js-toggle-lock-status { + cursor: pointer; +} + +.unlock-all-btn .fa { + color: #4d4d4d; +} diff --git a/client/components/settings/peopleBody.jade b/client/components/settings/peopleBody.jade index 5f56a6142..afd918b8e 100644 --- a/client/components/settings/peopleBody.jade +++ b/client/components/settings/peopleBody.jade @@ -38,12 +38,28 @@ template(name="people") button#searchButton i.fa.fa-search | {{_ 'search'}} + .divLockedUsersFilter + .flex-container + span.people-filter {{_ 'admin-people-filter-show'}} + select.user-filter#userFilterSelect + option(value="all") {{_ 'admin-people-filter-all'}} + option(value="locked") {{_ 'admin-people-filter-locked'}} + option(value="active") {{_ 'admin-people-filter-active'}} + option(value="inactive") {{_ 'admin-people-filter-inactive'}} + button#unlockAllUsers.unlock-all-btn + i.fa.fa-unlock + | {{_ 'accounts-lockout-unlock-all'}} .ext-box-right span {{#unless isMiniScreen}}{{_ 'people-number'}}{{/unless}} #{peopleNumber} .divAddOrRemoveTeam#divAddOrRemoveTeam button#addOrRemoveTeam i.fa.fa-edit | {{_ 'add'}} / {{_ 'delete'}} {{_ 'teams'}} + else if lockedUsersSetting.get + span + i.fa.fa-lock.text-red + unless isMiniScreen + | {{_ 'accounts-lockout-locked-users'}} .content-body .side-menu @@ -60,6 +76,10 @@ template(name="people") a.js-people-menu(data-id="people-setting") i.fa.fa-user | {{_ 'people'}} + li + a.js-locked-users-menu(data-id="locked-users-setting") + i.fa.fa-lock.text-red + | {{_ 'accounts-lockout-locked-users'}} .main-body if loading.get +spinner @@ -69,6 +89,8 @@ template(name="people") +teamGeneral else if peopleSetting.get +peopleGeneral + else if lockedUsersSetting.get + +lockedUsersGeneral template(name="orgGeneral") @@ -114,6 +136,8 @@ template(name="peopleGeneral") tr th +selectAllUser + th {{_ 'accounts-lockout-status'}} + th {{_ 'admin-people-active-status'}} th {{_ 'username'}} th {{_ 'fullname'}} th {{_ 'initials'}} @@ -232,8 +256,20 @@ template(name="peopleRow") else td input.selectUserChkBox(type="checkbox", id="{{userData._id}}") + td.account-status + if isUserLocked + i.fa.fa-lock.text-red.js-toggle-lock-status(data-user-id=userData._id, data-is-locked="true", title="{{_ 'accounts-lockout-click-to-unlock'}}") + else + i.fa.fa-unlock.text-green.js-toggle-lock-status(data-user-id=userData._id, data-is-locked="false", title="{{_ 'accounts-lockout-user-unlocked'}}") + td.account-active-status + if userData.loginDisabled + i.fa.fa-ban.text-red.js-toggle-active-status(data-user-id=userData._id, data-is-active="false", title="{{_ 'admin-people-user-inactive'}}") + else + i.fa.fa-check-circle.text-green.js-toggle-active-status(data-user-id=userData._id, data-is-active="true", title="{{_ 'admin-people-user-active'}}") if userData.loginDisabled td.username {{ userData.username }} + else if isUserLocked + td.username {{ userData.username }} else td.username {{ userData.username }} if userData.loginDisabled @@ -645,3 +681,32 @@ template(name="settingsUserPopup") // that does now remove member from board, card members and assignees correctly, // but that should be used to remove user from all boards similarly // - wekan/models/users.js Delete is not enabled + +template(name="lockedUsersGeneral") + .locked-users-settings + h3 {{_ 'accounts-lockout-settings'}} + p {{_ 'accounts-lockout-info'}} + + h4 {{_ 'accounts-lockout-known-users'}} + .title {{_ 'accounts-lockout-failures-before'}} + .form-group + input.wekan-form-control#known-failures-before-lockout(type="number", min="1", max="10", placeholder="3" value="{{knownFailuresBeforeLockout}}") + .title {{_ 'accounts-lockout-period'}} + .form-group + input.wekan-form-control#known-lockout-period(type="number", min="10", max="600", placeholder="60" value="{{knownLockoutPeriod}}") + .title {{_ 'accounts-lockout-failure-window'}} + .form-group + input.wekan-form-control#known-failure-window(type="number", min="1", max="60", placeholder="15" value="{{knownFailureWindow}}") + + h4 {{_ 'accounts-lockout-unknown-users'}} + .title {{_ 'accounts-lockout-failures-before'}} + .form-group + input.wekan-form-control#unknown-failures-before-lockout(type="number", min="1", max="10", placeholder="3" value="{{unknownFailuresBeforeLockout}}") + .title {{_ 'accounts-lockout-period'}} + .form-group + input.wekan-form-control#unknown-lockout-period(type="number", min="10", max="600", placeholder="60" value="{{unknownLockoutPeriod}}") + .title {{_ 'accounts-lockout-failure-window'}} + .form-group + input.wekan-form-control#unknown-failure-window(type="number", min="1", max="60", placeholder="15" value="{{unknownFailureWindow}}") + + button.js-lockout-save.primary {{_ 'save'}} diff --git a/client/components/settings/peopleBody.js b/client/components/settings/peopleBody.js index b80890c58..63167deeb 100644 --- a/client/components/settings/peopleBody.js +++ b/client/components/settings/peopleBody.js @@ -1,4 +1,5 @@ import { ReactiveCache } from '/imports/reactiveCache'; +import LockoutSettings from '/models/lockoutSettings'; const orgsPerPage = 25; const teamsPerPage = 25; @@ -14,14 +15,16 @@ BlazeComponent.extendComponent({ this.error = new ReactiveVar(''); this.loading = new ReactiveVar(false); this.orgSetting = new ReactiveVar(true); - this.teamSetting = new ReactiveVar(true); - this.peopleSetting = new ReactiveVar(true); + this.teamSetting = new ReactiveVar(false); + this.peopleSetting = new ReactiveVar(false); + this.lockedUsersSetting = new ReactiveVar(false); this.findOrgsOptions = new ReactiveVar({}); this.findTeamsOptions = new ReactiveVar({}); this.findUsersOptions = new ReactiveVar({}); this.numberOrgs = new ReactiveVar(0); this.numberTeams = new ReactiveVar(0); this.numberPeople = new ReactiveVar(0); + this.userFilterType = new ReactiveVar('all'); this.page = new ReactiveVar(1); this.loadNextPageLocked = false; @@ -92,6 +95,34 @@ BlazeComponent.extendComponent({ this.filterPeople(); } }, + 'change #userFilterSelect'(event) { + const filterType = $(event.target).val(); + this.userFilterType.set(filterType); + this.filterPeople(); + }, + 'click #unlockAllUsers'(event) { + event.preventDefault(); + if (confirm(TAPi18n.__('accounts-lockout-confirm-unlock-all'))) { + Meteor.call('unlockAllUsers', (error) => { + if (error) { + console.error('Error unlocking all users:', error); + } else { + // Show a brief success message + const message = document.createElement('div'); + message.className = 'unlock-all-success'; + message.textContent = TAPi18n.__('accounts-lockout-all-users-unlocked'); + document.body.appendChild(message); + + // Remove the message after a short delay + setTimeout(() => { + if (message.parentNode) { + message.parentNode.removeChild(message); + } + }, 3000); + } + }); + } + }, 'click #newOrgButton'() { Popup.open('newOrg'); }, @@ -104,23 +135,50 @@ BlazeComponent.extendComponent({ 'click a.js-org-menu': this.switchMenu, 'click a.js-team-menu': this.switchMenu, 'click a.js-people-menu': this.switchMenu, + 'click a.js-locked-users-menu': this.switchMenu, }, ]; }, filterPeople() { const value = $('#searchInput').first().val(); - if (value === '') { - this.findUsersOptions.set({}); - } else { + const filterType = this.userFilterType.get(); + const currentTime = Number(new Date()); + + let query = {}; + + // Apply text search filter if there's a search value + if (value !== '') { const regex = new RegExp(value, 'i'); - this.findUsersOptions.set({ + query = { $or: [ { username: regex }, { 'profile.fullname': regex }, { 'emails.address': regex }, ], - }); + }; } + + // Apply filter based on selected option + switch (filterType) { + case 'locked': + // Show only locked users + query['services.accounts-lockout.unlockTime'] = { $gt: currentTime }; + break; + case 'active': + // Show only active users (loginDisabled is false or undefined) + query['loginDisabled'] = { $ne: true }; + break; + case 'inactive': + // Show only inactive users (loginDisabled is true) + query['loginDisabled'] = true; + break; + case 'all': + default: + // Show all users, no additional filter + break; + } + + this.findUsersOptions.set(query); }, loadNextPage() { if (this.loadNextPageLocked === false) { @@ -186,6 +244,16 @@ BlazeComponent.extendComponent({ this.orgSetting.set('org-setting' === targetID); this.teamSetting.set('team-setting' === targetID); this.peopleSetting.set('people-setting' === targetID); + this.lockedUsersSetting.set('locked-users-setting' === targetID); + + // When switching to locked users tab, refresh the locked users list + if ('locked-users-setting' === targetID) { + // Find the lockedUsersGeneral component and call refreshLockedUsers + const lockedUsersComponent = Blaze.getView($('.main-body')[0])._templateInstance; + if (lockedUsersComponent && lockedUsersComponent.refreshLockedUsers) { + lockedUsersComponent.refreshLockedUsers(); + } + } } }, }).register('people'); @@ -206,8 +274,36 @@ Template.peopleRow.helpers({ userData() { return ReactiveCache.getUser(this.userId); }, + isUserLocked() { + const user = ReactiveCache.getUser(this.userId); + if (!user) return false; + + // Check if user has accounts-lockout with unlockTime property + if (user.services && + user.services['accounts-lockout'] && + user.services['accounts-lockout'].unlockTime) { + + // Check if unlockTime is in the future + const currentTime = Number(new Date()); + return user.services['accounts-lockout'].unlockTime > currentTime; + } + + return false; + } }); +// Initialize filter dropdown +Template.people.rendered = function() { + const template = this; + + // Set the initial value of the dropdown + Tracker.afterFlush(function() { + if (template.findAll('#userFilterSelect').length) { + $('#userFilterSelect').val('all'); + } + }); +}; + Template.editUserPopup.onCreated(function () { this.authenticationMethods = new ReactiveVar([]); this.errorMessage = new ReactiveVar(''); @@ -415,6 +511,49 @@ BlazeComponent.extendComponent({ else document.getElementById("divAddOrRemoveTeam").style.display = 'none'; }, + 'click .js-toggle-active-status': function(ev) { + ev.preventDefault(); + const userId = this.userId; + const user = ReactiveCache.getUser(userId); + + if (!user) return; + + // Toggle loginDisabled status + const isActive = !(user.loginDisabled === true); + + // Update the user's active status + Users.update(userId, { + $set: { + loginDisabled: isActive + } + }); + }, + 'click .js-toggle-lock-status': function(ev){ + ev.preventDefault(); + const userId = this.userId; + const user = ReactiveCache.getUser(userId); + + if (!user) return; + + // Check if user is currently locked + const isLocked = user.services && + user.services['accounts-lockout'] && + user.services['accounts-lockout'].unlockTime && + user.services['accounts-lockout'].unlockTime > Number(new Date()); + + if (isLocked) { + // Unlock the user + Meteor.call('unlockUser', userId, (error) => { + if (error) { + console.error('Error unlocking user:', error); + } + }); + } else { + // Lock the user - this is optional, you may want to only allow unlocking + // If you want to implement locking too, you would need a server method for it + // For now, we'll leave this as a no-op + } + }, }, ]; }, diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 3e6ec2af6..d678590ff 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -30,10 +30,10 @@ 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="accessibility-setting") + i.fa.fa-universal-access + | {{_ 'accessibility'}} li a.js-setting-menu(data-id="layout-setting") i.fa.fa-object-group @@ -171,6 +171,8 @@ template(name='accountSettings') label {{_ 'no'}} button.js-accounts-save.primary {{_ 'save'}} + // Brute force lockout settings moved to People/Locked Users section + template(name='announcementSettings') ul#announcement-setting.setting-detail li @@ -189,24 +191,22 @@ template(name='announcementSettings') template(name='accessibilitySettings') ul#accessibility-setting.setting-detail + li + a(href="/accessibility" style="text-decoration: underline; color: blue;") {{_ 'accessibility'}} 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}}") + span {{_ 'accessibility-page-enabled'}} li .accessibility-content(class="{{#if currentAccessibility.enabled}}{{else}}hide{{/if}}") ul li - .title {{_ 'admin-accessibility-title'}} - textarea#admin-accessibility.wekan-form-control= currentAccessibility.accessibilityTitle + .title {{_ 'accessibility-title'}} + textarea#admin-accessibility-title.wekan-form-control= currentAccessibility.title li - .title {{_ 'admin-accessibility-content'}} - textarea#admin-accessibility.wekan-form-control= currentAccessibility.accessibilityContent + .title {{_ 'accessibility-content'}} + textarea#admin-accessibility-content.wekan-form-control= currentAccessibility.body li button.js-accessibility-save.primary {{_ 'save'}} diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js index be8322af3..d66c5b307 100644 --- a/client/components/settings/settingBody.js +++ b/client/components/settings/settingBody.js @@ -1,6 +1,7 @@ import { ReactiveCache } from '/imports/reactiveCache'; import { TAPi18n } from '/imports/i18n'; import { ALLOWED_WAIT_SPINNERS } from '/config/const'; +import LockoutSettings from '/models/lockoutSettings'; BlazeComponent.extendComponent({ onCreated() { @@ -12,6 +13,7 @@ BlazeComponent.extendComponent({ this.accountSetting = new ReactiveVar(false); this.tableVisibilityModeSetting = new ReactiveVar(false); this.announcementSetting = new ReactiveVar(false); + this.accessibilitySetting = new ReactiveVar(false); this.layoutSetting = new ReactiveVar(false); this.webhookSetting = new ReactiveVar(false); @@ -20,7 +22,9 @@ BlazeComponent.extendComponent({ Meteor.subscribe('accountSettings'); Meteor.subscribe('tableVisibilityModeSettings'); Meteor.subscribe('announcements'); + Meteor.subscribe('accessibilitySettings'); Meteor.subscribe('globalwebhooks'); + Meteor.subscribe('lockoutSettings'); }, setError(error) { @@ -106,6 +110,7 @@ BlazeComponent.extendComponent({ this.emailSetting.set('email-setting' === targetID); this.accountSetting.set('account-setting' === targetID); this.announcementSetting.set('announcement-setting' === targetID); + this.accessibilitySetting.set('accessibility-setting' === targetID); this.layoutSetting.set('layout-setting' === targetID); this.webhookSetting.set('webhook-setting' === targetID); this.tableVisibilityModeSetting.set('tableVisibilityMode-setting' === targetID); @@ -242,7 +247,6 @@ 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() @@ -250,7 +254,6 @@ BlazeComponent.extendComponent({ const accessibilityContent = $('#accessibility-content') .val() .trim(); -*/ const spinnerName = $('#spinnerName').val(); try { @@ -274,13 +277,11 @@ BlazeComponent.extendComponent({ oidcBtnText, mailDomainName, legalNotice, - }, - }); -/* accessibilityPageEnabled, accessibilityTitle, accessibilityContent, -*/ + }, + }); } catch (e) { return; } finally { @@ -317,7 +318,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, @@ -344,15 +344,23 @@ BlazeComponent.extendComponent({ $set: { booleanValue: allowUserDelete }, }); }, + + // Brute force lockout settings method moved to lockedUsersBody.js + allowEmailChange() { - return AccountSettings.findOne('accounts-allowEmailChange').booleanValue; + return AccountSettings.findOne('accounts-allowEmailChange')?.booleanValue || false; }, + allowUserNameChange() { - return AccountSettings.findOne('accounts-allowUserNameChange').booleanValue; + return AccountSettings.findOne('accounts-allowUserNameChange')?.booleanValue || false; }, + allowUserDelete() { - return AccountSettings.findOne('accounts-allowUserDelete').booleanValue; + return AccountSettings.findOne('accounts-allowUserDelete')?.booleanValue || false; }, + + // Lockout settings helper methods moved to lockedUsersBody.js + allBoardsHideActivities() { Meteor.call('setAllBoardsHideActivities', (err, ret) => { if (!err && ret) { @@ -469,6 +477,59 @@ BlazeComponent.extendComponent({ }, }).register('announcementSettings'); +BlazeComponent.extendComponent({ + onCreated() { + this.loading = new ReactiveVar(false); + }, + + setLoading(w) { + this.loading.set(w); + }, + + currentAccessibility() { + return AccessibilitySettings.findOne(); + }, + + saveAccessibility() { + const title = $('#admin-accessibility-title') + .val() + .trim(); + const content = $('#admin-accessibility-content') + .val() + .trim(); + AccessibilitySettings.update(AccessibilitySettings.findOne()._id, { + $set: { + title: title, + body: content + }, + }); + }, + + toggleAccessibility() { + this.setLoading(true); + const accessibilitySetting = this.currentAccessibility(); + const isActive = accessibilitySetting.enabled; + AccessibilitySettings.update(accessibilitySetting._id, { + $set: { enabled: !isActive }, + }); + this.setLoading(false); + if (isActive) { + $('.accessibility-content').slideUp(); + } else { + $('.accessibility-content').slideDown(); + } + }, + + events() { + return [ + { + 'click a.js-toggle-accessibility': this.toggleAccessibility, + 'click button.js-accessibility-save': this.saveAccessibility, + }, + ]; + }, +}).register('accessibilitySettings'); + Template.selectAuthenticationMethod.onCreated(function() { this.authenticationMethods = new ReactiveVar([]); diff --git a/client/components/sidebar/sidebar.css b/client/components/sidebar/sidebar.css index 7dffd8256..831719f36 100644 --- a/client/components/sidebar/sidebar.css +++ b/client/components/sidebar/sidebar.css @@ -106,7 +106,7 @@ top: 7px; font-size: 1em; line-height: 1.6em; - color: #999; + color: #000; } .sidebar .sidebar-shortcuts .sidebar-btn { margin-left: 3px; @@ -146,6 +146,23 @@ font-size: 24px; transition: transform 0.5s; } +.sidebar-accessibility { + color: #4d4d4d; + padding: 5px 10px; + display: flex; + align-items: center; + text-decoration: none; + border-radius: 3px; + cursor: pointer; + margin-left: auto; + margin-right: 30px; +} +.sidebar-accessibility:hover { + background-color: #d9d9d9; +} +.sidebar-accessibility span { + margin-left: 5px; +} .board-sidebar.is-open .sidebar-tongue { left: -28px; } diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 3bfb44011..f71808765 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -12,6 +12,10 @@ template(name="sidebar") 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}}") + if isAccessibilityEnabled + a.sidebar-accessibility + i.fa.fa-universal-access + span {{_ 'accessibility'}} a.sidebar-xmark.js-close-sidebar ✕ .sidebar-content.js-board-sidebar-content //a.hide-btn.js-hide-sidebar diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 28b7408fc..e0a37ebbb 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -26,6 +26,9 @@ BlazeComponent.extendComponent({ this._hideCardCounterList = new ReactiveVar(false); this._hideBoardMemberList = new ReactiveVar(false); Sidebar = this; + + // Subscribe to accessibility settings + Meteor.subscribe('accessibilitySettings'); }, onDestroyed() { @@ -115,6 +118,11 @@ BlazeComponent.extendComponent({ return user && user.isVerticalScrollbars(); }, + isAccessibilityEnabled() { + const setting = AccessibilitySettings.findOne({}); + return setting && setting.enabled; + }, + events() { return [ { @@ -145,6 +153,10 @@ BlazeComponent.extendComponent({ 'click .js-show-week-of-year-toggle'() { ReactiveCache.getCurrentUser().toggleShowWeekOfYear(); }, + 'click .sidebar-accessibility'() { + FlowRouter.go('accessibility'); + Sidebar.toggle(); + }, 'click .js-close-sidebar'() { Sidebar.toggle() }, diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 09ff81db3..32a778b3c 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -250,36 +250,45 @@ BlazeComponent.extendComponent({ return [ { submit(evt) { - evt.preventDefault(); - const lastList = this.currentBoard.getLastList(); - const titleInput = this.find('.list-name-input'); - const title = titleInput.value.trim(); - let sortIndex = 0 - if (lastList) { - const positionInput = this.find('.list-position-input'); - const position = positionInput.value.trim(); - const ret = ReactiveCache.getList({ boardId: Utils.getCurrentBoardId(), _id: position, archived: false }) - sortIndex = parseInt(JSON.stringify(ret['sort'])) - sortIndex = sortIndex+1 - } else { - sortIndex = Utils.calculateIndexData(lastList, null).base; - } + evt.preventDefault(); + + const titleInput = this.find('.list-name-input'); + const title = titleInput?.value.trim(); + + if (!title) return; + + let sortIndex = 0; + const lastList = this.currentBoard.getLastList(); + const boardId = Utils.getCurrentBoardId(); + + const positionInput = this.find('.list-position-input'); + + if (positionInput) { + const positionId = positionInput.value.trim(); + const selectedList = ReactiveCache.getList({ boardId, _id: positionId, archived: false }); + + if (selectedList) { + sortIndex = selectedList.sort + 1; + } else { + sortIndex = Utils.calculateIndexData(lastList, null).base; + } + } else { + sortIndex = Utils.calculateIndexData(lastList, null).base; + } - if (title) { Lists.insert({ title, boardId: Session.get('currentBoard'), sort: sortIndex, type: this.isListTemplatesSwimlane ? 'template-list' : 'list', - swimlaneId: this.currentBoard.isTemplatesBoard() - ? this.currentSwimlane._id - : '', + swimlaneId: this.currentBoard.isTemplatesBoard() ? this.currentSwimlane._id : '', }); titleInput.value = ''; titleInput.focus(); - } - }, + } + }, + { 'click .js-list-template': Popup.open('searchElement'), }, ]; diff --git a/docker-compose.yml b/docker-compose.yml index f2e47e168..9c198186c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,14 @@ # Note: Do not add single quotes '' to variables. Having spaces still works without quotes where required. #--------------------------------------------------------------------------------------------------------- # ==== CREATING USERS AND LOGGING IN TO WEKAN ==== -# https://github.com/wekan/wekan/wiki/Adding-users +# https://github.com/wekan/wekan/blob/main/docs/Login/Adding-users.md #--------------------------------------------------------------------------------------------------------- # ==== FORGOT PASSWORD ==== -# https://github.com/wekan/wekan/wiki/Forgot-Password +# https://github.com/wekan/wekan/blob/main/docs/Login/Forgot-Password.md #--------------------------------------------------------------------------------------------------------- # ==== Upgrading Wekan to new version ===== # 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 +# see https://github.com/wekan/wekan/tree/main/docs/Backup # 1) Stop Wekan: # docker compose stop # 2) Remove old Wekan app (wekan-app only, not that wekan-db container that has all your data) @@ -46,7 +46,7 @@ # docker compose stop # ---------------------------------------------------------------------------------- # ===== INSIDE DOCKER CONTAINERS, AND BACKUP/RESTORE ==== -# https://github.com/wekan/wekan/wiki/Backup +# https://github.com/wekan/wekan/tree/main/docs/Backup # If really necessary, repair MongoDB: https://github.com/wekan/wekan-mongodb/issues/6#issuecomment-424004116 # 1) Going inside containers: # a) Wekan app, does not contain data @@ -89,7 +89,7 @@ services: wekandb: #------------------------------------------------------------------------------------- # ==== MONGODB FROM DOCKER HUB ==== - image: mongo:6 + image: mongo:7 #------------------------------------------------------------------------------------- container_name: wekan-db restart: always @@ -183,7 +183,7 @@ services: # ==== EMAIL SETTINGS ==== # Email settings are only at MAIL_URL and MAIL_FROM. # Admin Panel has test button, but it's not used for settings. - # see https://github.com/wekan/wekan/wiki/Troubleshooting-Mail + # see https://github.com/wekan/wekan/blob/main/docs/Email/Troubleshooting-Mail.md # For SSL in email, change smtp:// to smtps:// # NOTE: Special characters need to be url-encoded in MAIL_URL. # You can encode those characters for example at: https://www.urlencoder.org @@ -228,7 +228,7 @@ services: #- APM_APP_SECRET= #--------------------------------------------------------------- # ==== OPTIONAL: LOGS AND STATS ==== - # https://github.com/wekan/wekan/wiki/Logs + # https://github.com/wekan/wekan/blob/main/docs/Features/Logs.md # # Daily export of Wekan changes as JSON to Logstash and ElasticSearch / Kibana (ELK) # https://github.com/wekan/wekan-logstash @@ -252,7 +252,7 @@ services: #--------------------------------------------------------------- # ==== WEKAN API AND EXPORT BOARD ==== # Wekan Export Board works when WITH_API=true. - # https://github.com/wekan/wekan/wiki/REST-API + # https://github.com/wekan/wekan/blob/main/docs/API/REST-API.md # https://github.com/wekan/wekan-gogs # If you disable Wekan API with false, Export Board does not work. - WITH_API=true @@ -361,7 +361,7 @@ services: #- TRUSTED_URL=https://intra.example.com #----------------------------------------------------------------- # ==== METRICS ALLOWED IP ADDRESSES ==== - # https://github.com/wekan/wekan/wiki/Metrics + # https://github.com/wekan/wekan/blob/main/docs/Features/Metrics.md #- METRICS_ALLOWED_IP_ADDRESSES=192.168.0.100,192.168.0.200 #----------------------------------------------------------------- # ==== OUTGOING WEBHOOKS ==== @@ -372,14 +372,14 @@ services: #- DEBUG=true #--------------------------------------------- # ==== AUTOLOGIN WITH OIDC/OAUTH2 ==== - # https://github.com/wekan/wekan/wiki/autologin + # https://github.com/wekan/wekan/blob/main/docs/Login/autologin.md #- OIDC_REDIRECTION_ENABLED=true #----------------------------------------------------------------- # ==== OAUTH2 ORACLE on premise identity manager OIM ==== #- ORACLE_OIM_ENABLED=true #----------------------------------------------------------------- # ==== OAUTH2 AZURE ==== - # https://github.com/wekan/wekan/wiki/Azure + # https://github.com/wekan/wekan/blob/main/docs/Login/Azure/Azure.md # 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 @@ -437,7 +437,7 @@ services: #- OAUTH2_EMAIL_MAP=email #----------------------------------------------------------------- # ==== OAUTH2 KEYCLOAK ==== - # https://github.com/wekan/wekan/wiki/Keycloak <== MAPPING INFO, REQUIRED + # https://github.com/wekan/wekan/blob/main/docs/Login/Keycloak/Keycloak.md <== MAPPING INFO, REQUIRED #- OAUTH2_ENABLED=true # OAuth2 login style: popup or redirect. #- OAUTH2_LOGIN_STYLE=redirect @@ -454,10 +454,10 @@ services: #----------------------------------------------------------------- # ==== OAUTH2 DOORKEEPER ==== # https://github.com/wekan/wekan/issues/1874 - # https://github.com/wekan/wekan/wiki/OAuth2 + # https://github.com/wekan/wekan/blob/main/docs/Login/OAuth2.md2 # Enable the OAuth2 connection #- OAUTH2_ENABLED=true - # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 + # OAuth2 docs: https://github.com/wekan/wekan/blob/main/docs/Login/OAuth2.md # OAuth2 login style: popup or redirect. #- OAUTH2_LOGIN_STYLE=redirect # OAuth2 Client ID. @@ -486,8 +486,8 @@ services: #- OAUTH2_EMAIL_MAP= #----------------------------------------------------------------- # ==== LDAP: UNCOMMENT ALL TO ENABLE LDAP ==== - # https://github.com/wekan/wekan/wiki/LDAP - # For Snap settings see https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys + # https://github.com/wekan/wekan/blob/main/docs/Login/LDAP.md + # For Snap settings see https://github.com/wekan/wekan/blob/main/docs/Platforms/FOSS/Snap/Supported-settings-keys.md # Most settings work both on Snap and Docker below. # Note: Do not add single quotes '' to variables. Having spaces still works without quotes where required. # diff --git a/docs/API/REST-API-Boards.md b/docs/API/Boards.md similarity index 96% rename from docs/API/REST-API-Boards.md rename to docs/API/Boards.md index 7715a4e18..94e623fe3 100644 --- a/docs/API/REST-API-Boards.md +++ b/docs/API/Boards.md @@ -40,7 +40,7 @@ Optional, and defaults: - "permission":"private" <== Set to "public" if you want public Wekan board - "color":"belize" <== Board color: belize, nephritis, pomegranate, pumpkin, wisteria, midnight. -Wekan logo +Wekan logo Example: ``` diff --git a/docs/API/REST-API-Cards.md b/docs/API/Cards.md similarity index 100% rename from docs/API/REST-API-Cards.md rename to docs/API/Cards.md diff --git a/docs/API/REST-API-Checklists.md b/docs/API/Checklists.md similarity index 100% rename from docs/API/REST-API-Checklists.md rename to docs/API/Checklists.md diff --git a/docs/API/REST-API-Code.md b/docs/API/Code.md similarity index 95% rename from docs/API/REST-API-Code.md rename to docs/API/Code.md index 03775a284..c69e5cdc1 100644 --- a/docs/API/REST-API-Code.md +++ b/docs/API/Code.md @@ -28,6 +28,6 @@ https://github.com/wekan/wekan/blob/main/api.py ### 4) API Docs -https://wekan.github.io/api/ +https://wekan.fi/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/Custom-Fields.md similarity index 95% rename from docs/API/REST-API-Custom-Fields.md rename to docs/API/Custom-Fields.md index e52b966a1..b8dac272e 100644 --- a/docs/API/REST-API-Custom-Fields.md +++ b/docs/API/Custom-Fields.md @@ -2,10 +2,10 @@ 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 +https://wekan.fi/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 +https://wekan.fi/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: ``` diff --git a/docs/API/REST-API-Integrations.md b/docs/API/Integrations.md similarity index 100% rename from docs/API/REST-API-Integrations.md rename to docs/API/Integrations.md diff --git a/docs/API/REST-API-Lists.md b/docs/API/Lists.md similarity index 100% rename from docs/API/REST-API-Lists.md rename to docs/API/Lists.md diff --git a/docs/API/New-card-with-Python3-and-REST-API.md b/docs/API/New-card-with-Python3-and-REST-API.md index 8507875e9..cd8ed80ed 100644 --- a/docs/API/New-card-with-Python3-and-REST-API.md +++ b/docs/API/New-card-with-Python3-and-REST-API.md @@ -3,7 +3,7 @@ Wekan provides a python script to ease the call of the REST API from command lin # 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 +- [API docs and examples for various programming languages](https://wekan.fi/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 diff --git a/docs/API/REST-API-Role.md b/docs/API/Role.md similarity index 99% rename from docs/API/REST-API-Role.md rename to docs/API/Role.md index 148c3aed0..619adf26b 100644 --- a/docs/API/REST-API-Role.md +++ b/docs/API/Role.md @@ -4,7 +4,7 @@ BoardAdmin can change role of user at right sidebar / click avatar / select role # Change Role with API -- https://wekan.github.io/api/ +- https://wekan.fi/api/ - api.py at https://github.com/wekan/wekan - Login to API https://github.com/wekan/wekan/wiki/REST-API#example-call---as-json diff --git a/docs/API/REST-API-Swimlanes.md b/docs/API/Swimlanes.md similarity index 100% rename from docs/API/REST-API-Swimlanes.md rename to docs/API/Swimlanes.md diff --git a/docs/API/REST-API-User.md b/docs/API/User.md similarity index 100% rename from docs/API/REST-API-User.md rename to docs/API/User.md diff --git a/docs/Backup/Backup.md b/docs/Backup/Backup.md index 16c3024b7..4cc91df9c 100644 --- a/docs/Backup/Backup.md +++ b/docs/Backup/Backup.md @@ -137,11 +137,11 @@ https://nosqlbooster.com/downloads ### At server where Wekan Snap is installed, MongoDB is running at localhost port 27019 -Wekan logo +Wekan logo ### You can tunnel via SSH to server, using password auth or private key auth dropdown selection -Wekan logo +Wekan logo # Scheduled backups to local or remote server diff --git a/docs/Backup/Rclone.md b/docs/Backup/Rclone/Rclone.md similarity index 94% rename from docs/Backup/Rclone.md rename to docs/Backup/Rclone/Rclone.md index 6e13926bf..5dfb7c312 100644 --- a/docs/Backup/Rclone.md +++ b/docs/Backup/Rclone/Rclone.md @@ -32,15 +32,15 @@ Instead of filesystem, Rclone mounted cloud filesystem directory can be used, li 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 +Wekan Admin Panel file move ## Screenshot 2: Files at MinIO after moving all to filesystem -MinIO 1 +MinIO 1 ## Screenshot 3: Files at MinIO after moving all to filesystem -MinIO 2 +MinIO 2 ## Rclone config diff --git a/docs/Backup/Rclone/minio1.png b/docs/Backup/Rclone/minio1.png new file mode 100644 index 000000000..45b35abec Binary files /dev/null and b/docs/Backup/Rclone/minio1.png differ diff --git a/docs/Backup/Rclone/minio2.png b/docs/Backup/Rclone/minio2.png new file mode 100644 index 000000000..24f132b4a Binary files /dev/null and b/docs/Backup/Rclone/minio2.png differ diff --git a/docs/Backup/Rclone/wekan-admin-panel.png b/docs/Backup/Rclone/wekan-admin-panel.png new file mode 100644 index 000000000..6b65ab527 Binary files /dev/null and b/docs/Backup/Rclone/wekan-admin-panel.png differ diff --git a/docs/Backup/Repair-MongoDB.md b/docs/Backup/Repair-MongoDB.md index 871c03351..d18fc3a18 100644 --- a/docs/Backup/Repair-MongoDB.md +++ b/docs/Backup/Repair-MongoDB.md @@ -24,7 +24,7 @@ https://github.com/wekan/wekan/issues/5073 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. +Some customer of [WeKan Commercial Support](https://wekan.fi/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 diff --git a/docs/Backup/nosqlbooster-basic-connection.png b/docs/Backup/nosqlbooster-basic-connection.png new file mode 100644 index 000000000..3ba29b604 Binary files /dev/null and b/docs/Backup/nosqlbooster-basic-connection.png differ diff --git a/docs/Backup/nosqlbooster-ssh-tunnel.png b/docs/Backup/nosqlbooster-ssh-tunnel.png new file mode 100644 index 000000000..00591648e Binary files /dev/null and b/docs/Backup/nosqlbooster-ssh-tunnel.png differ diff --git a/docs/Backup/nosqlbooster.png b/docs/Backup/nosqlbooster.png new file mode 100644 index 000000000..f4d739d94 Binary files /dev/null and b/docs/Backup/nosqlbooster.png differ diff --git a/docs/Browsers/Browser-compatibility-matrix.md b/docs/Browsers/Browser-compatibility-matrix.md index ddfd499e1..123ff2f31 100644 --- a/docs/Browsers/Browser-compatibility-matrix.md +++ b/docs/Browsers/Browser-compatibility-matrix.md @@ -18,13 +18,14 @@ Any telemetry at any Firefox based browser can be additionally most locked down Browser | [PWA](PWA) | Mobile | Desktop | OS ------- | ----| ------ | ------- | ------- +[uWolf](https://open-store.io/app/uwolf.chromiumos-guy) | No | Yes | No | Ubuntu Touch webbrowser based of LibreWolf +[LibreWolf](https://librewolf.net) | No | No | Yes | [Win/Mac/Linux](https://librewolf.net/installation/), [Repos](https://codeberg.org/librewolf) [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 @@ -58,8 +59,24 @@ 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 +- Verso + - Apache 2.0 or MIT license + - Repo: https://github.com/versotile-org/verso +- Servo + - MPL-2.0 license + - https://servo.org + - Repo: https://github.com/servo/servo + - At https://www.youtube.com/watch?v=g9hzWXxUgiU was said, that Gmail works, so maybe WeKan could also work + - This month in Servo: color inputs, SVG, embedder JavaScript, and more + - https://servo.org/blog/2025/06/18/this-month-in-servo/ + - https://news.ycombinator.com/item?id=44382451 + +## TUI webbrowsers, not yet supported + +Browser | [PWA](PWA) | Mobile | Desktop | OS +------- | ----| ------ | ------- | ------- +[Chawan](https://chawan.net) | No | No | Yes | Linux/BSD. [Release 0.2.0](https://chawan.net/news/chawan-0-2-0.html), [HN](https://news.ycombinator.com/item?id=44293260) +Elinks | No | No | Yes | Win/Mac/Linux/BSD/DOS TUI. ## Ladybird based, not yet compatible with WeKan diff --git a/docs/Features/PWA.md b/docs/Browsers/PWA.md similarity index 94% rename from docs/Features/PWA.md rename to docs/Browsers/PWA.md index 0abe49786..977b08def 100644 --- a/docs/Features/PWA.md +++ b/docs/Browsers/PWA.md @@ -1,4 +1,4 @@ -[Browser compatibility matrix](Browser-compatibility-matrix) +[Browser compatibility matrix](../Browser/Browser-compatibility-matrix) ## Install your Wekan server as an app @@ -15,9 +15,9 @@ 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 +Install PWA at Chromium Edge -4. In next popup, give name to app, like `YourCompany Wekan`, and click `Add` +4. In next popup, give name to app, like `YourCompany WeKan`, and click `Add` 5. Now new app is in your Windows Start menu. @@ -99,7 +99,7 @@ Related, for creating apps to other appstores: https://github.com/wekan/wekan/wi 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) +![image](Play-Console-App-Integrity.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`. diff --git a/docs/Browsers/Play-Console-App-Integrity.png b/docs/Browsers/Play-Console-App-Integrity.png new file mode 100644 index 000000000..0c7808828 Binary files /dev/null and b/docs/Browsers/Play-Console-App-Integrity.png differ diff --git a/docs/Browsers/chromium-edge-install-pwa.png b/docs/Browsers/chromium-edge-install-pwa.png new file mode 100644 index 000000000..15089e673 Binary files /dev/null and b/docs/Browsers/chromium-edge-install-pwa.png differ diff --git a/docs/Browsers/manybrowser.png b/docs/Browsers/manybrowser.png new file mode 100644 index 000000000..f12c239a0 Binary files /dev/null and b/docs/Browsers/manybrowser.png differ diff --git a/docs/Platforms/FOSS/torodb-postgresql/CHANGELOG.md b/docs/Databases/ToroDB-PostgreSQL/CHANGELOG.md similarity index 100% rename from docs/Platforms/FOSS/torodb-postgresql/CHANGELOG.md rename to docs/Databases/ToroDB-PostgreSQL/CHANGELOG.md diff --git a/docs/Platforms/FOSS/torodb-postgresql/LICENSE b/docs/Databases/ToroDB-PostgreSQL/LICENSE similarity index 100% rename from docs/Platforms/FOSS/torodb-postgresql/LICENSE rename to docs/Databases/ToroDB-PostgreSQL/LICENSE diff --git a/docs/Platforms/FOSS/torodb-postgresql/README.md b/docs/Databases/ToroDB-PostgreSQL/README.md similarity index 53% rename from docs/Platforms/FOSS/torodb-postgresql/README.md rename to docs/Databases/ToroDB-PostgreSQL/README.md index 91336a2c3..ec8b15a99 100644 --- a/docs/Platforms/FOSS/torodb-postgresql/README.md +++ b/docs/Databases/ToroDB-PostgreSQL/README.md @@ -1,15 +1,39 @@ -# Try FerretDB instead - -https://github.com/wekan/wekan/wiki/PostgreSQL +# What was ToroDB +ToroDB was made with Java. It was about replacing MongoDB with ToroDB/PostgreSQL or ToroDB/MySQL. ToroDB is not developed anymore. -ToroDB is compatible with MongoDB 3.0. WeKan 7.x is compatible with MongoDB 6.x. +# Try FerretDB instead + +https://blog.ferretdb.io/building-project-management-stack-wekan-ferretdb/ + +FerretDB https://www.ferretdb.com , https://github.com/FerretDB/FerretDB is made with Go. +Why FerretDB is explained at https://docs.ferretdb.io/#why-do-we-need-ferretdb . +It is about replacing MongoDB with FerretDB/PostgreSQL, +using Microsoft DocumentDB https://github.com/microsoft/documentdb for additional compatibility. + +There is old FerretDB/SQLite, community can maintain it, it's not developed currently by FerretDB: +https://github.com/FerretDB/FerretDB/tree/main-v1 . + +C89 SQLite has problems with concurrency, corruption etc. + +It will help when updated SQLite made with Rust +will have these issues fixed at https://github.com/tursodatabase/turso . +Turso originally had fork of C89 SQLite C89 Open Contribution based fork of SQLite +https://github.com/tursodatabase/libsql , where they added fixes, but they run into some limits, +so they then moved the Turso Rust SQLite experiment to main tursodatabase GitHub org +https://github.com/tursodatabase/turso like they say at https://www.youtube.com/watch?v=010OKqc3ObM . +Turso is using simulator like https://tigerbeetle.com https://github.com/tigerbeetle/tigerbeetle +to fix concurrency, corruption etc bugs. +So when they get rewrite done, Rust based SQLite is drop-in replacement for C89 SQLite. +It has same database syntax, etc. But it also works with high concurrent usage, +does not corrupt data like C89 SQLite, that is verified with simulator. + # Docker: Wekan to PostgreSQL read-only mirroring * [Wekan kanban board, made with Meteor.js framework, running on - Node.js](https://wekan.github.io) -- [GitHub](https://github.com/wekan/wekan) + Node.js](https://wekan.fi) -- [GitHub](https://github.com/wekan/wekan) * [MongoDB NoSQL database](https://www.mongodb.com) * [ToroDB: MongoDB to PostgreSQL read-only mirroring, programmed with Java](https://www.8kdata.com/products) -- [GitHub](https://github.com/torodb/stampede) -- @@ -61,4 +85,4 @@ docker-compose up -d [GitHub issue 787](https://github.com/wekan/wekan/issues/787) -[screenshot]: https://wekan.github.io/ToroDB.png +[screenshot]: https://wekan.fi/ToroDB.png diff --git a/docs/Databases/ToroDB-PostgreSQL/ToroDB.png b/docs/Databases/ToroDB-PostgreSQL/ToroDB.png new file mode 100644 index 000000000..a098679c7 Binary files /dev/null and b/docs/Databases/ToroDB-PostgreSQL/ToroDB.png differ diff --git a/docs/Platforms/FOSS/torodb-postgresql/docker-compose.yml b/docs/Databases/ToroDB-PostgreSQL/docker-compose.yml similarity index 100% rename from docs/Platforms/FOSS/torodb-postgresql/docker-compose.yml rename to docs/Databases/ToroDB-PostgreSQL/docker-compose.yml diff --git a/docs/Databases/mongodb-avx-qemu.md b/docs/Databases/mongodb-avx-qemu.md new file mode 100644 index 000000000..a35681f3e --- /dev/null +++ b/docs/Databases/mongodb-avx-qemu.md @@ -0,0 +1,63 @@ +## Meteor podcast about using MongoDB at unsupported CPUs + +- https://www.youtube.com/watch?v=bnU9bUVeN04 +- Making MongoDB working with Qemu: https://github.com/wekan/wekan/issues/4321#issuecomment-3006557279 + +## MongoDB Operating System Support precompiled binaries + +- arm64: Only Ubuntu. No Raspberry Pi OS, Alpine Linux. + - But installing .deb packages to Raspberry Pi 5 running Raspberry OS 64bit can have hardware running cooler, than on Ubuntu. +- For anything else, see MongoDB download page. + +## MongoDB CPU support + +New MongoDB supports newer CPUs only, like: +- x86_64 that have AVX instructions, from MongoDB 5 and later +- ARMv8.2-A microarchitecture, from MongoDB 4.4.19, 5.0, 6.0 and later, like: + - Raspberry Pi 5 + - OrangePi 5 + - Apple Silicon arm64 + +Old MongoDB 4.4.18 supports old CPUs, like: +- Intel Core 2 Duo, CPU does not support AVX instructions +- ARMv8.0 microarchitecture, like Cortex A53/A55/A72: + - Raspberry Pi 3, Cortex-A53, https://en.wikipedia.org/wiki/Raspberry_Pi + - Raspberry Pi 4, Cortex-A72 + - Orange Pi 3, https://en.wikipedia.org/wiki/Orange_Pi + +Info about requiring newer arm64: +- https://www.mongodb.com/community/forums/t/mongodb-community-6-0-5-illegal-instruction-core-dumped-ubuntu-18-04-on-cortex-a72-aarch64/223970/3 + +Detecting does x86_64 CPU support AVX: +- https://github.com/wekan/wekan/issues/4321#issuecomment-2469332492 + +Error running MongoDB 8 at RasPi4, when not using Qemu: + +``` +December 06 11:48:49 rpi4b systemd[1]: Started mongod.service - MongoDB Database Server. +December 06 11:48:53 rpi4b mongod[3749]: /usr/bin/mongod: line 4: 3750 Illegal instruction (core dumped) /usr/bin/mongodreal --co> +December 06 11:48:53 rpi4b systemd[1]: mongod.service: Main process exited, code=exited, status=132/n/a +December 06 11:48:53 rpi4b systemd[1]: mongod.service: Failed with result 'exit-code'. +``` +## a) Prebuilt binary + +MongoDB 7.3.4 for RasPi4 and older: +- https://github.com/123swk123/mongodb-armv8-a/releases/tag/v7.3.4-alpha + +## b) Compile MongoDB, takes a lot of time + +CrossCompiling MongoDB from x86_64 to ARMv8.0 Cortex A53/A55/A72 like RasPi4 and older: +- https://github.com/123swk123/mongodb-armv8-a + +Compiling MongoDB from x86_64 to x86_64 CPUs that does not have AVX instructions: +- https://github.com/GermanAizek/mongodb-without-avx/blob/main/Dockerfile + +## c) Run MongoDB with Qemu, that supports newest CPU features + +qemu-user can run single Linux executeable for many architectures. It does not emulate full OS like qemu-system. + +Running MongoDB with Qemu on x86_64 CPU that does not support AVX, like Intel Core 2 Duo: +- https://github.com/stevekerrison/mongo-qemu-avx + +Running MongoDB with Qemu on older arm64, like RasPi4 and older RasPi: +- https://github.com/xet7/simpletasks/blob/main/install-mongodb.md diff --git a/docs/Databases/mongodb-raspi4-qemu.md b/docs/Databases/mongodb-raspi4-qemu.md new file mode 100644 index 000000000..ef767396f --- /dev/null +++ b/docs/Databases/mongodb-raspi4-qemu.md @@ -0,0 +1,59 @@ +## Meteor podcast about using MongoDB at unsupported CPUs + +- https://www.youtube.com/watch?v=bnU9bUVeN04 +- Making MongoDB working with Qemu: https://github.com/wekan/wekan/issues/4321#issuecomment-3006557279 + +## Installing MongoDB + +MongoDB 8 arm64 works at M1 Air arm64 macOS and Linux. + +But because MongoDB 8 core dumps at RasPi4, running it here with Qemu. + +1. Install Ubuntu 24.04 arm64 for Raspberry Pi + +2. Install MongoDB 8 repo for Ubuntu 24.04 arm64 + +3. Install deps: + +``` +sudo apt -y install qemu-user +``` + +4. Rename MongoDB to different filename: + +``` +sudo mv /usr/bin/mongod /usr/bin/mongodreal +``` + +5. Edit start scipt for Qemu MongoDB + +``` +sudo nano /usr/bin/mongod +``` + +6. Copy paste start script for Qemu MongoDB + +It uses qemu-user to run MongoDB, +and passes all command line arguments to MongoDB. + +``` +#!/bin/bash +/usr/bin/qemu-arm64 /usr/bin/mongodreal --config /etc/mongod.conf +``` + +7. Save and exit nano: Ctrl-o Enter Ctrl-x Enter + +8. Make script executeable + +``` +sudo chmod a+x /usr/bin/mongod +``` + +9. Start and run MongoDB + +``` +sudo systemctl enable mongod + +sudo systemctl start mongod +``` + diff --git a/docs/Date/Day-of-week-start.md b/docs/Date/Day-of-week-start.md index 3b702b361..5b69051d4 100644 --- a/docs/Date/Day-of-week-start.md +++ b/docs/Date/Day-of-week-start.md @@ -1,7 +1,7 @@ ## 1) Click right top your username -Day of Week Start 1 +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 +Day of Week Start 1 \ No newline at end of file diff --git a/docs/Date/day_of_week_start_1.png b/docs/Date/day_of_week_start_1.png new file mode 100644 index 000000000..750eb5620 Binary files /dev/null and b/docs/Date/day_of_week_start_1.png differ diff --git a/docs/Date/day_of_week_start_2.png b/docs/Date/day_of_week_start_2.png new file mode 100644 index 000000000..63a78e0de Binary files /dev/null and b/docs/Date/day_of_week_start_2.png differ diff --git a/docs/DeveloperDocs/Deep-Dive-Into-WeKan.md b/docs/Design/Deep-Dive-Into-WeKan.md similarity index 94% rename from docs/DeveloperDocs/Deep-Dive-Into-WeKan.md rename to docs/Design/Deep-Dive-Into-WeKan.md index 5281d61f1..e133f64e7 100644 --- a/docs/DeveloperDocs/Deep-Dive-Into-WeKan.md +++ b/docs/Design/Deep-Dive-Into-WeKan.md @@ -4,7 +4,7 @@ https://www.youtube.com/watch?v=ke-mbnZM3zE ## Screenshot of Meteor WeKan -Meteor WeKan screenshot +Meteor WeKan screenshot ## Description of Meteor WeKan @@ -13,7 +13,7 @@ https://www.youtube.com/watch?v=ke-mbnZM3zE - 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. +- Commercial Support at https://wekan.fi/commercial-support/ . Currently looking who could sponsor more of maintenance and development. ## How much effort to create Meteor WeKan, in COCOMO model @@ -36,8 +36,8 @@ https://www.youtube.com/watch?v=ke-mbnZM3zE - 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 +- Newest at platforms: Source Bundle, Snap Candidate, Docker, Kubernetes https://wekan.fi +- Platforms that will be updated to be up-to-date: Snap Stable, Sandstorm, UCS https://wekan.fi ## Meteor WeKan Features @@ -102,7 +102,7 @@ https://www.youtube.com/watch?v=ke-mbnZM3zE - 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/ +- Many security fixes from Responsible Disclosure https://wekan.fi/hall-of-fame/ ## Upcoming Features @@ -126,7 +126,7 @@ https://www.youtube.com/watch?v=ke-mbnZM3zE - 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 + 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 diff --git a/docs/DeveloperDocs/Design-Principles.md b/docs/Design/Design-Principles.md similarity index 97% rename from docs/DeveloperDocs/Design-Principles.md rename to docs/Design/Design-Principles.md index cfca81bab..24941cf07 100644 --- a/docs/DeveloperDocs/Design-Principles.md +++ b/docs/Design/Design-Principles.md @@ -18,7 +18,7 @@ - PWA https://github.com/wekan/wekan/wiki/PWA - On-Premise: - Linux amd64/arm64/s390x - - https://wekan.github.io/install/ + - https://wekan.fi/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 diff --git a/docs/Design/Design-WeKan-Trello-Jira.md b/docs/Design/Design-WeKan-Trello-Jira.md new file mode 100644 index 000000000..302705df4 --- /dev/null +++ b/docs/Design/Design-WeKan-Trello-Jira.md @@ -0,0 +1,48 @@ +# Design: WeKan vs Trello vs Jira + +### Kanban originally from Toyota paper cards + +- https://en.wikipedia.org/wiki/Kanban +- Every kanban software usually implements similar features, original or inspired by some other kanban software + +### WeKan copied design from Trello, then WeKan did redesign, then Trello copied design from WeKan + +- WeKan has all original developed Open Source MIT licensed code, that is different than Trello propietary code. +- WeKan UI redesign was done at 2015-01-20 [after DMCA from Trello](../FAQ/FAQ.md#werent-you-called-libreboard-before) + - by original WeKan creator [mquandalle](https://github.com/mquandalle) + - [Original redesign](../FAQ/FAQ.md#werent-you-called-libreboard-before) + - by [xet7](https://github.com/xet7) current maintainer of WeKan + - [Improvements to original design](Design-Principles.md) + - [Monkey Proof Software](Monkey-Proof-Software.md) +- Then Trello started copying from original WeKan design + +### Trello copied design from WeKan + +Existing WeKan features + +- 2025-04 Opened card has comments at right, copied from [original WeKan feature Maximize Card 2021-06-14](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v535-2021-06-14-wekan-release). Trello does not have WeKan feature Minimize Card. + - https://community.atlassian.com/forums/Trello-questions/comments-in-the-ticket-on-the-right/qaq-p/3029030 + - https://community.atlassian.com/forums/Trello-questions/Trello-card-comments-now-appear-in-a-side-tab-how-to-go-back-to/qaq-p/3003380 +- 2025-02 Mirror Card, copied from [original WeKan feature Linked Cards from 2018-04-18](https://github.com/wekan/wekan/pull/1592), discussed at [WeKan issue 5683](https://github.com/wekan/wekan/issues/5683) +- 2021-02 New board button position at top, copied from [original WeKan feature from 2018-09-28](../../CHANGELOG.md#v1511-2018-09-28-wekan-edge-release) + +Existing WeKan ideas, that are not yet implemented in WeKan + +- 2025-01-28 Sync Jira Lists to Trello, copied from [original WeKan Multiverse from 2022-07-14](https://boards.wekan.team/b/JctQEtkayWXTTJyzt/wekan-multiverse) +- 2021-02 Map Card, copied from [original WeKan feature request from 2017-01-06](https://github.com/wekan/wekan/issues/755). + +News + +- https://news.ycombinator.com/item?id=44821127 + +### Trello features, that are not yet implemented in WeKan + +- 2025-05-21 Email Inbox +- 2025-02 Complete Card Checkbox: https://github.com/wekan/wekan/issues/5818 +- 2021-05 Workspaces +- 2018 Butler Scheduled and Repeating Tasks: https://github.com/wekan/wekan/issues/5825 . [WeKan added IFTTT Rules at 2018-09-16](../../CHANGELOG.md#v147-2018-09-16-wekan-release), but not yet scheduled or repeating IFTTT Rules. +- 2016-12 Card Repeater PowerUp: Copy cards daily/weekly/monthly/yearly + +### Jira copied design from ClickUp + +- 2025-06-29 Jira has UI design copied from ClickUp, where is left sidebar menu. diff --git a/docs/DeveloperDocs/Monkey-Proof-Software.md b/docs/Design/Monkey-Proof-Software.md similarity index 100% rename from docs/DeveloperDocs/Monkey-Proof-Software.md rename to docs/Design/Monkey-Proof-Software.md diff --git a/docs/DeveloperDocs/WeKan-Multiverse-Roadmap.md b/docs/Design/Multiverse/WeKan-Multiverse-Roadmap.md similarity index 97% rename from docs/DeveloperDocs/WeKan-Multiverse-Roadmap.md rename to docs/Design/Multiverse/WeKan-Multiverse-Roadmap.md index 319c54062..378a226f5 100644 --- a/docs/DeveloperDocs/WeKan-Multiverse-Roadmap.md +++ b/docs/Design/Multiverse/WeKan-Multiverse-Roadmap.md @@ -1,3 +1,8 @@ +## About AVX + +If CPU does not have AVX, Snap Candidate Meteor 2 WeKan now uses qemu-user to run MongoDB, using Qemu AVX support. +This was added at [WeKan v7.93](https://github.com/wekan/wekan/blob/main/CHANGELOG.md#v793-2025-07-18-wekan--release). + ## What is not Cross-Platform - Requires CPU to support AVX @@ -99,9 +104,10 @@ ## Screenshot -Supporting many more webbrowsers: +Supporting many more webbrowsers. This is now part of WeKan Wami: https://github.com/wekan/wami . +Also mentioned at https://wekan.fi/upgrade/ . -Multiverse WeKan screenshot +Multiverse WeKan screenshot ## Talks @@ -369,4 +375,4 @@ https://github.com/wekan/php/blob/main/page/allboardschar.php ### Ruby on Rails -- https://github.com/wekan/weror . Password register and login works, there is workspaces and dragging cards, but no user management etc features yet. \ No newline at end of file +- https://github.com/wekan/weror . Password register and login works, there is workspaces and dragging cards, but no user management etc features yet. diff --git a/docs/Design/Multiverse/manybrowser.png b/docs/Design/Multiverse/manybrowser.png new file mode 100644 index 000000000..f12c239a0 Binary files /dev/null and b/docs/Design/Multiverse/manybrowser.png differ diff --git a/docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md b/docs/Design/Wekan-vs-Trello-vs-Restyaboard.md similarity index 99% rename from docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md rename to docs/Design/Wekan-vs-Trello-vs-Restyaboard.md index 5d86ef83b..258d693e7 100644 --- a/docs/ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md +++ b/docs/Design/Wekan-vs-Trello-vs-Restyaboard.md @@ -189,7 +189,7 @@ Undo from activities | No | No | Yes 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/) | ? | ? +OpenAPI | [Yes](https://github.com/wekan/wekan/tree/main/openapi) [here](https://wekan.fi/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 diff --git a/docs/DeveloperDocs/Emoji.md b/docs/DeveloperDocs/Build-and-Create-Pull-Request.md similarity index 100% rename from docs/DeveloperDocs/Emoji.md rename to docs/DeveloperDocs/Build-and-Create-Pull-Request.md diff --git a/docs/DeveloperDocs/Developer-Documentation.md b/docs/DeveloperDocs/Developer-Documentation.md index 7393c06da..4f8a422a4 100644 --- a/docs/DeveloperDocs/Developer-Documentation.md +++ b/docs/DeveloperDocs/Developer-Documentation.md @@ -12,9 +12,9 @@ Please read the meteor style guide before making any significant contribution. - [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/) +- [How to code Part 1](https://wekan.fi/blog/2019/04/howto-code-part-1-learning-to-learn/) +- [First time Wekan contributor easily figures out Wekan and develops big features](https://wekan.fi/blog/2018/05/wekan-v1-00-released/) +- [Benefits of contributing your features to upstream Wekan](https://wekan.fi/blog/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) diff --git a/docs/DeveloperDocs/Meteor.md b/docs/DeveloperDocs/Meteor.md index 7a77196c2..aa1728cb1 100644 --- a/docs/DeveloperDocs/Meteor.md +++ b/docs/DeveloperDocs/Meteor.md @@ -19,7 +19,7 @@ - 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://wekan.fi/app/ - https://github.com/wekan/wekan/wiki/PWA - Over 100 icons for different platforms https://github.com/wekan/wekan/blob/main/public/site.webmanifest diff --git a/docs/DragDrop/Drag-Drop.md b/docs/DragDrop/Drag-Drop.md index 4da4c6b5f..ca5a7b70e 100644 --- a/docs/DragDrop/Drag-Drop.md +++ b/docs/DragDrop/Drag-Drop.md @@ -10,7 +10,7 @@ It depends on role of user what drag drop is allowed https://github.com/wekan/we 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 +Mobile drag drop ## 2 or more external screens of desktop or mobile @@ -43,4 +43,4 @@ Reorder with drag drop: ## 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 +- https://news.ycombinator.com/item?id=41415077 diff --git a/docs/DragDrop/dragdrop/mobile-drag-drop.png b/docs/DragDrop/dragdrop/mobile-drag-drop.png new file mode 100644 index 000000000..4ddd7fe3c Binary files /dev/null and b/docs/DragDrop/dragdrop/mobile-drag-drop.png differ diff --git a/docs/DragDrop/mobile-drag-drop.png b/docs/DragDrop/mobile-drag-drop.png new file mode 100644 index 000000000..4ddd7fe3c Binary files /dev/null and b/docs/DragDrop/mobile-drag-drop.png differ diff --git a/docs/DragDrop/screenshot-drag1.png b/docs/DragDrop/screenshot-drag1.png new file mode 100644 index 000000000..13189a692 Binary files /dev/null and b/docs/DragDrop/screenshot-drag1.png differ diff --git a/docs/DragDrop/screenshot-drag2.png b/docs/DragDrop/screenshot-drag2.png new file mode 100644 index 000000000..8afe80563 Binary files /dev/null and b/docs/DragDrop/screenshot-drag2.png differ diff --git a/docs/DragDrop/screenshot-drag3.png b/docs/DragDrop/screenshot-drag3.png new file mode 100644 index 000000000..4ad8f8fe9 Binary files /dev/null and b/docs/DragDrop/screenshot-drag3.png differ diff --git a/docs/DragDrop/screenshot-drag4.png b/docs/DragDrop/screenshot-drag4.png new file mode 100644 index 000000000..5f6c38b13 Binary files /dev/null and b/docs/DragDrop/screenshot-drag4.png differ diff --git a/docs/FAQ/FAQ.md b/docs/FAQ/FAQ.md index ed8c0c111..49be5f8fe 100644 --- a/docs/FAQ/FAQ.md +++ b/docs/FAQ/FAQ.md @@ -31,9 +31,9 @@ It's a very specific niche, with limited amount competitors, with all of this ap - 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 +- Available for many OS and CPU platforms, listed at download/install section of https://wekan.fi - 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. +- Has optional affordable Commercial Support for Features/Fixes/Support/Hosting available https://wekan.fi/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 @@ -58,16 +58,16 @@ It's a very specific niche, with limited amount competitors, with all of this ap ## 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. +[Wekan Team](https://wekan.fi) 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), +[Lauri Ojansivu](https://github.com/xet7) is CEO at [WeKan Team](https://wekan.fi), 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), +based [WeKan Open Source kanban](https://wekan.fi), 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). @@ -78,8 +78,8 @@ 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). +[winner of 2th place at EU NGI ONTOCHAIN Hackathon](https://wekan.fi/donated/ontochain-certificate.png), +[winner of 20i FOSS Awards](https://wekan.fi/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), @@ -100,7 +100,7 @@ Trello: 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 don't need to pay monthly fee for using Wekan. Only if you need Commercial Support https://wekan.fi 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. @@ -109,7 +109,7 @@ Wekan: - 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. +- There has been some code reviews done by security researchers https://wekan.fi/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? @@ -140,7 +140,7 @@ For [Wekan Platforms](Platforms), it means these choices: There are alternative ways to have your feature implemented: -a) [Commercial Support](https://wekan.team/commercial-support/) +a) [Commercial Support](https://wekan.fi/commercial-support/) b) Pay someone from your company or some other developer to code feature and submit as pull request diff --git a/docs/FAQ/Hall-of-Shame.md b/docs/FAQ/Hall-of-Shame.md index 451f953cb..0eeb9e331 100644 --- a/docs/FAQ/Hall-of-Shame.md +++ b/docs/FAQ/Hall-of-Shame.md @@ -2,7 +2,7 @@ ## 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 (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.fi . Official domain is https://wekan.fi . 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) diff --git a/docs/FAQ/IRC-FAQ.md b/docs/FAQ/IRC-FAQ.md index 0d87c9c60..88fd7486e 100644 --- a/docs/FAQ/IRC-FAQ.md +++ b/docs/FAQ/IRC-FAQ.md @@ -1,6 +1,6 @@ # Wekan - Open Souce kanban - IRC FAQ -- [Wekan website](https://wekan.github.io) +- [Wekan website](https://wekan.fi) ### If you are in a hurry, please don't use IRC @@ -49,7 +49,7 @@ If you mean bug about [only 20 newest comments visible](https://github.com/wekan [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. +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://wekan.fi/blog/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.fi/commercial-support) for features and fixes. ### Q: CPU usage? ``` @@ -146,7 +146,7 @@ A: - 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). +- [Benefits of contributing your features to upstream Wekan](https://wekan.fi/blog/2018/02/benefits-of-contributing-your-features-to-upstream-wekan/index.html). - [What was Wekan fork](FAQ#what-was-wekan-fork--wefork). *** @@ -459,7 +459,7 @@ it will make win time for users ``` A: -- Fastest: If you want fast answers, get [Commercial Support](https://wekan.team/commercial-support/). +- Fastest: If you want fast answers, get [Commercial Support](https://wekan.fi/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. diff --git a/docs/FAQ/Press.md b/docs/FAQ/Press.md index 29ccb5fa1..8513aac7b 100644 --- a/docs/FAQ/Press.md +++ b/docs/FAQ/Press.md @@ -2,7 +2,7 @@ ### 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) +* [Wekan v1.0 relased 2018-05-21](https://wekan.fi/blog/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) diff --git a/docs/FAQ/Requirements.md b/docs/FAQ/Requirements.md index c929bff5e..e5bbd3de9 100644 --- a/docs/FAQ/Requirements.md +++ b/docs/FAQ/Requirements.md @@ -1 +1 @@ -WeKan Requiremens are at https://wekan.github.io/install/ \ No newline at end of file +WeKan Requiremens are at https://wekan.fi/install/ \ No newline at end of file diff --git a/docs/Features/Allow-private-boards-only.md b/docs/Features/Allow-private-boards-only.md index 38ad03329..8eeb8be20 100644 --- a/docs/Features/Allow-private-boards-only.md +++ b/docs/Features/Allow-private-boards-only.md @@ -1,3 +1,3 @@ [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 +Allow private boards only diff --git a/docs/Stats/Burndown-and-Velocity-Chart.md b/docs/Features/Burndown-and-Velocity-Chart.md similarity index 100% rename from docs/Stats/Burndown-and-Velocity-Chart.md rename to docs/Features/Burndown-and-Velocity-Chart.md diff --git a/docs/Features/Cover.md b/docs/Features/Cover/Cover.md similarity index 74% rename from docs/Features/Cover.md rename to docs/Features/Cover/Cover.md index 065375fe3..479eaa1c5 100644 --- a/docs/Features/Cover.md +++ b/docs/Features/Cover/Cover.md @@ -7,5 +7,5 @@ ## Minicard Cover Image and Count of attachments -Minicard Cover Image and Count of attachments +Minicard Cover Image and Count of attachments diff --git a/docs/Features/Cover/cover-and-attachment.png b/docs/Features/Cover/cover-and-attachment.png new file mode 100644 index 000000000..5cfbb47f6 Binary files /dev/null and b/docs/Features/Cover/cover-and-attachment.png differ 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/CustomFields/CustomFields.md b/docs/Features/CustomFields/CustomFields.md new file mode 100644 index 000000000..e510fcfbb --- /dev/null +++ b/docs/Features/CustomFields/CustomFields.md @@ -0,0 +1,29 @@ +[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/CustomFields/custom-field-1.png b/docs/Features/CustomFields/custom-field-1.png new file mode 100644 index 000000000..3e0ad49eb Binary files /dev/null and b/docs/Features/CustomFields/custom-field-1.png differ diff --git a/docs/Features/CustomFields/custom-field-2.png b/docs/Features/CustomFields/custom-field-2.png new file mode 100644 index 000000000..e26c8b149 Binary files /dev/null and b/docs/Features/CustomFields/custom-field-2.png differ diff --git a/docs/Features/CustomFields/custom-field-3.png b/docs/Features/CustomFields/custom-field-3.png new file mode 100644 index 000000000..b29d60dc1 Binary files /dev/null and b/docs/Features/CustomFields/custom-field-3.png differ diff --git a/docs/Features/CustomFields/custom-field-4.png b/docs/Features/CustomFields/custom-field-4.png new file mode 100644 index 000000000..b327908c4 Binary files /dev/null and b/docs/Features/CustomFields/custom-field-4.png differ diff --git a/docs/Features/CustomFields/custom-field-5.png b/docs/Features/CustomFields/custom-field-5.png new file mode 100644 index 000000000..98bfb8bb8 Binary files /dev/null and b/docs/Features/CustomFields/custom-field-5.png differ diff --git a/docs/Features/CustomFields/custom-field-6.png b/docs/Features/CustomFields/custom-field-6.png new file mode 100644 index 000000000..8cfcccb59 Binary files /dev/null and b/docs/Features/CustomFields/custom-field-6.png differ diff --git a/docs/Features/Emoji.md b/docs/Features/Emoji.md new file mode 100644 index 000000000..e1cab9b6a --- /dev/null +++ b/docs/Features/Emoji.md @@ -0,0 +1,204 @@ +## 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/Features/Features.md b/docs/Features/Features.md index 55e7b50f6..e7ffc0b2d 100644 --- a/docs/Features/Features.md +++ b/docs/Features/Features.md @@ -6,11 +6,11 @@ Not all from [CHANGELOG](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) ### WIP Limits -![Wekan WIP Limits screenshot](https://wekan.github.io/screenshot-wip-limit.png) +![Wekan WIP Limits screenshot](https://wekan.fi/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 boards screenshot](https://wekan.fi/screenshot-boards.png) ### Wekan full screen or window on desktop (without browser buttons etc) @@ -22,49 +22,49 @@ Not all from [CHANGELOG](https://github.com/wekan/wekan/blob/main/CHANGELOG.md) ### Restore archived board -![Wekan boards screenshot](https://wekan.github.io/screenshot-restore-board.png) +![Wekan boards screenshot](https://wekan.fi/screenshot-restore-board.png) ### Star board -![Wekan star board screenshot](https://wekan.github.io/screenshot-star-board.png) +![Wekan star board screenshot](https://wekan.fi/screenshot-star-board.png) ### Watch board -![Wekan watch board screenshot](https://wekan.github.io/screenshot-muted-watch.png) +![Wekan watch board screenshot](https://wekan.fi/screenshot-muted-watch.png) ### Keyboard shortcuts button at bottom right corner -![Wekan watch board screenshot](https://wekan.github.io/screenshot-keyboard-shortcuts.png) +![Wekan watch board screenshot](https://wekan.fi/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) +![Wekan board menu screenshot](https://wekan.fi/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) +![Wekan member settings screenshot](https://wekan.fi/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) +![Wekan edit notification screenshot](https://wekan.fi/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) +![Wekan hide system messages screenshot](https://wekan.fi/screenshot-member-settings-hide-system-messages.png) ### Members: Click member initials or avatar -![Wekan members screenshot](https://wekan.github.io/screenshot-member-filter.png) +![Wekan members screenshot](https://wekan.fi/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) +![Wekan boards permissions screenshot](https://wekan.fi/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) +![Wekan kanban screenshot](https://wekan.fi/screenshot-member-settings-archive.png) ### Cards: Description, Customizable Labels, Checklists, Attachment images and files, Comments. Archive and restore archived card. Delete card. @@ -73,33 +73,33 @@ Tip: Normally you archive a card so you can restore it back. If you want to dele ### [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) +![Wekan kanban screenshot](https://wekan.fi/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) +![Wekan kanban screenshot](https://wekan.fi/screenshot-drag1.png) ### 2) Select: Clipboard or drag and drop -![Wekan kanban screenshot](https://wekan.github.io/screenshot-drag4.png) +![Wekan kanban screenshot](https://wekan.fi/screenshot-drag4.png) ### 3) Drag and drop image, or Ctrl-V. -![Wekan kanban screenshot](https://wekan.github.io/screenshot-drag2.png) +![Wekan kanban screenshot](https://wekan.fi/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) +![Wekan kanban screenshot](https://wekan.fi/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) +![Wekan multi-selection screenshot](https://wekan.fi/screenshot-multi-selection.png) ### Filtered views -![Wekan multi-selection screenshot](https://wekan.github.io/screenshot-filter.png) +![Wekan multi-selection screenshot](https://wekan.fi/screenshot-filter.png) ## Authentication, Admin Panel, SMTP Settings @@ -107,9 +107,9 @@ 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 registration disable screenshot](https://wekan.fi/screenshot-admin-panel-registration.png) -![Wekan Admin Panel email screenshot](https://wekan.github.io/screenshot-admin-panel-email.png) +![Wekan Admin Panel email screenshot](https://wekan.fi/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. @@ -150,11 +150,11 @@ Different activities send different webhook data. You can find the details in th ### Enabled #### 1) Board menu when clicking 3 lines "hamburger" menu on right -![Wekan board menu screenshot](https://wekan.github.io/screenshot-board-menu.png) +![Wekan board menu screenshot](https://wekan.fi/screenshot-board-menu.png) #### 2) Outgoing Webhooks -![Wekan Outgoing Webhooks screenshot](https://wekan.github.io/screenshot-outgoing-webhooks.png) +![Wekan Outgoing Webhooks screenshot](https://wekan.fi/screenshot-outgoing-webhooks.png) ### Disabled @@ -180,7 +180,7 @@ ElasticSearch / Kibana (ELK)](https://github.com/wekan/wekan-logstash) * [Translate Wekan at Transifex](https://app.transifex.com/wekan/) -![Wekan translations screenshot](https://wekan.github.io/screenshot-change-language.png) +![Wekan translations screenshot](https://wekan.fi/screenshot-change-language.png) # Already merged, will be at next version diff --git a/docs/Stats/Gantt.md b/docs/Features/Gantt.md similarity index 98% rename from docs/Stats/Gantt.md rename to docs/Features/Gantt.md index 8afe57856..de342e5b8 100644 --- a/docs/Stats/Gantt.md +++ b/docs/Features/Gantt.md @@ -14,7 +14,7 @@ At cards, both Start and End dates should be set (not Due date) for the tasks to # Funding for more features? -You can fund development of more features of Gantt at https://wekan.team/commercial-support, like for example: +You can fund development of more features of Gantt at https://wekan.fi/commercial-support, like for example: - more of day/week/month/year views - drag etc diff --git a/docs/Features/IFTTT.md b/docs/Features/IFTTT/IFTTT.md similarity index 78% rename from docs/Features/IFTTT.md rename to docs/Features/IFTTT/IFTTT.md index 2f4ac77ed..5c65dc7a2 100644 --- a/docs/Features/IFTTT.md +++ b/docs/Features/IFTTT/IFTTT.md @@ -1,10 +1,10 @@ ## 1) Click: Menu item for the rules -Navigation menu for the rule dialog +Navigation menu for the rule dialog ## 2) Rule Menu: Overview, deleting and adding new rules -Dialog Overview for the rules +Dialog Overview for the rules ## 2a) Add new rule : Triggers @@ -32,4 +32,4 @@ For every trigger, there are 4 types of actions: board, card, checklist and mail * 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 +gif animation for rules diff --git a/docs/Features/IFTTT/how_to_work_with_rules.gif b/docs/Features/IFTTT/how_to_work_with_rules.gif new file mode 100644 index 000000000..7be0cb814 Binary files /dev/null and b/docs/Features/IFTTT/how_to_work_with_rules.gif differ diff --git a/docs/Features/IFTTT/ifttt_main_dialog.PNG b/docs/Features/IFTTT/ifttt_main_dialog.PNG new file mode 100644 index 000000000..cb180f391 Binary files /dev/null and b/docs/Features/IFTTT/ifttt_main_dialog.PNG differ diff --git a/docs/Features/IFTTT/ifttt_new_rule_trigger_board.png b/docs/Features/IFTTT/ifttt_new_rule_trigger_board.png new file mode 100644 index 000000000..91b04b162 Binary files /dev/null and b/docs/Features/IFTTT/ifttt_new_rule_trigger_board.png differ diff --git a/docs/Features/IFTTT/ifttt_new_rule_trigger_card.PNG b/docs/Features/IFTTT/ifttt_new_rule_trigger_card.PNG new file mode 100644 index 000000000..727cec2d0 Binary files /dev/null and b/docs/Features/IFTTT/ifttt_new_rule_trigger_card.PNG differ diff --git a/docs/Features/IFTTT/ifttt_new_rule_trigger_checklist.PNG b/docs/Features/IFTTT/ifttt_new_rule_trigger_checklist.PNG new file mode 100644 index 000000000..5bcb8f1f5 Binary files /dev/null and b/docs/Features/IFTTT/ifttt_new_rule_trigger_checklist.PNG differ diff --git a/docs/Features/IFTTT/main_menu-ifttt.png b/docs/Features/IFTTT/main_menu-ifttt.png new file mode 100644 index 000000000..029455dc9 Binary files /dev/null and b/docs/Features/IFTTT/main_menu-ifttt.png differ diff --git a/docs/Features/IFTTT/readme.md b/docs/Features/IFTTT/readme.md new file mode 100644 index 000000000..21504409a --- /dev/null +++ b/docs/Features/IFTTT/readme.md @@ -0,0 +1 @@ +This folder contains pictures and gifs for the ifttt feature diff --git a/docs/Features/IFTTT/rules.png b/docs/Features/IFTTT/rules.png new file mode 100644 index 000000000..b2d60742d Binary files /dev/null and b/docs/Features/IFTTT/rules.png differ diff --git a/docs/Stats/Logs.md b/docs/Features/Logs.md similarity index 100% rename from docs/Stats/Logs.md rename to docs/Features/Logs.md diff --git a/docs/Features/Wekan-Markdown.md b/docs/Features/Markdown/Markdown.md similarity index 100% rename from docs/Features/Wekan-Markdown.md rename to docs/Features/Markdown/Markdown.md diff --git a/docs/Features/Markdown/markdown.png b/docs/Features/Markdown/markdown.png new file mode 100644 index 000000000..7bf41f1da Binary files /dev/null and b/docs/Features/Markdown/markdown.png differ diff --git a/docs/Stats/Mermaid-Diagram.md b/docs/Features/Mermaid-Diagram.md similarity index 100% rename from docs/Stats/Mermaid-Diagram.md rename to docs/Features/Mermaid-Diagram.md diff --git a/docs/Stats/Metrics.md b/docs/Features/Metrics.md similarity index 100% rename from docs/Stats/Metrics.md rename to docs/Features/Metrics.md diff --git a/docs/Features/Multiline.md b/docs/Features/Multiline.md index d5aab1c15..fea5b4110 100644 --- a/docs/Features/Multiline.md +++ b/docs/Features/Multiline.md @@ -6,11 +6,11 @@ 4. Paste multiple lines of text 5. Click Save -Multiple lines to Checklist +Multiple lines to Checklist ## Card ☰ Menu / Copy Checklist Template to Many Cards -Checklist Template to Many Cards 1 +Checklist Template to Many Cards 1 ## Edit titles and descriptions of Many Cards ``` @@ -19,5 +19,5 @@ {"title":"Last card title","description":"Last card description"} ] ``` -Checklist Template to Many Cards 2 +Checklist Template to Many Cards 2 diff --git a/docs/Features/Python.md b/docs/Features/Python.md index 64b62abe9..de9779e93 100644 --- a/docs/Features/Python.md +++ b/docs/Features/Python.md @@ -10,6 +10,6 @@ Some Python etc code in WeKan, that is not yet added directly to WeKan: - [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) +- iCal server in [Python](https://github.com/wekan/wekan-ical-server) - [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/subtask-workaround-part1.png b/docs/Features/SubTasks/subtask-workaround-part1.png new file mode 100644 index 000000000..79915413c Binary files /dev/null and b/docs/Features/SubTasks/subtask-workaround-part1.png differ diff --git a/docs/Features/SubTasks/subtask-workaround-part2.png b/docs/Features/SubTasks/subtask-workaround-part2.png new file mode 100644 index 000000000..a92cc9876 Binary files /dev/null and b/docs/Features/SubTasks/subtask-workaround-part2.png differ diff --git a/docs/Features/Subtasks.md b/docs/Features/Subtasks.md index 6ad0a4a6d..8a5bef2c2 100644 --- a/docs/Features/Subtasks.md +++ b/docs/Features/Subtasks.md @@ -4,11 +4,11 @@ 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 +Subtask workaround part 1 2) Set your `MyProject` board to have subtask board `^MyProject^` -Subtask workaround part 2 +Subtask workaround part 2 3) Now you are able to create Subtasks to your board `MyProject`. diff --git a/docs/Features/Templates.md b/docs/Features/Templates.md index 800a8a1b6..0d36ef23d 100644 --- a/docs/Features/Templates.md +++ b/docs/Features/Templates.md @@ -9,14 +9,14 @@ 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/): +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.fi/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/): +These don't yet have [funding](https://wekan.fi/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). diff --git a/docs/Features/WipLimit/screenshot-wip-limit.png b/docs/Features/WipLimit/screenshot-wip-limit.png new file mode 100644 index 000000000..837829e86 Binary files /dev/null and b/docs/Features/WipLimit/screenshot-wip-limit.png differ diff --git a/docs/Features/WipLimit/wekan-wip-limit.png b/docs/Features/WipLimit/wekan-wip-limit.png new file mode 100644 index 000000000..4288cdcae Binary files /dev/null and b/docs/Features/WipLimit/wekan-wip-limit.png differ diff --git a/docs/Features/allow-private-boards-only.png b/docs/Features/allow-private-boards-only.png new file mode 100644 index 000000000..c4e7419ed Binary files /dev/null and b/docs/Features/allow-private-boards-only.png differ diff --git a/docs/Features/delete-board-part1.png b/docs/Features/delete-board-part1.png new file mode 100644 index 000000000..386cd3ea0 Binary files /dev/null and b/docs/Features/delete-board-part1.png differ diff --git a/docs/Features/delete-board-part2.png b/docs/Features/delete-board-part2.png new file mode 100644 index 000000000..df052baae Binary files /dev/null and b/docs/Features/delete-board-part2.png differ diff --git a/docs/Features/multiline/multiline1.png b/docs/Features/multiline/multiline1.png new file mode 100644 index 000000000..705d21c8b Binary files /dev/null and b/docs/Features/multiline/multiline1.png differ diff --git a/docs/Features/multiline/multiline2.png b/docs/Features/multiline/multiline2.png new file mode 100644 index 000000000..9cf890d65 Binary files /dev/null and b/docs/Features/multiline/multiline2.png differ diff --git a/docs/Features/multiline/multiline3.png b/docs/Features/multiline/multiline3.png new file mode 100644 index 000000000..525a082f9 Binary files /dev/null and b/docs/Features/multiline/multiline3.png differ diff --git a/docs/Features/screenshot-board-menu.png b/docs/Features/screenshot-board-menu.png new file mode 100644 index 000000000..b3416a7a2 Binary files /dev/null and b/docs/Features/screenshot-board-menu.png differ diff --git a/docs/Features/screenshot-boards.png b/docs/Features/screenshot-boards.png new file mode 100644 index 000000000..576dd4af0 Binary files /dev/null and b/docs/Features/screenshot-boards.png differ diff --git a/docs/Features/screenshot-filter.png b/docs/Features/screenshot-filter.png new file mode 100644 index 000000000..cd3ba57f8 Binary files /dev/null and b/docs/Features/screenshot-filter.png differ diff --git a/docs/Features/screenshot-keyboard-shortcuts.png b/docs/Features/screenshot-keyboard-shortcuts.png new file mode 100644 index 000000000..6925effa4 Binary files /dev/null and b/docs/Features/screenshot-keyboard-shortcuts.png differ diff --git a/docs/Features/screenshot-multi-selection.png b/docs/Features/screenshot-multi-selection.png new file mode 100644 index 000000000..adde68c37 Binary files /dev/null and b/docs/Features/screenshot-multi-selection.png differ diff --git a/docs/Features/screenshot-muted-watch.png b/docs/Features/screenshot-muted-watch.png new file mode 100644 index 000000000..ea6af52fc Binary files /dev/null and b/docs/Features/screenshot-muted-watch.png differ diff --git a/docs/Features/screenshot-public-board.png b/docs/Features/screenshot-public-board.png new file mode 100644 index 000000000..b82c36873 Binary files /dev/null and b/docs/Features/screenshot-public-board.png differ diff --git a/docs/Features/screenshot-restore-board.png b/docs/Features/screenshot-restore-board.png new file mode 100644 index 000000000..862fc193b Binary files /dev/null and b/docs/Features/screenshot-restore-board.png differ diff --git a/docs/Features/screenshot-star-board.png b/docs/Features/screenshot-star-board.png new file mode 100644 index 000000000..caf8eb730 Binary files /dev/null and b/docs/Features/screenshot-star-board.png differ diff --git a/docs/Features/screenshot-v0.9.jpeg b/docs/Features/screenshot-v0.9.jpeg new file mode 100644 index 000000000..15e32ab29 Binary files /dev/null and b/docs/Features/screenshot-v0.9.jpeg differ diff --git a/docs/Features/screenshot.png b/docs/Features/screenshot.png new file mode 100644 index 000000000..ad8d29238 Binary files /dev/null and b/docs/Features/screenshot.png differ 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/CSV.md b/docs/ImportExport/CSV/CSV.md similarity index 83% rename from docs/ImportExport/CSV.md rename to docs/ImportExport/CSV/CSV.md index ed18e66fd..bb8213f07 100644 --- a/docs/ImportExport/CSV.md +++ b/docs/ImportExport/CSV/CSV.md @@ -5,8 +5,8 @@ Right to click your username / All Boards / Add Board / Import / From CSV/TSV [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) +- [board-import.csv](board-import.csv) +- [board-import.tsv](board-import.tsv) Frontend: - [Import CSV code](https://github.com/wekan/wekan/tree/main/client/components/import) diff --git a/docs/ImportExport/CSV/board-import.csv b/docs/ImportExport/CSV/board-import.csv new file mode 100644 index 000000000..ac3c2143b --- /dev/null +++ b/docs/ImportExport/CSV/board-import.csv @@ -0,0 +1,26 @@ +Title,Description,Stage,Owner,Members,Labels,Due Date,start date,finish date,created at,updated at +Test card 1,Test description 1,Stage 1,testuser1,testuser1 testuser2,Marketing-blue,05/06/2020,03/20/2020,05/03/2020,03/20/2020,05/03/2020 +Test card 2,Test description 2,Stage 3,testuser1,testuser1 testuser2,Engineering ,05/11/2020,04/15/2020,05/12/2020,04/14/2020,04/14/2020 +Test card 3,Test description 3,Stage 2,testuser1,testuser1,Marketing,,03/23/2020,04/24/2020,03/21/2020,03/21/2020 +Test card 4,Test description 4,Stage 4,testuser1,testuser3 bryanmutai,Sales,05/08/2020,03/04/2020,,02/24/2020,02/24/2020 +Test card 5,Test description 5,Stage 1,testuser1,,Marketing,,03/10/2020,,03/11/2020,03/13/2020 +Test card 6,Test description 6,Stage 3,testuser1,,Sales,,03/06/2020,04/03/2020,03/02/2020,03/02/2020 +Test card 7,Test description 7,Stage 4,testuser1,testuser1,Accounting,05/20/2020,04/13/2020,05/06/2020,04/03/2020,05/03/2020 +Test card 8,Test description 8,Stage 2,testuser1,testuser2 testuser3,Sales,05/09/2020,03/13/2020,05/10/2020,02/23/2020,02/23/2020 +Test card 9,Test description 9,Stage 4,testuser1,,Sales,,03/17/2020,04/01/2020,03/07/2020,03/07/2020 +Test card 10,Test description 10,Stage 1,testuser1,testuser3,Engineering-red,05/10/2020,03/14/2020,,03/14/2020,03/14/2020 +Test card 11,Test description 11,Stage 4,testuser1,,,05/21/2020,03/24/2020,,03/24/2020,03/24/2020 +Test card 12,Test description 12,Stage 3,testuser1,testuser2,Sales Support,05/17/2020,03/19/2020,05/04/2020,03/19/2020,03/19/2020 +Test card 13,Test description 13,Stage 1,testuser1,,Sales Support,05/27/2020,03/25/2020,06/04/2020,03/25/2020,03/28/2020 +Test card 14,Test description 14,Stage 3,testuser1,testuser1 testuser3,,05/22/2020,03/03/2020,,03/03/2020,03/03/2020 +Test card 15,Test description 15,Stage 4,testuser1,,Marketing,,03/05/2020,,03/05/2020,03/05/2020 +Test card 16,Test description 16,Stage 3,testuser1,testuser3 testuser2,Engineering Support,05/13/2020,04/08/2020,05/04/2020,03/28/2020,04/28/2020 +Test card 17,Test description 17,Stage 2,testuser1,testuser1,,05/16/2020,03/18/2020,05/10/2020,03/18/2020,03/18/2020 +Test card 18,Test description 18,Stage 1,testuser1,,Support,,03/07/2020,04/06/2020,03/07/2020,03/07/2020 +Test card 19,Test description 19,Stage 3,testuser1,,Marketing,05/25/2020,03/11/2020,,03/10/2020,03/10/2020 +Test card 20,Test description 20,Stage 1,testuser1,,Sales,,03/21/2020,,03/11/2020,03/11/2020 +Test card 21,Test description 21,Stage 3,testuser1,testuser3,Engineering,05/12/2020,04/02/2020,,04/02/2020,04/12/2020 +Test card 22,Test description 22,Stage 2,testuser1,,Sales,05/15/2020,03/09/2020,05/03/2020,03/09/2020,03/09/2020 +Test card 23,Test description 23,Stage 2,testuser1,testuser2,,,02/04/2020,04/05/2020,02/03/2020,03/03/2020 +Test card 24,Test description 24,Stage 4,testuser1,testuser1 testuser2 testuser3,Support-yellow,05/14/2020,01/03/2020,04/04/2020,01/03/2020,01/03/2020 +Test card 25,Test description 25,Stage 2,testuser1,testuser1 testuser2 testuser3,Support-yellow,05/18/2020,03/16/2020,05/19/2020,03/11/2020,04/11/2020 \ No newline at end of file diff --git a/docs/ImportExport/CSV/board-import.tsv b/docs/ImportExport/CSV/board-import.tsv new file mode 100644 index 000000000..f36ea3e4e --- /dev/null +++ b/docs/ImportExport/CSV/board-import.tsv @@ -0,0 +1,26 @@ +Title Description Stage Owner Members Labels Due Date start date finish date created at updated at +Test card 1 Test description 1 Stage 1 testuser1 testuser1 testuser2 Marketing-blue 05/06/2020 03/20/2020 05/03/2020 03/20/2020 05/03/2020 +Test card 2 Test description 2 Stage 3 testuser1 testuser1 testuser2 Engineering 05/11/2020 04/15/2020 05/12/2020 04/14/2020 04/14/2020 +Test card 3 Test description 3 Stage 2 testuser1 testuser1 Marketing 03/23/2020 04/24/2020 03/21/2020 03/21/2020 +Test card 4 Test description 4 Stage 4 testuser1 testuser3 bryanmutai Sales 05/08/2020 03/04/2020 02/24/2020 02/24/2020 +Test card 5 Test description 5 Stage 1 testuser1 Marketing 03/10/2020 03/11/2020 03/13/2020 +Test card 6 Test description 6 Stage 3 testuser1 Sales 03/06/2020 04/03/2020 03/02/2020 03/02/2020 +Test card 7 Test description 7 Stage 4 testuser1 testuser1 Accounting 05/20/2020 04/13/2020 05/06/2020 04/03/2020 05/03/2020 +Test card 8 Test description 8 Stage 2 testuser1 testuser2 testuser3 Sales 05/09/2020 03/13/2020 05/10/2020 02/23/2020 02/23/2020 +Test card 9 Test description 9 Stage 4 testuser1 Sales 03/17/2020 04/01/2020 03/07/2020 03/07/2020 +Test card 10 Test description 10 Stage 1 testuser1 testuser3 Engineering-red 05/10/2020 03/14/2020 03/14/2020 03/14/2020 +Test card 11 Test description 11 Stage 4 testuser1 05/21/2020 03/24/2020 03/24/2020 03/24/2020 +Test card 12 Test description 12 Stage 3 testuser1 testuser2 Sales Support 05/17/2020 03/19/2020 05/04/2020 03/19/2020 03/19/2020 +Test card 13 Test description 13 Stage 1 testuser1 Sales Support 05/27/2020 03/25/2020 06/04/2020 03/25/2020 03/28/2020 +Test card 14 Test description 14 Stage 3 testuser1 testuser1 testuser3 05/22/2020 03/03/2020 03/03/2020 03/03/2020 +Test card 15 Test description 15 Stage 4 testuser1 Marketing 03/05/2020 03/05/2020 03/05/2020 +Test card 16 Test description 16 Stage 3 testuser1 testuser3 testuser2 Engineering Support 05/13/2020 04/08/2020 05/04/2020 03/28/2020 04/28/2020 +Test card 17 Test description 17 Stage 2 testuser1 testuser1 05/16/2020 03/18/2020 05/10/2020 03/18/2020 03/18/2020 +Test card 18 Test description 18 Stage 1 testuser1 Support 03/07/2020 04/06/2020 03/07/2020 03/07/2020 +Test card 19 Test description 19 Stage 3 testuser1 Marketing 05/25/2020 03/11/2020 03/10/2020 03/10/2020 +Test card 20 Test description 20 Stage 1 testuser1 Sales 03/21/2020 03/11/2020 03/11/2020 +Test card 21 Test description 21 Stage 3 testuser1 testuser3 Engineering 05/12/2020 04/02/2020 04/02/2020 04/12/2020 +Test card 22 Test description 22 Stage 2 testuser1 Sales 05/15/2020 03/09/2020 05/03/2020 03/09/2020 03/09/2020 +Test card 23 Test description 23 Stage 2 testuser1 testuser2 02/04/2020 04/05/2020 02/03/2020 03/03/2020 +Test card 24 Test description 24 Stage 4 testuser1 testuser1 testuser2 testuser3 Support-yellow 05/14/2020 01/03/2020 04/04/2020 01/03/2020 01/03/2020 +Test card 25 Test description 25 Stage 2 testuser1 testuser1 testuser2 testuser3 Support-yellow 05/18/2020 03/16/2020 05/19/2020 03/11/2020 04/11/2020 \ No newline at end of file diff --git a/docs/ImportExport/Delete-Board.md b/docs/ImportExport/Delete-Board.md index 6713715ba..925a6e4ad 100644 --- a/docs/ImportExport/Delete-Board.md +++ b/docs/ImportExport/Delete-Board.md @@ -1,7 +1,7 @@ ## 1) Move board to Archive -Move board to Archive +Move board to Archive ## 2) All Boards => Archive => Delete Board -Delete Board from Archive \ No newline at end of file +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 index e5993a684..2325afbe4 100644 --- a/docs/ImportExport/Excel-and-VBA.md +++ b/docs/ImportExport/Excel-and-VBA.md @@ -72,4 +72,4 @@ 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 +b) Use [Commercial Support](https://wekan.fi) and pay for the time to get it implemented. \ No newline at end of file diff --git a/docs/ImportExport/Migrating-from-old-Wekan-manually.md b/docs/ImportExport/Migrating-from-old-Wekan-manually.md index 4f8c09a21..61e8e5170 100644 --- a/docs/ImportExport/Migrating-from-old-Wekan-manually.md +++ b/docs/ImportExport/Migrating-from-old-Wekan-manually.md @@ -4,7 +4,7 @@ Here are some starting points. ## 1) Required: Backups -https://github.com/wekan/wekan/wiki/Backup +[Backup](../Backup/Backup.md) Do backups to multiple places. And test does restore work, with restore script already made. @@ -28,7 +28,7 @@ sed -i 's|FindThisText|ReplaceWithThisText|g' * - Migrations https://github.com/wekan/wekan/blob/v0.77/server/migrations.js ### Newest -- Schema https://github.com/wekan/wekan/tree/devel/models +- Schema https://github.com/wekan/wekan/tree/main/models - Migrations https://github.com/wekan/wekan/blob/main/server/migrations.js ## 5) Some migrations could be missing @@ -38,9 +38,9 @@ Some of the database schema can be different. If you see difference in these fil ## 6) Inform Wekan about what is missing ### a) Add issue -- [Add issue](https://github.com/wekan/wekan/issues) + +- 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 + +- [Build from source and create pull request](../DeveloperDocs/Build-and-Create-Pull-Request.md) diff --git a/docs/ImportExport/Asana.md b/docs/ImportExport/asana/Asana.md similarity index 50% rename from docs/ImportExport/Asana.md rename to docs/ImportExport/asana/Asana.md index 05cd00fa3..77a148955 100644 --- a/docs/ImportExport/Asana.md +++ b/docs/ImportExport/asana/Asana.md @@ -1,5 +1,5 @@ 2022-03-02 -[Added Perl scripts for Asana export to WeKan ®](https://github.com/wekan/wekan/tree/main/asana) +[Added Perl scripts for Asana export to WeKan ®](https://github.com/wekan/wekan/tree/main/docs/ImportExport/asana) -Thanks to GeekRuthie ! \ No newline at end of file +Thanks to GeekRuthie ! diff --git a/docs/ImportExport/trellinator/WekanPriorities.png b/docs/ImportExport/trellinator/WekanPriorities.png new file mode 100644 index 000000000..8d8e73515 Binary files /dev/null and b/docs/ImportExport/trellinator/WekanPriorities.png differ diff --git a/docs/ImportExport/trellinator/readme.txt b/docs/ImportExport/trellinator/readme.txt new file mode 100644 index 000000000..def052627 --- /dev/null +++ b/docs/ImportExport/trellinator/readme.txt @@ -0,0 +1,21 @@ +At this article: + +https://news.ycombinator.com/item?id=36047861 + +This comment: + +https://news.ycombinator.com/item?id=36053916 + +Quote: + +> dools 6 hours ago +> I can no longer edit, but it's worth noting that I went through my Trellinator libs and updated for use with WeKan, throwing exceptions where functionality doesn't yet exist: +> https://github.com/iaindooley/trellinator-libs +> https://github.com/iaindooley/trellinator +> I made a list of things that would need to be implemented in WeKan and/or the WeKan API to make it on-par with Trello (screenshot here of my checklist in Trello for this :) +> https://wekan.github.io/trellinator/WekanPriorities.png + +Forks: + +- https://github.com/wekan/trellinator +- https://github.com/wekan/trellinator-libs diff --git a/docs/ImportExport/trello/Migrating-from-Trello.md b/docs/ImportExport/trello/Migrating-from-Trello.md index 57892fd88..671860b57 100644 --- a/docs/ImportExport/trello/Migrating-from-Trello.md +++ b/docs/ImportExport/trello/Migrating-from-Trello.md @@ -1,8 +1,11 @@ -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 +## Importing attachments from Trello + +- https://github.com/wekan/trello-attachments-downloader +- In Progress + - Fix import from Trello https://github.com/wekan/wekan/issues/5725 + - Mass migrate from old WeKan to new WeKan without mapping users + +## OLD If you're already a Trello user, migrating to Wekan is easy: @@ -12,23 +15,23 @@ If you're already a Trello user, migrating to Wekan is easy: 4. import them into Wekan 5. be aware of some limitations -# 1. Install Wekan +### 1. Install Wekan Detailed instructions are on this wiki at the page [Install and Update](Install-and-Update) -# 2. Create users +### 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 +### 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 +### 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". @@ -37,7 +40,7 @@ If your board had members, you will need to tell Wekan which of its users should Once imported, Wekan will put you straight into your new board. Enjoy! -# 5. Limitations +### 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. @@ -46,4 +49,4 @@ 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 +- 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. diff --git a/docs/ImportExport/trello2wekan/index-html.txt b/docs/ImportExport/trello2wekan/index-html.txt new file mode 100644 index 000000000..017be0442 --- /dev/null +++ b/docs/ImportExport/trello2wekan/index-html.txt @@ -0,0 +1,86 @@ + + + + + + JSON Viewer + + + + +

JSON Viewer

+

Source

+ +
+
+ + + + + + diff --git a/docs/ImportExport/trello2wekan/pretty-json-custom-element-js.txt b/docs/ImportExport/trello2wekan/pretty-json-custom-element-js.txt new file mode 100644 index 000000000..5e5b6a10f --- /dev/null +++ b/docs/ImportExport/trello2wekan/pretty-json-custom-element-js.txt @@ -0,0 +1,451 @@ +// @ts-check +/** + * @typedef {string | number | null | undefined | bigint | boolean | symbol} Primitive + * @typedef {(...args: any[]) => any} AnyFunction + */ + +class PrettyJSONError extends Error { + /** + * + * @param {string} message + */ + constructor(message) { + super(message); + this.name = "PrettyJSONError"; + } +} + +class PrettyJSON extends HTMLElement { + /** + * @type {any} + */ + #input; + + /** + * @type {boolean} + */ + #isExpanded; + + static get observedAttributes() { + return ["expand", "key", "truncate-string"]; + } + + static styles = `/* css */ + :host { + --key-color: #cc0000; + --arrow-color: #737373; + --brace-color: #0030f0; + --bracket-color: #0030f0; + --string-color: #009900; + --number-color: #0000ff; + --null-color: #666666; + --boolean-color: #d23c91; + --comma-color: #666666; + --ellipsis-color: #666666; + + --indent: 2rem; + } + @media (prefers-color-scheme: dark) { + :host { + --key-color: #f73d3d; + --arrow-color: #6c6c6c; + --brace-color: #0690bc; + --bracket-color: #0690bc; + --string-color: #21c521; + --number-color: #0078b3; + --null-color: #8c8888; + --boolean-color: #c737b3; + --comma-color: #848181; + --ellipsis-color: #c2c2c2; + } + } + button { + border: none; + background: transparent; + cursor: pointer; + font-family: inherit; + font-size: 1rem; + vertical-align: text-bottom; + } + .container { + font-family: monospace; + font-size: 1rem; + } + .key { + color: var(--key-color); + margin-right: 0.5rem; + padding: 0; + } + .key .arrow { + width: 1rem; + height: 0.75rem; + margin-left: -1.25rem; + padding-right: 0.25rem; + vertical-align: baseline; + } + .arrow .triangle { + fill: var(--arrow-color); + } + .comma { + color: var(--comma-color); + } + .brace { + color: var(--brace-color); + } + .string, + .url { + color: var(--string-color); + } + .number, + .bigint { + color: var(--number-color); + } + .null { + color: var(--null-color); + } + .boolean { + color: var(--boolean-color); + } + + .ellipsis { + width: 1rem; + padding: 0; + color: var(--ellipsis-color); + } + .ellipsis::after { + content: "…"; + } + .string .ellipsis::after { + color: var(--string-color); + } + .triangle { + fill: black; + stroke: black; + stroke-width: 0; + } + .row { + padding-left: var(--indent); + } + .row .row { + display: block; + } + .row > div, + .row > span { + display: inline-block; + } + `; + + constructor() { + super(); + + this.#isExpanded = true; + this.attachShadow({ mode: "open" }); + } + + get #expandAttributeValue() { + const expandAttribute = this.getAttribute("expand"); + if (expandAttribute === null) { + return 1; + } + const expandValue = Number.parseInt(expandAttribute); + return isNaN(expandValue) || expandValue < 0 ? 0 : expandValue; + } + + get #truncateStringAttributeValue() { + const DEFAULT_TRUNCATE_STRING = 500; + const truncateStringAttribute = this.getAttribute("truncate-string"); + if (truncateStringAttribute === null) { + return DEFAULT_TRUNCATE_STRING; + } + const truncateStringValue = Number.parseInt(truncateStringAttribute); + return isNaN(truncateStringValue) || truncateStringValue < 0 + ? 0 + : truncateStringValue; + } + + #toggle() { + this.#isExpanded = !this.#isExpanded; + this.setAttribute( + "expand", + this.#isExpanded ? String(this.#expandAttributeValue + 1) : "0" + ); + this.#render(); + } + + /** + * @param {Record | any[] | Primitive | AnyFunction} input + * @param {number} expand + * @param {string} [key] + * @returns {HTMLElement} + */ + #createChild(input, expand, key) { + if (this.#isPrimitiveValue(input)) { + const container = this.#createContainer(); + container.appendChild(this.#createPrimitiveValueElement(input)); + return container; + } + return this.#createObjectOrArray(input); + } + + /** + * @param {any} input + * @returns {input is Primitive} + */ + #isPrimitiveValue(input) { + return typeof input !== "object" || input === null; + } + + #isValidStringURL() { + try { + new URL(this.#input); + return true; + } catch (error) { + return false; + } + } + + /** + * @param {Primitive} input + * @returns {HTMLElement} + */ + #createPrimitiveValueElement(input) { + const container = document.createElement("div"); + const type = typeof input === "object" ? "null" : typeof input; + container.className = `primitive value ${type}`; + if (typeof input === "string") { + if (this.#isValidStringURL()) { + const anchor = document.createElement("a"); + anchor.className = "url"; + anchor.href = this.#input; + anchor.target = "_blank"; + anchor.textContent = input; + container.append('"', anchor, '"'); + } else if (input.length > this.#truncateStringAttributeValue) { + container.appendChild(this.#createTruncatedStringElement(input)); + } else { + container.textContent = JSON.stringify(input); + } + } else { + container.textContent = JSON.stringify(input); + } + return container; + } + + /** + * @param {string} input + */ + #createTruncatedStringElement(input) { + const container = document.createElement("div"); + container.dataset.expandedTimes = "1"; + container.className = "truncated string"; + const ellipsis = document.createElement("button"); + ellipsis.className = "ellipsis"; + + ellipsis.addEventListener("click", () => { + const expandedTimes = Number.parseInt( + container.dataset.expandedTimes ?? "1" + ); + container.dataset.expandedTimes = String(expandedTimes + 1); + const expandedString = input.slice( + 0, + (expandedTimes + 1) * this.#truncateStringAttributeValue + ); + const textChild = container.childNodes[1]; + container.replaceChild( + document.createTextNode(expandedString), + textChild + ); + }); + + container.append( + '"', + input.slice(0, this.#truncateStringAttributeValue), + ellipsis, + '"' + ); + return container; + } + + /** + * @returns {HTMLElement} + */ + #createContainer() { + const container = document.createElement("div"); + container.className = "container"; + return container; + } + + /** + * @param {Record | any[]} object + * @returns {HTMLElement} + */ + #createObjectOrArray(object) { + const isArray = Array.isArray(object); + const objectKeyName = this.getAttribute("key"); + const expand = this.#expandAttributeValue; + + const container = this.#createContainer(); + container.classList.add(isArray ? "array" : "object"); + + if (objectKeyName) { + // if objectKeyName is provided, then it is a row + container.classList.add("row"); + const keyElement = this.#createKeyElement(objectKeyName, { + withArrow: true, + expanded: this.#isExpanded, + }); + keyElement.addEventListener("click", this.#toggle.bind(this)); + container.appendChild(keyElement); + } + + const openingBrace = document.createElement("span"); + openingBrace.className = "open brace"; + openingBrace.textContent = isArray ? "[" : "{"; + container.appendChild(openingBrace); + + const closingBrace = document.createElement("span"); + closingBrace.className = "close brace"; + closingBrace.textContent = isArray ? "]" : "}"; + + if (!this.#isExpanded) { + const ellipsis = document.createElement("button"); + ellipsis.className = "ellipsis"; + container.appendChild(ellipsis); + ellipsis.addEventListener("click", this.#toggle.bind(this)); + container.appendChild(closingBrace); + return container; + } + + Object.entries(object).forEach(([key, value], index) => { + // for primitives we make a row here + if (this.#isPrimitiveValue(value)) { + const rowContainer = document.createElement("div"); + rowContainer.className = "row"; + if (!isArray) { + const keyElement = this.#createKeyElement(key); + rowContainer.appendChild(keyElement); + } + rowContainer.appendChild(this.#createPrimitiveValueElement(value)); + container.appendChild(rowContainer); + const isLast = index === Object.keys(object).length - 1; + if (!isLast) { + const comma = document.createElement("span"); + comma.className = "comma"; + comma.textContent = ","; + rowContainer.appendChild(comma); + } + return; + } + + // for objects and arrays we make a "container row" + const prettyJsonElement = document.createElement("pretty-json"); + prettyJsonElement.textContent = JSON.stringify(value); + prettyJsonElement.setAttribute("expand", String(expand - 1)); + prettyJsonElement.setAttribute("key", key); + container.appendChild(prettyJsonElement); + }); + + container.appendChild(closingBrace); + return container; + } + + /** + * @param {{ expanded?: boolean }} [options] + * @returns {SVGElement} + */ + #createArrowElement({ expanded = false } = {}) { + const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("width", "100"); + svg.setAttribute("height", "100"); + svg.setAttribute("viewBox", "0 0 100 100"); + svg.setAttribute("class", "arrow"); + const polygon = document.createElementNS( + "http://www.w3.org/2000/svg", + "polygon" + ); + + polygon.setAttribute("class", "triangle"); + polygon.setAttribute("points", "0,0 100,50 0,100"); + + if (expanded) { + polygon.setAttribute("transform", "rotate(90 50 50)"); + } + + svg.appendChild(polygon); + + return svg; + } + + /** + * @param {string} key + * @param {{ withArrow?: boolean, expanded?: boolean }} [options] + * @returns {HTMLElement} + */ + #createKeyElement(key, { withArrow = false, expanded = false } = {}) { + const keyElement = document.createElement(withArrow ? "button" : "span"); + keyElement.className = "key"; + if (withArrow) { + const arrow = this.#createArrowElement({ expanded }); + keyElement.appendChild(arrow); + } + const keyName = document.createElement("span"); + keyName.className = "key-name"; + keyName.textContent = JSON.stringify(key); + keyElement.appendChild(keyName); + const colon = document.createElement("span"); + colon.className = "colon"; + colon.textContent = ":"; + keyElement.appendChild(colon); + return keyElement; + } + + #render() { + if (!this.shadowRoot) { + throw new PrettyJSONError("Shadow root not available"); + } + this.shadowRoot.innerHTML = ""; + this.shadowRoot.appendChild( + this.#createChild(this.#input, this.#expandAttributeValue) + ); + + if (this.shadowRoot.querySelector("[data-pretty-json]")) { + return; + } + + const styles = document.createElement("style"); + styles.setAttribute("data-pretty-json", ""); + styles.textContent = PrettyJSON.styles; + this.shadowRoot.appendChild(styles); + } + + /** + * Handle when attributes change + * @param {string} name + * @param {string} _oldValue + * @param {string | null} newValue + */ + attributeChangedCallback(name, _oldValue, newValue) { + if (name === "expand") { + if (newValue === null) { + this.#isExpanded = false; + } else { + const expandValue = Number.parseInt(newValue); + this.#isExpanded = !isNaN(expandValue) && expandValue > 0; + } + this.#render(); + } + } + + connectedCallback() { + try { + this.#input = JSON.parse(this.textContent ?? ""); + } catch (jsonParseError) { + const message = `Error parsing JSON: ${jsonParseError instanceof Error ? jsonParseError.message : "Unknown error"}`; + throw new PrettyJSONError(message); + } + this.#render(); + } +} + +// Define pretty-json custom element +customElements.define("pretty-json", PrettyJSON); diff --git a/docs/ImportExport/wekan-import-board.png b/docs/ImportExport/wekan-import-board.png new file mode 100644 index 000000000..92f8342ac Binary files /dev/null and b/docs/ImportExport/wekan-import-board.png differ diff --git a/docs/Features/Adding-users.md b/docs/Login/Adding-users.md similarity index 96% rename from docs/Features/Adding-users.md rename to docs/Login/Adding-users.md index 405f9e5f8..8ec421254 100644 --- a/docs/Features/Adding-users.md +++ b/docs/Login/Adding-users.md @@ -19,7 +19,7 @@ For more options see [Troubleshooting Email](Troubleshooting-Mail) 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) +![Admin Panel](https://wekan.fi/wekan-admin-panel.png) 7) For registering other users: diff --git a/docs/Platforms/Propietary/Cloud/Azure.md b/docs/Login/Azure/Azure.md similarity index 97% rename from docs/Platforms/Propietary/Cloud/Azure.md rename to docs/Login/Azure/Azure.md index 15a9de760..cb6d4a90b 100644 --- a/docs/Platforms/Propietary/Cloud/Azure.md +++ b/docs/Login/Azure/Azure.md @@ -8,7 +8,7 @@ [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 Redirect AZURE_DIRECTORY_ID = TENANT-NAME-FOR-YOUR-ORGANIZATION @@ -23,7 +23,7 @@ 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 +Azure App Client Secret ### @@ -177,4 +177,4 @@ 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 +- https://github.com/wekan/wekan/wiki/Export-from-Wekan-Sandstorm-grain-.zip-file#azure-links diff --git a/docs/Login/Azure/azure-app-client-secret.png b/docs/Login/Azure/azure-app-client-secret.png new file mode 100644 index 000000000..ca1d9227b Binary files /dev/null and b/docs/Login/Azure/azure-app-client-secret.png differ diff --git a/docs/Login/Azure/azure-redirect.png b/docs/Login/Azure/azure-redirect.png new file mode 100644 index 000000000..503f41582 Binary files /dev/null and b/docs/Login/Azure/azure-redirect.png differ diff --git a/docs/Admin/Impersonate-user.md b/docs/Login/Impersonate-user.md similarity index 100% rename from docs/Admin/Impersonate-user.md rename to docs/Login/Impersonate-user.md diff --git a/docs/Login/Keycloak.md b/docs/Login/Keycloak/Keycloak.md similarity index 96% rename from docs/Login/Keycloak.md rename to docs/Login/Keycloak/Keycloak.md index 296d6ea23..192a7c846 100644 --- a/docs/Login/Keycloak.md +++ b/docs/Login/Keycloak/Keycloak.md @@ -12,7 +12,7 @@ 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 settings: [realm-export.zip](https://wekan.fi/keycloak/realm-export.zip) [Keycloak at Docker Hub](https://hub.docker.com/r/jboss/keycloak) diff --git a/docs/Login/Keycloak/realm-export.zip b/docs/Login/Keycloak/realm-export.zip new file mode 100644 index 000000000..3d0f388b0 Binary files /dev/null and b/docs/Login/Keycloak/realm-export.zip differ diff --git a/docs/Login/OAuth2.md b/docs/Login/OAuth2.md index c62df3efd..96f69ba6b 100644 --- a/docs/Login/OAuth2.md +++ b/docs/Login/OAuth2.md @@ -170,7 +170,7 @@ sudo systemctl status snap.wekan.wekan 3) Click `Authorize` . This is asked only first time when logging in to Wekan with Rocket.Chat. -Wekan login to Rocket.Chat +Wekan login to Rocket.Chat ### 6) Set your Full Name @@ -180,7 +180,7 @@ Currently Full Name is not preserved, so you need to change it. 2) Add info and Save. -Wekan login to Rocket.Chat +Wekan login to Rocket.Chat ### 7) Add more login options to Rocket.Chat @@ -188,7 +188,7 @@ Currently Full Name is not preserved, so you need to change it. 2) There are many options at OAuth menu. Above and below of OAuth are also CAS, LDAP and SAML. -Wekan login to Rocket.Chat +Wekan login to Rocket.Chat # Auth0 diff --git a/docs/Login/Password-Hashing.md b/docs/Login/Password-Hashing.md index c90e6eecf..a4e638c0d 100644 --- a/docs/Login/Password-Hashing.md +++ b/docs/Login/Password-Hashing.md @@ -1,3 +1,9 @@ +## TODO + +Meteor 3 has migrations of password hashing to some newer hash. + +## OLD + While [discussing various alternatives in hashing passwords](https://github.com/meteor/meteor/discussions/11812#discussioncomment-1930533): From @xet7 at 2022-01-08: diff --git a/docs/Login/oauth-rocketchat-options.png b/docs/Login/oauth-rocketchat-options.png new file mode 100644 index 000000000..2806d7786 Binary files /dev/null and b/docs/Login/oauth-rocketchat-options.png differ diff --git a/docs/Login/oauth2-login.png b/docs/Login/oauth2-login.png new file mode 100644 index 000000000..2aef5aedc Binary files /dev/null and b/docs/Login/oauth2-login.png differ diff --git a/docs/Login/oauth2-profile-settings.png b/docs/Login/oauth2-profile-settings.png new file mode 100644 index 000000000..fc74ef954 Binary files /dev/null and b/docs/Login/oauth2-profile-settings.png differ diff --git a/docs/Login/screenshot-admin-panel-email.png b/docs/Login/screenshot-admin-panel-email.png new file mode 100644 index 000000000..2c9278418 Binary files /dev/null and b/docs/Login/screenshot-admin-panel-email.png differ diff --git a/docs/Login/screenshot-admin-panel-registration.png b/docs/Login/screenshot-admin-panel-registration.png new file mode 100644 index 000000000..2bd59b9c4 Binary files /dev/null and b/docs/Login/screenshot-admin-panel-registration.png differ diff --git a/docs/Login/screenshot-member-comment-only.png b/docs/Login/screenshot-member-comment-only.png new file mode 100644 index 000000000..439b3de5d Binary files /dev/null and b/docs/Login/screenshot-member-comment-only.png differ diff --git a/docs/Login/screenshot-member-filter.png b/docs/Login/screenshot-member-filter.png new file mode 100644 index 000000000..15e4d8a6d Binary files /dev/null and b/docs/Login/screenshot-member-filter.png differ diff --git a/docs/Login/screenshot-member-settings-archive.png b/docs/Login/screenshot-member-settings-archive.png new file mode 100644 index 000000000..4109314f6 Binary files /dev/null and b/docs/Login/screenshot-member-settings-archive.png differ diff --git a/docs/Login/screenshot-member-settings-edit-notification.png b/docs/Login/screenshot-member-settings-edit-notification.png new file mode 100644 index 000000000..7ef186dd4 Binary files /dev/null and b/docs/Login/screenshot-member-settings-edit-notification.png differ diff --git a/docs/Login/screenshot-member-settings-hide-system-messages.png b/docs/Login/screenshot-member-settings-hide-system-messages.png new file mode 100644 index 000000000..e949249a3 Binary files /dev/null and b/docs/Login/screenshot-member-settings-hide-system-messages.png differ diff --git a/docs/Login/screenshot-member-settings.png b/docs/Login/screenshot-member-settings.png new file mode 100644 index 000000000..c7868bb80 Binary files /dev/null and b/docs/Login/screenshot-member-settings.png differ diff --git a/docs/Login/wekan-admin-panel.png b/docs/Login/wekan-admin-panel.png new file mode 100644 index 000000000..5e87c8503 Binary files /dev/null and b/docs/Login/wekan-admin-panel.png differ diff --git a/docs/Platforms/FOSS/Docker/docker-ram-usage.png b/docs/Platforms/FOSS/Docker/docker-ram-usage.png new file mode 100644 index 000000000..3a91526c4 Binary files /dev/null and b/docs/Platforms/FOSS/Docker/docker-ram-usage.png differ diff --git a/docs/Platforms/FOSS/Docker/wekan-linux64bit-docker-in-win10.png b/docs/Platforms/FOSS/Docker/wekan-linux64bit-docker-in-win10.png new file mode 100644 index 000000000..04b67e50d Binary files /dev/null and b/docs/Platforms/FOSS/Docker/wekan-linux64bit-docker-in-win10.png differ diff --git a/docs/Platforms/FOSS/Friend/Friend-Blender.jpg b/docs/Platforms/FOSS/Friend/Friend-Blender.jpg new file mode 100644 index 000000000..72ab3754b Binary files /dev/null and b/docs/Platforms/FOSS/Friend/Friend-Blender.jpg differ diff --git a/docs/Platforms/FOSS/Friend/Friend-Visual-Programming.png b/docs/Platforms/FOSS/Friend/Friend-Visual-Programming.png new file mode 100644 index 000000000..4b40e503b Binary files /dev/null and b/docs/Platforms/FOSS/Friend/Friend-Visual-Programming.png differ diff --git a/docs/Platforms/FOSS/Friend/Friend-Webinar-1024x576.jpeg b/docs/Platforms/FOSS/Friend/Friend-Webinar-1024x576.jpeg new file mode 100644 index 000000000..001d5d934 Binary files /dev/null and b/docs/Platforms/FOSS/Friend/Friend-Webinar-1024x576.jpeg differ diff --git a/docs/Platforms/FOSS/Friend.md b/docs/Platforms/FOSS/Friend/Friend.md similarity index 97% rename from docs/Platforms/FOSS/Friend.md rename to docs/Platforms/FOSS/Friend/Friend.md index 8b7ad91f4..e9ab22adf 100644 --- a/docs/Platforms/FOSS/Friend.md +++ b/docs/Platforms/FOSS/Friend/Friend.md @@ -33,9 +33,9 @@ https://www.youtube.com/watch?v=SB4dNC7u2MU 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) +![Wekan Friend development version screenshot](wekan-friend-dev.png) -More Screenshots of Wekan and Friend at https://blog.wekan.team/2018/05/upcoming-wekan-v1-00-and-platforms/ +More Screenshots of Wekan and Friend at https://wekan.fi/blog/2018/05/upcoming-wekan-v1-00-and-platforms/ ## Source code diff --git a/docs/Platforms/FOSS/Friend/FriendUp-platforms.jpg b/docs/Platforms/FOSS/Friend/FriendUp-platforms.jpg new file mode 100644 index 000000000..52e0ff014 Binary files /dev/null and b/docs/Platforms/FOSS/Friend/FriendUp-platforms.jpg differ diff --git a/docs/Platforms/FOSS/Friend/FriendUp.jpg b/docs/Platforms/FOSS/Friend/FriendUp.jpg new file mode 100644 index 000000000..2c623b889 Binary files /dev/null and b/docs/Platforms/FOSS/Friend/FriendUp.jpg differ diff --git a/docs/Platforms/FOSS/Friend/friend-marketplace.jpg b/docs/Platforms/FOSS/Friend/friend-marketplace.jpg new file mode 100644 index 000000000..00ae9f672 Binary files /dev/null and b/docs/Platforms/FOSS/Friend/friend-marketplace.jpg differ diff --git a/docs/Platforms/FOSS/Friend/wekan-friend-dev.png b/docs/Platforms/FOSS/Friend/wekan-friend-dev.png new file mode 100644 index 000000000..be09b4436 Binary files /dev/null and b/docs/Platforms/FOSS/Friend/wekan-friend-dev.png differ diff --git a/docs/Platforms/FOSS/Helm2.md b/docs/Platforms/FOSS/Helm2.md index ae8613aae..3ce481333 100644 --- a/docs/Platforms/FOSS/Helm2.md +++ b/docs/Platforms/FOSS/Helm2.md @@ -2,7 +2,7 @@ ## Webpage -https://wekan.github.io/charts/ +https://wekan.fi/charts/ ## ArtifactHub diff --git a/docs/Platforms/FOSS/Meteor/upgrade-meteor3-new.png b/docs/Platforms/FOSS/Meteor/upgrade-meteor3-new.png new file mode 100644 index 000000000..20d0439f5 Binary files /dev/null and b/docs/Platforms/FOSS/Meteor/upgrade-meteor3-new.png differ diff --git a/docs/Platforms/FOSS/OpenShift/OpenShift.md b/docs/Platforms/FOSS/OpenShift/OpenShift.md index 90d132c48..ebc302878 100644 --- a/docs/Platforms/FOSS/OpenShift/OpenShift.md +++ b/docs/Platforms/FOSS/OpenShift/OpenShift.md @@ -1,4 +1,4 @@ -[Docker, Wekan and MongoDB on OpenShift](https://github.com/wekan/wekan/tree/main/openshift) +[Docker, Wekan and MongoDB on OpenShift](README.md) [OpenShift config issue](https://github.com/wekan/wekan/issues/1778) diff --git a/docs/Platforms/FOSS/Platforms.md b/docs/Platforms/FOSS/Platforms.md index 519fb7cdf..1f9a4ae5d 100644 --- a/docs/Platforms/FOSS/Platforms.md +++ b/docs/Platforms/FOSS/Platforms.md @@ -21,7 +21,7 @@ Only newest Wekan is supported. Please check you are running newest Wekan, becau ## 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) +- [Video of installing Univention Wekan Appliance](https://wekan.fi/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) @@ -43,7 +43,7 @@ Only newest Wekan is supported. Please check you are running newest Wekan, becau ## 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. +* [Wekan Team](https://wekan.fi/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 diff --git a/docs/Platforms/FOSS/Source/Raspberry-Pi.md b/docs/Platforms/FOSS/RaspberryPi/Raspberry-Pi.md similarity index 94% rename from docs/Platforms/FOSS/Source/Raspberry-Pi.md rename to docs/Platforms/FOSS/RaspberryPi/Raspberry-Pi.md index 269805d1d..0bb811c1f 100644 --- a/docs/Platforms/FOSS/Source/Raspberry-Pi.md +++ b/docs/Platforms/FOSS/RaspberryPi/Raspberry-Pi.md @@ -6,8 +6,8 @@ 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/ +- Node.js binary, version number is at https://wekan.fi Download section, like https://nodejs.org/dist/latest-v14.x/ +- MongoDB, version number is at https://wekan.fi 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) @@ -113,7 +113,7 @@ 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) +[Blogpost](https://wekan.fi/blog/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) @@ -422,7 +422,7 @@ And then start Wekan with: ## Wekan for RasPi3 arm64 and other CPU architectures -Wekan on RasPi3 +Wekan on RasPi3 Newest Wekan: - Ubuntu 19.10 Server arm64 for RasPi3 and RasPi4 @@ -437,11 +437,11 @@ If there is errors in restoring, try: ``` mongorestore --drop --noIndexRestore ``` -Wekan on RasPi3 +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 +Wekan on RasPi3 I did also test Wekan arm64 on arm64 bare metal server, same Wekan bundle worked there. diff --git a/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3-cpu-usage.jpg b/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3-cpu-usage.jpg new file mode 100644 index 000000000..26496daa2 Binary files /dev/null and b/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3-cpu-usage.jpg differ diff --git a/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3-with-all-data.jpg b/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3-with-all-data.jpg new file mode 100644 index 000000000..324dbc3e5 Binary files /dev/null and b/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3-with-all-data.jpg differ diff --git a/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3.png b/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3.png new file mode 100644 index 000000000..83c6b68bc Binary files /dev/null and b/docs/Platforms/FOSS/RaspberryPi/wekan-raspi3.png differ diff --git a/docs/Platforms/FOSS/Sandstorm/Building-Wekan-for-Sandstorm.md b/docs/Platforms/FOSS/Sandstorm/Building-Wekan-for-Sandstorm.md new file mode 100644 index 000000000..65d83bddb --- /dev/null +++ b/docs/Platforms/FOSS/Sandstorm/Building-Wekan-for-Sandstorm.md @@ -0,0 +1,188 @@ +## [FOR SANDSTORM WEKAN DEVELOPERS, CLICK HERE FOR OTHER DOCS](https://github.com/wekan/wekan-maintainer/wiki/Developing-Wekan-for-Sandstorm). + +## NOTE: This remaining page below is only for maintainers, and is partially outdated. + +*** + +## 1) Download Wekan Sandstorm VirtualBox image + +[https://releases.wekan.team](https://releases.wekan.team) + +## 2) Update all packages + +``` +sudo apt-get update && sudo apt-get -y dist-upgrade +``` + +## 3) Install kernel that works with building for Sandtorm + +[Sandstorm issue about kernel bug](https://github.com/sandstorm-io/sandstorm/issues/2526) + +[Kernel packaces list](http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.14-xenial/) + +``` +wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.14-xenial/linux-headers-4.4.14-040414_4.4.14-040414.201606241434_all.deb + +wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.14-xenial/linux-headers-4.4.14-040414-generic_4.4.14-040414.201606241434_amd64.deb + +wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.14-xenial/linux-image-4.4.14-040414-generic_4.4.14-040414.201606241434_amd64.deb + +sudo dpkg -i linux-headers-4.4.14-040414_4.4.14-040414.201606241434_all.deb \ +linux-headers-4.4.14-040414-generic_4.4.14-040414.201606241434_amd64.deb \ +linux-image-4.4.14-040414-generic_4.4.14-040414.201606241434_amd64.deb +``` + +## 4) Install gcc version that works for compiling VirtualBox extensions on kernel 4.4.14 + +[Info source at VirtualBox forums](https://forums.virtualbox.org/viewtopic.php?f=7&t=76032) + +[Info source at AskUbuntu](https://askubuntu.com/questions/428198/getting-installing-gcc-g-4-9-on-ubuntu) + +``` +sudo add-apt-repository ppa:ubuntu-toolchain-r/test + +sudo apt-get update + +sudo apt-get install gcc-4.9 + +sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20 +``` + +## 5) Install VirtualBox kernel extensions + +From Devices / Install Guest Additions CD image... + +## 6) Install Sandstorm dev version + +[Info source](https://sandstorm.io/install) + +Start install: + +``` +curl https://install.sandstorm.io | bash +``` + +Use options for development / dev install. + +Edit Sandstorm config: +``` +sudo nano /opt/sandstorm/sandstorm.conf +``` +Uncomment this line this way, so Sandstorm packages are not updated automatically: +``` +#UPDATE_CHANNEL=dev +``` + +## 7) Add Wekan to sandstorm user group textfile /etc/group + +``` +sudo useradd -G sandstorm wekan +``` + +## 8) Download meteor-spk packaging tool + +[Info source](https://github.com/sandstorm-io/meteor-spk) + +``` +cd ~/repos +curl https://dl.sandstorm.io/meteor-spk-0.4.0.tar.xz | tar Jxf - +echo "export PATH=$PATH:~/repos/meteor-spk-0.4.0" >> ~/.bashrc +``` + +## 9) Reboot + +``` +sudo reboot +``` + +## 10) Stop Wekan + +``` +cd ~/repos +./stop.wekan.sh +``` + +Check did Wekan stop really: + +``` +ps aux | grep 'node main.js' +``` + +You may need to kill it: + +``` +sudo kill -9 PID-NUMBER-HERE +``` + +(This process should be improved). + +## 11) Rebuild Wekan + +``` +cd ~/repos +./rebuild-wekan.sh +``` + + +## 12) Build development package and install to local Sandstorm + +``` +cd ~/repos/wekan +meteor-spk dev +``` + +## 13) After building Wekan, last line of text should be: + +``` +App in now available from Sandstorm server. Ctrl-C to disconnect. +``` + +## 14) In terminal, click File / Open Tab to open new shell, and get login URL + +``` +sudo sandstorm admin-token +``` + +## 15) Go to login URL with Firefox + +## 16) You may need to setup your username etc + +## 17) Go to Apps / Wekan. Wekan has grey "dev mode" background. Click Wekan. + +## 18) Click + (Dev) Create new board + +## 19) Check is everything working in Wekan. + +*** + +# After testing, when really xet7 is making release + +## 20) Update Sandstorm release number + +``` +cd ~/repos/wekan +nano sandstorm-pkgdef.capnp +``` + +You may need to change these when everything works. AFAIK appVersion 20 is not released yet, as xet7 did increment it to 20. Sandstorm will reject wrong metadata, so it can be checked later. + +``` + appVersion = 20, + # Increment this for every release. + + appMarketingVersion = (defaultText = "0.32.0~2017-07-30"), + # Human-readable presentation of the app version. +``` + +## 21) Build .spk package + +``` +meteor-spk pack wekan-0.32.spk +``` + +## 22) Publish to experimental Sandstorm App Market + +``` +spk publish wekan-0.32.spk +``` +## 23) And then ocdtrekkie checks it, if it's Ok then he releases for official Sandstorm App Market \ No newline at end of file diff --git a/docs/Platforms/FOSS/Sandstorm/Developing-Wekan-for-Sandstorm.md b/docs/Platforms/FOSS/Sandstorm/Developing-Wekan-for-Sandstorm.md new file mode 100644 index 000000000..3fae1f9a9 --- /dev/null +++ b/docs/Platforms/FOSS/Sandstorm/Developing-Wekan-for-Sandstorm.md @@ -0,0 +1,144 @@ +Development is usually done on Xubuntu 16.04 64bit. This could also work on other Ubuntu or Debian based distros, that are 64bit. + +Standalone and Sandstorm Wekan has same code. Only difference is, that at Sandstorm, some features are hidden from web UI by checking `isSandstorm` environment variable that is defined at `wekan/sandstorm*` code files. You see checking at webpage templates `wekan/client/components/*/*.jade` and `wekan/client/components/*/*.js` Javascript code that clicking triggers. See [Directory Structure](https://github.com/wekan/wekan/wiki/Directory-Structure). Also, at Sandstorm there is single SSO login, with code at `wekan/server/authentication.js` and `wekan/sandstorm*`. Sandstorm does not use username and passwords, instead Sandstorm saves sandstorm ID to MongoDB, so that database structure is different on Sandstorm. Database tables/collections are defined at `wekan/models/*`. + +Read: +- [Developer Docs](https://github.com/wekan/wekan/wiki/Developer-Documentation) +- [Directory Structure](https://github.com/wekan/wekan/wiki/Directory-Structure) + + + +## 1) Install Sandstorm + +Start install: +``` +curl https://install.sandstorm.io | bash +``` + +Use options for development / dev install. + +Edit Sandstorm config: +``` +sudo nano /opt/sandstorm/sandstorm.conf +``` +Uncomment this line this way, so Sandstorm packages are not updated automatically: +``` +#UPDATE_CHANNEL=dev +``` +Stop and start Sandstorm: +``` +sudo sandstorm stop +sudo sandstorm start +``` + +## 2) Download meteor-spk packaging tool + +[Info source](https://github.com/sandstorm-io/meteor-spk) + +``` +mkdir ~/repos +cd ~/repos +curl https://dl.sandstorm.io/meteor-spk-0.4.0.tar.xz | tar Jxf - +echo "export PATH=$PATH:~/repos/meteor-spk-0.4.0" >> ~/.bashrc +``` + +## 3) Fork Wekan, and clone your fork + +Fork repo https://github.com/wekan/wekan +``` +cd ~/repos +git clone git@github.com:YOUR-USER-NAME-HERE/wekan.git +``` +Add Wekan as upstream repo: +``` +git remote add upstream https://github.com/wekan/wekan.git +``` +Change to master repo, to work there: +``` +git checkout master +``` +Get latest changes from master: +``` +git fetch upstream +git merge upstream/master +``` + +## 4) Install deps and build Wekan + +``` +cd ~/repos +./rebuild-wekan.sh +``` +First with option 1, to install deps. + +Then same `./rebuild-wekan.sh` again with option 2, to build Wekan. + +## 5) Developing with Standalone Wekan + +``` +cd ~/repos/wekan +meteor --port 4000 +``` +Wekan is at http://localhost:4000 + +When you make changes to files, Meteor automatically notices that, and rebuilds Wekan. If Meteor does not notice change, you need to Ctrl-c and `./rebuild-wekan.sh` option 2. + +## 6) Using MongoDB + +Install MongoDB 3.2.x tools and shell from https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-ubuntu/ + +You need to add repo, key etc from above before this step: +``` +sudo apt-get -y install mongodb-org-shell mongodb-org-tools +``` +And connect to next port after meteor node above: +``` +mongo --port 4001 +``` +or alternatively: +``` +meteor mongo +``` +You can also connect with MongoDB GUI to localhost 4001: +https://www.nosqlbooster.com/downloads + +## 7) Test feature at Sandstorm + +When your feature works at Standalone Wekan, you can also test it at Sandstorm. + +First build wekan with option 2: +``` +cd ~/repos/wekan +./rebuild-wekan.sh +``` +Then build Sandstorm Wekan dev version +``` +meteor-spk dev +``` + +## 8) After building Wekan, last line of text should be: + +`App in now available from Sandstorm server. Ctrl-C to disconnect.` + +With Firefox/Chromium/Chrome/Edge/Chromium Edge browser, open http://local.sandstorm.io:6080/ + +Login with premade local dev account Alice. + +## 9) Go to Apps / Wekan. Wekan has grey "dev mode" background. Click Wekan. + +## 10) Click + (Dev) Create new board + +## 11) Check is everything working in Wekan. + +## 12) When it works: Commit, push, make pull request + +``` +git add --all +git commit -a -m "Add Feature: ADD-YOUR-FEATURE-DESCRIPTION-HERE" +git push +``` +Then at GitHub your fork of Wekan, click `Create Pull Request` + +Then wait for comments or merge by xet7. You can see when your change is at Wekan new release at website https://wekan.fi click `Stable ChangeLog`, newest changes at top. + +Thanks for your contributions! \ No newline at end of file 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 index 2888d77ad..ba7629162 100644 --- 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 @@ -127,7 +127,7 @@ With it connect to localhost:27017 Double click `cfs_gridfs.attachments.files` and right click filename and Download file. -Wekan logo +Wekan logo ## 13) Optional: Restore diff --git a/docs/Platforms/FOSS/Sandstorm/FAQ.md b/docs/Platforms/FOSS/Sandstorm/FAQ.md new file mode 100644 index 000000000..4786e9e00 --- /dev/null +++ b/docs/Platforms/FOSS/Sandstorm/FAQ.md @@ -0,0 +1,29 @@ +## What is Wekan + +[Wekan FAQ](https://github.com/wekan/wekan/wiki/FAQ) + +## Anyone can already do this, no need to be a maintainer + +- Answer Github issues +- Keep any Wekan wikis up-to-date + +## Wekan welcomes new co-maintainers + +[xet7](https://github.com/xet7) did have to [bring Wekan back to life](https://github.com/wekan/wekan/wiki/FAQ#what-was-wekan-fork--wefork) already once before. Generally in Open Source it's good to have more that one maintainer to keep project alive. + +## Requirements for maintainers + +When you [contributions on Wekan Team page](https://github.com/wekan/wekan/wiki/Team) starts growing, one of Wekan maintainers may ask if you'd like to become co-maintainer. + +## Responsibilities of maintainer + +- Check that pull requests work. Merge pull requests. +- Make new releases for Wekan. +- Ask other maintainers for more documentation how to maintain something. +- Keep documentation on wikis up-to-date. + +## Maintainers do need to also remember + +- Do not try to rewrite whole project. That takes too much time and resources. We prefer small incremental improvements. +- Do maintaining on your free time. There is no need to be always available. You are free to have pauses from maintaining for any length of time. Telling to other maintainers about long pauses is recommended but anyway optional. +- Also take care of yourself and your personal life. Remember to take enough rest. diff --git a/docs/Platforms/FOSS/Sandstorm/Sandstorm.md b/docs/Platforms/FOSS/Sandstorm/Sandstorm.md index 16da6ef70..feefebbc1 100644 --- a/docs/Platforms/FOSS/Sandstorm/Sandstorm.md +++ b/docs/Platforms/FOSS/Sandstorm/Sandstorm.md @@ -2,6 +2,14 @@ # Sandstorm at Debian and Ubuntu +### Sandstorm Radicale: Calendars and Contacts + +- 2025-08-05 + - Exporting Calendar and Contacts from Google Calendar and Google Contacts to Sandstorm Radicale works. + - Importing Calendar .ics file back to Google Calendar does not work, because .ics file size is 2.1 MB. + Google Calendar has problems importing .ics files bigger than 1 MB, it would need manual splitting to multiple files. + Sandstorm Radicale can import .ics file 2.1 MB successfully. + ### Sandstorm CloudFlare DNS settings Sandstorm works when configured to full domain, with CloudFlare SSL/TLS, with Caddy. @@ -160,4 +168,4 @@ It is not possible to import attachments directly from Trello when using Sandsto 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 +[sandstorm_appdemo]: https://demo.sandstorm.io/appdemo/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h diff --git a/docs/Platforms/FOSS/Sandstorm/TODO.md b/docs/Platforms/FOSS/Sandstorm/TODO.md new file mode 100644 index 000000000..3b2ad5525 --- /dev/null +++ b/docs/Platforms/FOSS/Sandstorm/TODO.md @@ -0,0 +1,10 @@ +- Add more [Developer Documentation](https://github.com/wekan/wekan/wiki/Developer-Documentation), like directory structure etc +- Make it easier to develop on Windows +- Make it possible to build virtual appliance from source +- Update [wekan-dev](https://github.com/wekan/wekan-dev) for developing with Docker +- Make automated builds for VirtualBox and Windows +- Fix [wekan-autoinstall](https://github.com/wekan/wekan-autoinstall) +- Integrate [Install source without sudo](https://github.com/wekan/wekan/wiki/Install-source-without-sudo-on-Linux) to other install instructions and install scripts +- Try to combine duplicate Docker etc install instructions on [Wekan wiki](https://github.com/wekan/wekan/wiki) to make it easier to keep up-to-date +- Add more platforms +- Add [Tests](https://github.com/wekan/wekan/issues/467) to Wekan. [Cloudron](https://github.com/wekan/wekan/issues/1065) has some selenium tests, check are they on [Cloudron repos](https://github.com/wekan/wekan/wiki/Platforms#cloudron) and could those tests be integrated to Wekan. 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 index 5e46e97b7..f86699b75 100644 --- 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 @@ -2,7 +2,7 @@ Code originally by ertanalytics (Eric Thompson / AZero). Script has been used fo *** -![Wekan Sandstorm cards to CSV using Python screenshot](https://wekan.github.io/sandstorm-api-csv.png) +![Wekan Sandstorm cards to CSV using Python screenshot](https://wekan.fi/sandstorm-api-csv.png) *** diff --git a/docs/Platforms/FOSS/Sandstorm/sandstorm-api-csv.png b/docs/Platforms/FOSS/Sandstorm/sandstorm-api-csv.png new file mode 100644 index 000000000..69813f5af Binary files /dev/null and b/docs/Platforms/FOSS/Sandstorm/sandstorm-api-csv.png differ diff --git a/docs/Platforms/FOSS/Sandstorm/sandstorm-app-market.png b/docs/Platforms/FOSS/Sandstorm/sandstorm-app-market.png new file mode 100644 index 000000000..a7a6fe81d Binary files /dev/null and b/docs/Platforms/FOSS/Sandstorm/sandstorm-app-market.png differ diff --git a/docs/Platforms/FOSS/Sandstorm/sandstorm-login.png b/docs/Platforms/FOSS/Sandstorm/sandstorm-login.png new file mode 100644 index 000000000..572379b5a Binary files /dev/null and b/docs/Platforms/FOSS/Sandstorm/sandstorm-login.png differ diff --git a/docs/Platforms/FOSS/Sandstorm/wekan-sandstorm.png b/docs/Platforms/FOSS/Sandstorm/wekan-sandstorm.png new file mode 100644 index 000000000..5ea8602e4 Binary files /dev/null and b/docs/Platforms/FOSS/Sandstorm/wekan-sandstorm.png differ diff --git a/docs/Platforms/FOSS/Snap/CentOS-7.md b/docs/Platforms/FOSS/Snap/CentOS-7.md index b1368fe13..a2beb91bb 100644 --- a/docs/Platforms/FOSS/Snap/CentOS-7.md +++ b/docs/Platforms/FOSS/Snap/CentOS-7.md @@ -3,7 +3,7 @@ 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 +- Docker or Bash/SystemD install from https://wekan.fi *** diff --git a/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md b/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md index 6814d3471..38de36794 100644 --- a/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md +++ b/docs/Platforms/FOSS/Snap/Many-Snaps-on-LXC.md @@ -408,11 +408,47 @@ http://boards.example.com https://boards.example.com { } ``` ## 2) New LXC container -So when I start new lxc container: + +Ubuntu Touch: + +1. From OpenStore, install Snapz0r + +2. Look what is newest channel for lxd arm64 https://snapcraft.io/lxd and install , for example: + ``` -lxc launch images:ubuntu/20.04 lxccontainername +sudo su + +snap install lxd --channel=5.21/stable ``` + +3. From Ubuntu Touch Terminal, lxd init, etc. + +4. Configure Profiles: Adjust the default LXC profile to allow for + features like nested containers and privileged access if needed. + This can be done with commands like: + +``` +sudo lxc profile set default security.nesting true +``` + +5. Start new lxc container + +``` +# launch-ubu2504.sh +# lxc launch image-name container-name +lxc launch ubuntu:25.04 ubu2504 +``` + +6. Bash shell to inside of container: + +``` +# into-ubu2504.sh +# lxc exec container-name -- /bin/bash +lxc exec ubu2504 -- /bin/bash +``` + ## 3) Snapd and Wekan + Then I go inside container and install snapd: ``` lxc exec lxccontainername -- /bin/bash diff --git a/docs/Platforms/FOSS/Snap/wekan-snap-upgrade-not-working.sh b/docs/Platforms/FOSS/Snap/wekan-snap-upgrade-not-working.sh new file mode 100755 index 000000000..02215bb7f --- /dev/null +++ b/docs/Platforms/FOSS/Snap/wekan-snap-upgrade-not-working.sh @@ -0,0 +1,246 @@ +#!/bin/bash + +# ==== SETTINGS START ====== + +MONGODB_PORT=27019 + +# MongoDB database name. +DATABASE=wekan + +# Usually original snap name is wekan. Check with "sudo snap list". +# Migrating changes snap wekan from stable to candidate, and migrates attachments and avatars. +SNAPNAME=wekan + +# Backup directory requires a lot of disk space. It will have copy of /var/snap/wekan/common and mongodump. +BACKUPDIR=/var/wekanbackup + +# ==== SETTINGS END ====== + + +if [ "$(id -u)" -ne 0 ]; then + echo 'This script must be run by root' >&2 + exit 1 +fi + +#cpuavx=$(cat /proc/cpuinfo | grep avx) +#if [ -z "${cpuavx}" ]; then +# echo "Your CPU does not support AVX. WeKan will add support for AVX soon, by running MongoDB 6 at Qemu." +# exit 1 +#fi + +function pause(){ + read -p "$*" +} + +echo "Backups will be stored to $BACKUPDIR . Change it at top of this script, to where is enough disk space." +echo "Backup directory requires a lot of disk space. It will have copy of /var/snap/wekan/common and mongodump." + +PS3='Please enter your choice: ' +options=("Upgrade WeKan Snap from 6.09 to newest" "Downgrade WeKan Snap from newest to 6.09" "Quit") + +select opt in "${options[@]}" +do + case $opt in + "Upgrade WeKan Snap from 6.09 to newest") + + echo "STEP 1: BACKUP" + + # Original path + export ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH + export ORIGINAL_PATH=$PATH + + # Path to old MongoDB + export LD_LIBRARY_PATH=/snap/$SNAPNAME/current/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH + export PATH=/snap/$SNAPNAME/current/bin:/snap/$SNAPNAME/current/usr/bin:$PATH + + # Stop Wekan + snap stop $SNAPNAME.wekan + snap start $SNAPNAME.mongodb + + sleep 2 + + # Create backup directory + mkdir -p $BACKUPDIR + + # Run MongoDB backup + rm -rf $BACKUPDIR/common $BACKUPDIR/dump + /snap/$SNAPNAME/current/bin/mongodump --port $MONGODB_PORT --out=$BACKUPDIR + snap stop $SNAPNAME.mongodb + sleep 2 + cp -pR /var/snap/$SNAPNAME/common $BACKUPDIR/ + snap get $SNAPNAME > $BACKUPDIR/snap.sh + + echo "STEP 2: UPGRADE WeKan" + + # Stop WeKan + snap stop $SNAPNAME + + # Remove old files (after backup) + rm -rf /var/snap/$SNAPNAME/common/* + + # Upgrade to latest version + snap refresh $SNAPNAME --channel=latest/candidate --amend + + mkdir -p /var/snap/$SNAPNAME/common/files/attachments + + mkdir -p /var/snap/$SNAPNAME/common/files/avatars + + # Stop all services for clean start + + echo "STEP 3: RESTORE DATA" + + # Start MongoDB + snap stop $SNAPNAME.wekan + snap start $SNAPNAME.mongodb + + sleep 2 + + # Restore database + /snap/$SNAPNAME/current/bin/mongorestore --port $MONGODB_PORT --drop $BACKUPDIR/ + + echo "STEP 4: MIGRATE ATTACHMENTS" + + /snap/$SNAPNAME/current/usr/bin/mongosh --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --eval "db.attachments.files.drop()" + + /snap/$SNAPNAME/current/usr/bin/mongosh --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --eval "db.attachments.chunks.drop()" + + /snap/$SNAPNAME/current/usr/bin/mongosh --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --eval "db.avatars.files.drop()" + + /snap/$SNAPNAME/current/usr/bin/mongosh --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --eval "db.avatars.chunks.drop()" + + /snap/$SNAPNAME/current/usr/bin/mongosh --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --eval "db.cfs_gridfs.attachments.chunks.renameCollection('attachments.chunks')" + + /snap/$SNAPNAME/current/usr/bin/mongosh --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --eval "db.cfs_gridfs.attachments.files.renameCollection('attachments.files')" + + /snap/$SNAPNAME/current/usr/bin/mongosh --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --eval "db.cfs_gridfs.avatars.chunks.renameCollection('avatars.chunks')" + + /snap/$SNAPNAME/current/usr/bin/mongosh --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --eval "db.cfs_gridfs.avatars.files.renameCollection('avatars.files')" + + /snap/$SNAPNAME/current/bin/mongoexport --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --collection cfs.attachments.filerecord > $BACKUPDIR/old_files.json + + while IFS= read -r line; do + # Extract key from copies.attachments + key=$(echo "$line" | grep -o '"key"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + + if [ ! -z "$key" ]; then + echo "Processing file with key: $key" + + # Extract all metadata + name=$(echo "$line" | grep -o '"original"[[:space:]]*:[[:space:]]*{[^}]*}' | grep -o '"name"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + type=$(echo "$line" | grep -o '"original"[[:space:]]*:[[:space:]]*{[^}]*}' | grep -o '"type"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + size=$(echo "$line" | grep -o '"size"[[:space:]]*:[[:space:]]*[0-9]*' | cut -d':' -f2 | tr -d ' ' | head -1) + boardId=$(echo "$line" | grep -o '"boardId"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + cardId=$(echo "$line" | grep -o '"cardId"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + userId=$(echo "$line" | grep -o '"userId"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + swimlaneId=$(echo "$line" | grep -o '"swimlaneId"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + listId=$(echo "$line" | grep -o '"listId"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4) + + # Determine file extension + ext=$(echo "$name" | awk -F. '{print $NF}' | tr '[:upper:]' '[:lower:]') + + # Determine file type + isPDF=$(echo "$type" | grep -q "pdf" && echo "true" || echo "false") + isImage=$(echo "$type" | grep -E -- "image|png|jpg|jpeg|gif|bmp|tiff|svg|webp|pcx" && echo "true" || echo "false") + isVideo=$(echo "$type" | grep -E -- "video|mp4|m4p|m4v|m4mov|qt|wmv|avi|mpeg|mpg|mp2|mpe|flv|webm|mkv|flv|ogg|mts|m2ts|ts|gifv" && echo "true" || echo "false") + + echo "Creating new format for: $name" + + # Create new record in new format + echo "{ + \"_id\": \"$key\", + \"size\": $size, + \"type\": \"$type\", + \"name\": \"$name\", + \"meta\": { + \"boardId\": \"$boardId\", + \"swimlaneId\": \"$swimlaneId\", + \"listId\": \"$listId\", + \"cardId\": \"$cardId\" + }, + \"ext\": \"$ext\", + \"extension\": \"$ext\", + \"extensionWithDot\": \".$ext\", + \"mime\": \"$type\", + \"mime-type\": \"$type\", + \"userId\": \"$userId\", + \"path\": \"/var/snap/$SNAPNAME/common/files/attachments/$key.$ext\", + \"versions\": { + \"original\": { + \"path\": \"/var/snap/$SNAPNAME/common/files/attachments/$key-original-$name\", + \"size\": $size, + \"type\": \"$type\", + \"extension\": \"$ext\", + \"storage\": \"gridfs\", + \"meta\": { + \"gridFsFileId\": \"$key\" + } + } + }, + \"_downloadRoute\": \"/cdn/storage\", + \"_collectionName\": \"attachments\", + \"isVideo\": false, + \"isAudio\": false, + \"isImage\": $isImage, + \"isText\": false, + \"isJSON\": false, + \"isPDF\": $isPDF, + \"_storagePath\": \"/var/snap/$SNAPNAME/common/files/attachments\", + \"public\": false + }" > "$BACKUPDIR/new_$key.json" + + + echo "Importing to new format..." + + /snap/$SNAPNAME/current/bin/mongoimport --port $MONGODB_PORT --host 127.0.0.1 \ + --db wekan --collection attachments \ + --file="$BACKUPDIR/new_$key.json" + + + echo "Completed migration for: $name" + echo "--------------------------" + fi + done < $BACKUPDIR/old_files.json + + snap start $SNAPNAME + + echo "Upgrading completed." + + break + ;; + + "Downgrade WeKan Snap from newest to 6.09") + echo "Downgrading WeKan Snap from newest to 6.09." + + snap stop $SNAPNAME + + rm -rf /var/snap/$SNAPNAME/common/* + + snap refresh $SNAPNAME --channel=latest/stable --amend + + snap stop $SNAPNAME + + cp -pR $BACKUPDIR/common/* /var/snap/$SNAPNAME/common/ + + sudo snap start $SNAPNAME + + echo "Downgrading completed." + + break + ;; + + "Quit") + break + ;; + *) echo invalid option;; + esac +done + diff --git a/docs/Platforms/FOSS/UCS/UCS-4.4-with-wekan-10.200.2.25.webm b/docs/Platforms/FOSS/UCS/UCS-4.4-with-wekan-10.200.2.25.webm new file mode 100644 index 000000000..6c1bb55d5 Binary files /dev/null and b/docs/Platforms/FOSS/UCS/UCS-4.4-with-wekan-10.200.2.25.webm differ diff --git a/docs/Platforms/FOSS/UCS.md b/docs/Platforms/FOSS/UCS/UCS.md similarity index 93% rename from docs/Platforms/FOSS/UCS.md rename to docs/Platforms/FOSS/UCS/UCS.md index 81966f841..e7eba4f4d 100644 --- a/docs/Platforms/FOSS/UCS.md +++ b/docs/Platforms/FOSS/UCS/UCS.md @@ -1,9 +1,9 @@ -Univention logo +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) +- [Video of installing Univention WeKan ® Appliance](https://wekan.fi/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) @@ -46,4 +46,4 @@ https://github.com/wekan/wekan/wiki/Troubleshooting-Mail # Repairing MongoDB -https://github.com/wekan/wekan/wiki/Repair-MongoDB \ No newline at end of file +https://github.com/wekan/wekan/wiki/Repair-MongoDB diff --git a/docs/Platforms/FOSS/UCS/univention.svg b/docs/Platforms/FOSS/UCS/univention.svg new file mode 100644 index 000000000..23e00ba9f --- /dev/null +++ b/docs/Platforms/FOSS/UCS/univention.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/Platforms/FOSS/ppc.md b/docs/Platforms/FOSS/ppc.md index 12f28b7c2..df90168ad 100644 --- a/docs/Platforms/FOSS/ppc.md +++ b/docs/Platforms/FOSS/ppc.md @@ -3,7 +3,7 @@ - [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 +[xet7](https://github.com/xet7), as maintainer of [Wekan](https://wekan.fi), 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 diff --git a/docs/Platforms/FOSS/s390x.md b/docs/Platforms/FOSS/s390x.md index 4041afbab..7a83e69b0 100644 --- a/docs/Platforms/FOSS/s390x.md +++ b/docs/Platforms/FOSS/s390x.md @@ -76,7 +76,7 @@ Ported by others, not xet7: - 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. +[xet7](https://github.com/xet7), as maintainer of [WeKan](https://wekan.fi), 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. diff --git a/docs/Platforms/FOSS/virtual-appliance.md b/docs/Platforms/FOSS/virtual-appliance.md index 0c6c800a8..d290954d1 100644 --- a/docs/Platforms/FOSS/virtual-appliance.md +++ b/docs/Platforms/FOSS/virtual-appliance.md @@ -100,15 +100,15 @@ These settings are for example with VirtualBox: * 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) +![BridgedAdapter.png](https://wekan.fi/BridgedAdapter.png) If you select NAT to keep virtual machine using same address as your server: -![NAT.png](https://wekan.github.io/NAT.png) +![NAT.png](https://wekan.fi/NAT.png) Then you can also setup port forwarding to Wekan VM port 8080: -![PortForwarding.png](https://wekan.github.io/PortForwarding.png) +![PortForwarding.png](https://wekan.fi/PortForwarding.png) 2) Start VM diff --git a/docs/Platforms/Propietary/Cloud/AWS.md b/docs/Platforms/Propietary/Cloud/AWS.md index 970c3fd14..bc566e2b4 100644 --- a/docs/Platforms/Propietary/Cloud/AWS.md +++ b/docs/Platforms/Propietary/Cloud/AWS.md @@ -35,7 +35,7 @@ of less than 10% with only occasional spikes to high usage 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). +For Enterprises using Wekan xet7 recommends participating in Wekan development, see [Benefits of contributing your features to Upstream Wekan](https://wekan.fi/blog/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.fi , as Wekan Team [already has access to high performance bare metal servers at CNCF / Packet for running high load testing](https://wekan.fi/blog/2018/01/wekan-progress-on-x64-and-arm/index.html). With the benefits you get by using Wekan, it’s [time well spent](https://wekan.fi/blog/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 diff --git a/docs/Platforms/Propietary/Cloud/Cloudron.md b/docs/Platforms/Propietary/Cloud/Cloudron/Cloudron.md similarity index 83% rename from docs/Platforms/Propietary/Cloud/Cloudron.md rename to docs/Platforms/Propietary/Cloud/Cloudron/Cloudron.md index dcd99b619..f594e2781 100644 --- a/docs/Platforms/Propietary/Cloud/Cloudron.md +++ b/docs/Platforms/Propietary/Cloud/Cloudron/Cloudron.md @@ -8,7 +8,7 @@ Cloudron is a complete solution for running apps on your server and keeping them 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) +[![Install](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/). @@ -16,4 +16,4 @@ You can also test the wekan installation on the demo Cloudron instance - https:/ # Backup -[Backup Cloudron](Backup#Cloudron) \ No newline at end of file +[Backup Cloudron](Backup#Cloudron) diff --git a/docs/Platforms/Propietary/Cloud/Cloudron/cloudron.svg b/docs/Platforms/Propietary/Cloud/Cloudron/cloudron.svg new file mode 100644 index 000000000..65abfd6d8 --- /dev/null +++ b/docs/Platforms/Propietary/Cloud/Cloudron/cloudron.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/Gitpod.md b/docs/Platforms/Propietary/Cloud/Gitpod.md new file mode 100644 index 000000000..1e4a30244 --- /dev/null +++ b/docs/Platforms/Propietary/Cloud/Gitpod.md @@ -0,0 +1 @@ +- [Gitpod Ready-to-Code](https://gitpod.io/#https://github.com/wekan/wekan) diff --git a/docs/Platforms/Propietary/Cloud/Metal.md b/docs/Platforms/Propietary/Cloud/Metal.md index 0695a0fdd..b926db45c 100644 --- a/docs/Platforms/Propietary/Cloud/Metal.md +++ b/docs/Platforms/Propietary/Cloud/Metal.md @@ -1,4 +1,4 @@ -https://blog.wekan.team/2019/06/wekan-on-raspi3-and-arm64-server-now-works-and-whats-next-with-cncf/ +https://wekan.fi/blog/2019/06/wekan-on-raspi3-and-arm64-server-now-works-and-whats-next-with-cncf/ https://github.com/cncf/cluster/issues/45 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/PikaPods/PikaPods.md b/docs/Platforms/Propietary/Cloud/PikaPods/PikaPods.md new file mode 100644 index 000000000..a010d5de6 --- /dev/null +++ b/docs/Platforms/Propietary/Cloud/PikaPods/PikaPods.md @@ -0,0 +1,3 @@ +Instantly run WeKan on [PikaPods.com](https://www.pikapods.com): + +[![Run on PikaPods](https://wekan.fi/hosting/pikapods.svg)](https://www.pikapods.com/pods?run=wekan) \ No newline at end of file diff --git a/docs/Platforms/Propietary/Cloud/PikaPods/pikapods.svg b/docs/Platforms/Propietary/Cloud/PikaPods/pikapods.svg new file mode 100644 index 000000000..ecc9f58b7 --- /dev/null +++ b/docs/Platforms/Propietary/Cloud/PikaPods/pikapods.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/Platforms/Propietary/Mac.md b/docs/Platforms/Propietary/Mac.md index 25488deee..926502941 100644 --- a/docs/Platforms/Propietary/Mac.md +++ b/docs/Platforms/Propietary/Mac.md @@ -1,6 +1,6 @@ -Wekan logo +Wekan logo -Powered by MacStadium +Powered by MacStadium ## ChangeLog - Previously: @@ -77,8 +77,8 @@ WRITABLE_PATH=.. ROOT_URL=http://192.168.0.100:4000 PORT=4000 WITH_API=true RICH 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/) +5. Install Node.js version mentioned at https://wekan.fi Download section +6. Install MongoDB version mentioned at https://wekan.fi 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=.. diff --git a/docs/Platforms/Propietary/Windows/Offline.md b/docs/Platforms/Propietary/Windows/Offline.md index 832ae85fb..ddd05e86c 100644 --- a/docs/Platforms/Propietary/Windows/Offline.md +++ b/docs/Platforms/Propietary/Windows/Offline.md @@ -10,19 +10,19 @@ This is without container (without Docker or Snap). Right click and download files 1-4: -1. [wekan-7.86-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.86/wekan-7.86-amd64-windows.zip) +1. [wekan-7.95-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v7.95/wekan-7.95-amd64-windows.zip) 2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe) -3. [mongodb-windows-x86_64-6.0.22-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.22-signed.msi) +3. [mongodb-windows-x86_64-7.0.23-signed.msi](https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-7.0.23-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.22-signed.msi` . In installer, uncheck downloading MongoDB compass. +6. Double click `mongodb-windows-x86_64-7.0.23-signed.msi` . In installer, uncheck downloading MongoDB compass. -7. Unzip `wekan-7.86-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files: +7. Unzip `wekan-7.95-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files: ``` bundle (directory) @@ -57,6 +57,292 @@ RELATED INFO: - Windows 2022 server example https://github.com/wekan/wekan/issues/5084 - Other settings example https://github.com/wekan/wekan/issues/4932 +## SSL/TLS at internal network, that is not connected to Internet, and can not be used from Internet + +Configuring Caddy for SSL/TLS on a local LAN without an internet connection requires you to **manually create and manage certificates**, as Caddy's automatic certificate provisioning relies on external services like Let's Encrypt, which need internet access. Here's a breakdown of the process: + +#### Generate Certificates 🔑 + +First, you'll need to generate a self-signed certificate authority (CA) and then use it to sign a certificate for your local domain. You can use tools like **OpenSSL** or **Caddy's own `cert` command**. + +1. **Create a Root CA:** + `openssl genrsa -out rootCA.key 2048` + `openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 365 -out rootCA.pem` + +2. **Create a Server Certificate:** + + * Create a configuration file (`server.csr.cnf`) for your server certificate. + * `openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr -config server.csr.cnf` + * `openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 365 -sha256 -extfile server.csr.cnf -extensions req_ext` + +This process creates `server.crt` and `server.key`—the files Caddy will use. + +#### Configure Caddyfile 📜 + +Next, you need to tell Caddy to use these specific certificates instead of trying to get them automatically. +Modify your `Caddyfile` to use the `tls` directive with the paths to your generated files. + +Caddyfile: +``` +wekan.example.com { + tls { + load C:\wekan\certs\example.com.pem + alpn http/1.1 + } + proxy / localhost:2000 { + websocket + transparent + } +} +``` + + * **`your_local_domain.lan`** is the hostname you'll use to access the site from other computers on your network. + * **`tls C:\path\to\server.crt C:\path\to\server.key`** is the key part. It explicitly tells Caddy to use these certificate and key files. + +#### Trust the Certificate 🔒 + +Finally, for browsers and other clients on your network to trust the connection and not show a security warning, you must **install the root CA certificate (`rootCA.pem`) on each client machine**. + +1. On each client, navigate to the certificate management store (e.g., in Windows, search for "Manage computer certificates"). +2. Import the `rootCA.pem` file into the "Trusted Root Certification Authorities" store. + +This tells the client that any certificate signed by this CA (like your `server.crt`) is trustworthy. Without this step, every client will display a **security warning** because the certificate isn't from a publicly trusted authority. + +#### Add wekan.example.com to every computer hosts file + +As Administrator, edit with Notepad, changing dropdown *.txt to All Files, C:\Windows\System32\drivers\etc\hosts textfile. + +To hosts file, add WeKan server local IP address: + +``` +192.168.0.200 wekan.example.com +``` + +Alternatively, use some nameserver at Windows server to have domain names at local network. + +#### Other remaining settings for local network SSL/TLS, not connected to Internet + +Look at similar settings below. + +## SSL/TLS with Caddy webserver, accessible at Internet + +- [Other unrelated Caddy info](../../../Webserver/Caddy.md) + +This will start Caddy, like this: + +``` +example.com CloudFlare SSL/TLS Origin Certificate HTTP 443 +=> Public IPv4 Cable modem HTTPS port 443 +=> Local IPv4 HTTPS port 443 Caddy +=> Local IPv4 HTTP port 2000 Node.js main.js WeKan +=> MongoDB port 27017 +``` + +From CloudFlare to Caddy, all is SSL/TLS encrypted. +Caddy proxies all encrypted traffic to Node.js unencrypted HTTP port 2000. + +At WeKan server laptop/desktop, locally between these executeable files, +HTTP traffic is not encrypted: + +- Between Caddy and WeKan +- Between WeKan and MongoDB + +But outside of that server, all is SSL/TLS encrypted. + +#### 1) At your Internet router, forward ports HTTP 80 and HTTPS 443 to your server laptop/desktop IP address. Example: + +Arris cable modem: + +1. Login +2. Firewall / Virtual Server Port Forwarding +3. Add HTTP 80 and HTTPS 443: + +HTTP 80: +``` +Description: HTTP +Inbound Port: 80 to 80 +Format: TCP +Private IP Address: YOUR-WEKAN-SERVER-LOCAL-IPv4-ADDRESS (example: 192.168.0.200) +Local Port: 80 to 80 +``` + +HTTPS 443: +``` +Description: HTTP +Inbound Port: 443 to 443 +Format: TCP +Private IP Address: YOUR-WEKAN-SERVER-LOCAL-IPv4-ADDRESS (example: 192.168.0.200) +Local Port: 443 to 443 +``` + + +#### 2) Check your WeKan server Windows computer local IPv4 address + +You can check your IP address on Windows 11 using either the **Settings app** or the **Command Prompt**. +These methods will show you your **local IP address**, which is the address your device uses to +communicate within your home or office network. + +Your **public IP address**, which is what devices outside your network see, is assigned by your +internet service provider (ISP) and can be found using an online tool or a simple web search. + +#### Method 1: Using the Settings App ⚙️ + +1. Open the **Start menu** and click on **Settings** (or press the **Windows key + I**). +2. In the left-hand menu, click on **Network & internet**. +3. Click on the connection you're currently using, either **Wi-Fi** or **Ethernet**. +4. On the next screen, your IP address (both IPv4 and IPv6) will be listed under the **Properties** section. + +#### Method 2: Using the Command Prompt 💻 + +1. Click the **Start menu** or the **search icon** on your taskbar, type "**cmd**," and press **Enter**. +2. In the Command Prompt window, type `ipconfig` and press **Enter**. +3. Look for your active connection (e.g., "Ethernet adapter" or "Wireless LAN adapter Wi-Fi"). + Your IP address will be listed next to "**IPv4 Address**." + +### 3) Finding Your Public IP Address 🌍 + +a) At Arris Cable Modem, public IP address is at Login / WAN Setup / DHCP / IP Address + +b) To find your public IP address, simply open a web browser and search for "**what is my IP**." + A search engine like Google will display your public IP address right at the top of the search results. + +### 4) If you don't have domain name like example.com + +1. Register and login to https://cloudflare.com + +2. Buy a domain, like example.com + +### 5) Add settings at CloudFlare + +1. CloudFlare / Account Home / AI Audit: Block all AI crawlers, so that they do not slow down your websites and WeKan. + But if you need Google Search to see your website like example.com, allow Googlebot. + +2. CloudFlare / Account Home / example.com / DNS / Records / Add Record + +``` +Type: A +Name: wekan (for wekan.example.com, or kanban for kanban.example.com) +IPv4 Address: YOUR-PUBLIC-IPv4-ADDRESS (example: 80.123.123.123) +- Proxy Status: Orange cloud selected (not grey cloud) +- TTL: Auto +``` +3. Click Save + +4. CloudFlare / Account Home / example.com / SSL/TLS / Overview / SSL/TLS Encryption / Configure / Full (strict) + +5. CloudFlare / Account Home / example.com / Origin Server / Create Cerfificate for example.com + +6. At Notepad, copy paste SSL/TLS certs in this order from top to bottom to one textfile `example.com.pem`: + +``` +1. Private Cert +2. Public Cert +3. Certificate Chain +``` + +7. Have for example this directory structure (can also be D: or E: etc) + +``` +C:. +├───wekan directory +│ ├───files directory +│ ├───certs directory +│ │ └───example.com.pem +│ ├───bundle directory +│ │ └───main.js +│ ├───caddy.exe from .zip file +│ ├───Caddyfile textfile for Caddy 2 config +│ └───start-wekan.bat textfile +│ +└───Program Files +``` + +8. Edit `start-wekan.bat` with Notepad, search and change these settings, change subdomain wekan.example.com + and node saving cmd.exe text outout to log.txt for logging: + +``` +SET WRITABLE_PATH=..\FILES + +SET ROOT_URL=https://wekan.example.com + +SET PORT=2000 + +node main.js > log.txt 2>&1 +``` +If you have problems with attachments, instead try: +``` +SET WRITABLE_PATH=..\FILES\ +``` + +9. Download newest Caddy webserver caddy_VERSION-NUMBER_windows_amd64.zip from +https://github.com/caddyserver/caddy/releases , +extract .zip file, and copy caddy.exe to above directory structure. + +- Caddy website https://caddyserver.com +- Caddy features https://caddyserver.com/features +- Caddy code https://github.com/caddyserver/caddy +- Caddy forum https://caddy.community/ + +10. To Caddyfile, with Notepad add this: + +``` +wekan.example.com { + tls { + load C:\wekan\certs\example.com.pem + alpn http/1.1 + } + proxy / localhost:2000 { + websocket + transparent + } +} +``` +11. Open `cmd.exe` terminal, write there: + +``` +C: + +cd \wekan + +wekan.bat +``` + +12. Open another `cmd.exe` terminal, write there this. It will format Caddyfile to have + correct text format, and validate is Caddyfile configuration settings correct. + +``` +C: + +cd \wekan + +caddy fmt --overwrite Caddyfile + +caddy validate +``` +If there is errors, ask Google Search about that error, edit Caddyfile with Notepad to fix it. + +If there is not any errors, start Caddy: +``` +caddy +``` +This will start Caddy, like this: + +example.com CloudFlare SSL/TLS Origin Certificate HTTP 443 +=> Public IPv4 Cable modem HTTPS port 443 +=> Local IPv4 HTTPS port 443 Caddy +=> Local IPv4 HTTP port 2000 Node.js main.js WeKan +=> MongoDB port 27017 + +From CloudFlare to Caddy, all is SSL/TLS encrypted. +Caddy proxies all encrypted traffic to Node.js unencrypted HTTP port 2000. + +At WeKan server laptop/desktop, locally between these executeable files, +HTTP traffic is not encrypted: +- Between Caddy and WeKan +- Between WeKan and MongoDB + +But outside of that server, all is SSL/TLS encrypted. + ## Docker WeKan Offline @@ -98,9 +384,9 @@ Backup will be is in directory `dump`. More info at https://github.com/wekan/wek 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.3. Check required compatible version of Node.js from https://wekan.fi `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.4. Check required compatible version of MongoDB from https://wekan.fi `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). @@ -179,3 +465,34 @@ sudo snap set wekan port='80' 12. Then at local network Wekan is at: http://192.168.0.100 + +#### Windows notes (tested on Windows 11) + +- **Attachments error fix**: if you get + `TypeError: The "path" argument must be of type string. Received undefined` + from `models/attachments.js`, create folders and set writable paths **before** start: + - Create: `C:\wekan-data` and `C:\wekan-data\attachments` + - PowerShell: + ``` + $env:WRITABLE_PATH="C:\wekan-data" + $env:ATTACHMENTS_STORE_PATH="C:\wekan-data\attachments" + ``` + - CMD: + ``` + set WRITABLE_PATH=C:\wekan-data + set ATTACHMENTS_STORE_PATH=C:\wekan-data\attachments + ``` + +- **LAN access in dev on Windows**: + - PowerShell: + ``` + $env:BIND_IP="0.0.0.0" + $env:ROOT_URL="http://:4000" + meteor run --port 4000 + ``` + - CMD: + ``` + set BIND_IP=0.0.0.0 + set ROOT_URL=http://:4000 + meteor run --port 4000 + ``` diff --git a/docs/Secure-Boot.md b/docs/Platforms/Propietary/Windows/Secure-Boot.md similarity index 100% rename from docs/Secure-Boot.md rename to docs/Platforms/Propietary/Windows/Secure-Boot.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..709b24fa5 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,277 @@ +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. + +Wekan + +# Install + +* https://wekan.fi/install/ + +# SaaS + +* https://wekan.fi/saas/ + +# Support + +* Free Public Open Source Support, bugs and feature requests: https://github.com/wekan/wekan/issues + * [Debugging](DeveloperDocs/Debugging.md) +* Paid Private Commercial Support, paid features/fixes/support/hosting: https://wekan.fi/commercial-support/ + +# General + +* Current Meteor 2 WeKan Features: [Deep Dive Into WeKan](DeveloperDocs/Deep-Dive-Into-WeKan.md) +* [WeKan Roadmap kanban board](https://boards.wekan.team/b/D2SzJKZDS4Z48yeQH/wekan-open-source-kanban-board-with-mit-license) - board at Wekan demo +* Future WeKan prototypes: [Multiverse WeKan Roadmap](FAQ/WeKan-Multiverse-Roadmap.md) +* [Change Language](Translations/Change-Language.md) +* [Forgot Password](Login/Forgot-Password.md) +* [WeKan Design Principles](Design/Design-Principles.md) +* [FAQ](FAQ/FAQ.md) +* [IRC FAQ](FAQ/IRC-FAQ.md) - answers to questions asked at IRC +* [Team](FAQ/Team.md) +* [Press](FAQ/Press.md) +* [Blog](https://wekan.fi/blog) +* [Wekan vs Trello vs Restyaboard](ImportExport/trello/Wekan-vs-Trello-vs-Restyaboard.md) +* [Results of Survey 2020-01](https://wekan.fi/blog/2020/06/results-of-wekan-survey-2020-01/) + +# Fake: Not WeKan kanban + +* [Hall of Shame: Fake companies that are NOT WeKan kanban](FAQ/Hall-of-Shame.md) +* [Others NOT related to WeKan kanban](FAQ/NOT-related-to-Wekan.md) + +# Security + +* [Allow private boards only: Disable Public Boards](Features/Allow-private-boards-only.md) +* [Security Disclosure and details of Security in Wekan](../SECURITY.md) +* [Password Hashing](Login/Password-Hashing.md) + +# Scaling + +* [Cron: Hourly restart WeKan, because of memory leaks](Webserver/Cron.md) +* [Maybe: Add more RAM to Node.js to prevent crash](https://github.com/wekan/wekan/issues/3585) +* [Clustering AWS etc](Platforms/Propietary/Cloud/AWS.md) +* [Scaling](Webserver/Scaling.md) +* Kubernetes + * Helm Chart https://artifacthub.io/packages/helm/wekan/wekan + * Issues https://github.com/wekan/charts/issues + * Pull Requests https://github.com/wekan/charts/pulls +* [Redis Oplog](https://github.com/cult-of-coders/redis-oplog) +* [Scaling at Meteor forums](https://forums.meteor.com/t/meteor-scaling-performance-best-practices/52886/16) + +# Migrating + +* [From Previous Export, paste big WeKan JSON](ImportExport/From-Previous-Export.md) +* [Progress: Import/Export/Sync](ImportExport/Sync.md) +* [From CSV/TSV](ImportExport/CSV/CSV.md) +* [From Trello](ImportExport/trello/Migrating-from-Trello.md) +* [From Jira](ImportExport/Jira.md) +* [From Asana](ImportExport/asana/Asana.md) +* [From Zenkit](ImportExport/ZenKit.md) +* [From old Wekan manually](ImportExport/Migrating-from-old-Wekan-manually.md) + +# Backup + +* [Backup and Restore](Backup/Backup.md) +* [Rclone: Store attachments to cloud storage like S3, MinIO, etc](Backup/Rclone.md) + +# Repair + +* [Repair MongoDB](Backup/Repair-MongoDB.md) +* [Using Meteor MongoDB to repair files](Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md) +* [If board does not open and keeps loading](Features/If-board-does-not-open-and-keeps-loading.md) +* [Repair Docker](Platforms/FOSS/Docker/Repair-Docker.md) + +# Themes + +* [Themes](Theme/Custom-CSS-themes.md) +* [Dark Mode](Theme/Dark-Mode.md) +* [Converting Meteor Stylus to CSS](Theme/Converting-Meteor-Stylus-to-CSS.md) + +# Markdown Syntax + +* [Wekan Markdown](Features/Wekan-Markdown.md) +* [Emoji](Features/Emoji.md) +* [Mermaid Diagram](Features/Mermaid-Diagram.md) DOES NOT WORK ANYMORE +* [Numbered text](Features/Numbered-text.md) + +# Login Auth + +* [Automatic login](Login/autologin.md) +* [Disable Password Login](Login/Disable-Password-Login.md) +* [Forgot Password](Login/Forgot-Password.md) +* [Admin: Impersonate user](Login/Impersonate-user.md) +* [Adding Users](Login/Adding-users.md) +* [Active users Presence](https://github.com/wekan/wekan/issues/3734) +* [Accounts Lockout: Brute force login protection](Login/Accounts-Lockout.md) +* [LDAP](Login/LDAP.md) +* [LDAP AD Simple Auth](Login/LDAP-AD-Simple-Auth.md) +* [Keycloak](Login/Keycloak/Keycloak.md) +* [Google login](Login/Google-login.md) +* [Azure](Login/Azure/Azure.md) +* [OAuth2](Login/OAuth2.md), Auth0, GitLab, RocketChat +* [Oracle OIM on premise using OAuth2](Login/Oracle-OIM.md) +* [ADFS 4.0 using OAuth2 and OpenID](Login/ADFS.md) +* [Azure AD B2C using OAuth2](Login/B2C.md) +* [Nextcloud](Login/Nextcloud.md) +* [CAS](Login/CAS.md) Please test +* [SAML](Login/SAML.md) Please test +* [Zitadel](Login/Zitadel.md) + +# Metrics, Logs, Stats + +* [Metrics](Features/Metrics) +* [Logs](Features/Logs.md) +* [Stats](Features/Features.md#stats) + +# Integrations + +* [IFTTT](ImportExport/IFTTT.md) +* [n8n Wekan docs](https://docs.n8n.io/nodes/n8n-nodes-base.wekan/#example-usage) - [n8n GitHub](https://github.com/n8n-io/n8n) +* [Integrations](ImportExport/Integrations.md) +* [Gogs](https://github.com/wekan/wekan-gogs) + +# Time + +* [Time Tracking](Date/Time-Tracking.md) +* [Gantt Chart](Features/Gantt.md) +* [Due Date](Date/Due-Date.md) +* [Day of week start](Date/Day-of-week-start.md) +* [Calendar](Calendar.md) + +# Features + +* [Multiline](Features/Multiline.md) +* [Linked Cards](Features/Linked-Cards.md) +* [Drag Drop](Features/DragDrop/Drag-Drop.md) on Mobile and Desktop +* [Python based features](Features/Python.md) +* [Burndown and Velocity Chart](Features/Burndown-and-Velocity-Chart.md) +* [Wait Spinners](Features/Wait-Spinners.md) +* [Translations](Translations/Translations.md) +* [Customize Translations](Customize-Translations.md) +* [Default Language for All Users](https://github.com/wekan/wekan/issues/3927) +* [Features](Features/Features.md) +* [Planning Poker](Features/Planning-Poker.md) +* [Scaling](Webserver/Scaling.md) +* [Custom Logo](Features/Custom-Logo.md) +* [Subtasks](Features/Subtasks.md) +* [Templates](Features/Templates.md) +* [Card Cover Image](Features/Cover.md) +* [Archive and Delete](Features/Archive-and-Delete.md) +* [Custom Fields](Features/Custom-Fields.md) +* [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) +* [Swimlanes](Features/Swimlanes.md) + +# Email + +* [Email](Email/Troubleshooting-Mail.md) + +# Required Settings + +* [Requirements](FAQ/Requirements.md) +* [Ports, hostsfile, how Internet works](https://gitub.com/wekan/wekan/issues/2896) +* [ROOT_URL Settings](Webserver/Settings.md) + +# Webservers + +* [Caddy](Webserver/Caddy.md) +* [Nginx](Webserver/Nginx.md) +* [Apache](Webserver/Apache.md) +* [OpenLiteSpeed](https://github.com/wekan/wekan/issues/3334#issuecomment-723651328) +* [Local self signed TLS](Webserver/Local-self-signed-TLS.md) +* [Let's Encrypt and Google Auth](Webserver/Lets-Encrypt-and-Google-Auth.md) +* [TLS with Node.js](https://github.com/wekan/wekan/issues/916) +* [Traefik and self-signed SSL certs](Webserver/Traefik-and-self-signed-SSL-certs.md) + +# REST API Docs + +* API docs https://wekan.fi/docs/ +* PHP Webhook receiver to WeKan API Python https://github.com/wekan/webhook/blob/main/public/index.php#L46 +* API clients + * Python + * https://github.com/wekan/wekan/blob/main/api.py + * https://github.com/wekan/wekan-python-api-client + * https://github.com/wekan/python-wekan + * Other Python features https://github.com/wekan/wekan/blob/main/docs/Features/Python.md + * Go https://github.com/wekan/wego +* Other API +* [REST API Code](API/Code.md) +* [Login](API/REST-API.md) +* [User](API/User.md) +* [Role](API/Role.md) +* [Boards](API/Boards.md) +* [Lists](API/Lists.md) +* [Cards](API/Cards.md) +* [Checklists](API/Checklists.md) +* [Swimlanes](API/Swimlanes.md) +* [Custom Fields](API/Custom-Fields.md) +* [Integrations](API/Integrations.md) + +# 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](API/New-card-with-Python3-and-REST-API.md) +* [Python client to REST API](https://github.com/wekan/wekan-python-api-client) +* [Go client to REST API](https://github.com/wekan/wego) +* [Wekan Sandstorm cards to CSV using Python](Platforms/FOSS/Sandstorm/Wekan-Sandstorm-cards-to-CSV-using-Python.md) +* [Excel and VBA](ImportExport/Excel-and-VBA.md) + +# Webhooks + +* Per-board events sending at board right sidebar / Board Settings / Webhooks + * Check that webhook immediately responds with HTTP 200 OK, otherwise WeKan slows down +* [Global Webhook](https://github.com/wekan/wekan/pull/2665) +* PHP Webhook receiver to WeKan API Python https://github.com/wekan/webhook/blob/main/public/index.php#L46 +* [Limiting Webhook data](https://github.com/wekan/wekan/issues/2830) +* [Receiving Webhooks](Webhooks/Receiving-Webhooks) +* [Java Webhooks](Webhooks/Java.md) +* [Outgoing Webhook to Discord/Slack/RocketChat/Riot](Webhooks/Outgoing-Webhook-to-Discord.md) +* [Outgoing Webhook to NodeRed](https://github.com/wekan/wekan/issues/2017) +* [Outgoing Webhook to PowerShell](https://github.com/wekan/wekan/issues/2518) +* [Outgoing Webhooks, CA and Let's Encrypt](Webhooks/WebHook-And-CA.md) +* [Outgoing Webhooks Data](Webhooks/Webhook-data.md) +* 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) + +# Development + +* [Kadira integration](https://github.com/wekan/wekan/issues/2152) +* [Debugging](DeveloperDocs/Debugging.md) +* [Developer Docs for Standalone Wekan](DeveloperDocs/Developer-Documentation.md) +* [Developer Docs for Sandstorm Wekan](https://github.com/wekan/wekan/tree/main/docs/Platforms/FOSS/Sandstorm) +* [Adding new Snap setting to code](DeveloperDocs/Adding-new-Snap-settings-to-code.md) +* [Directory Structure](DeveloperDocs/Directory-Structure.md) +* [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) + +[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# diff --git a/docs/Security-Disclosure.md b/docs/Security/Security-Disclosure.md similarity index 100% rename from docs/Security-Disclosure.md rename to docs/Security/Security-Disclosure.md diff --git a/docs/Security/brute-force-protection.md b/docs/Security/brute-force-protection.md new file mode 100644 index 000000000..7c0d78b7f --- /dev/null +++ b/docs/Security/brute-force-protection.md @@ -0,0 +1,57 @@ +# Brute Force Protection in WeKan + +WeKan includes a robust brute force login protection system that helps prevent unauthorized access attempts by temporarily locking accounts after multiple failed login attempts. + +## Features + +- **Configurable Settings**: Administrators can configure lockout settings directly in the Admin Panel +- **Different Rules for Known and Unknown Users**: Separate settings for registered users and unknown login attempts +- **Visual Indicators**: Red lock icons identify locked users in the interface +- **Unlock Capabilities**: Admins can unlock individual users or all locked users at once + +## Administration + +### Accessing Brute Force Protection Settings + +1. Navigate to **Admin Panel** > **People** > **Locked Users** +2. Here you can view and modify all brute force protection settings + +### Settings Available + +#### Known Users (Registered Users) +- **Failures Before Lockout**: Number of failed attempts before an account is locked (default: 3) +- **Lockout Period**: Duration in seconds that an account remains locked (default: 60) +- **Failure Window**: Time window in seconds during which failed attempts are counted (default: 15) + +#### Unknown Users (Non-existent Usernames) +- **Failures Before Lockout**: Number of failed attempts before the IP is blocked (default: 3) +- **Lockout Period**: Duration in seconds that an IP remains blocked (default: 60) +- **Failure Window**: Time window in seconds during which failed attempts are counted (default: 15) + +### Managing Locked Users + +The **Locked Users** tab in the Admin Panel shows all currently locked users with: +- Username +- Email address +- Number of failed attempts +- Remaining lock time + +#### Unlocking Users + +There are two ways to unlock users: + +1. **Individual Unlock**: Click the red lock icon next to a specific user to unlock them +2. **Unlock All**: Click the "Unlock All" button to unlock all currently locked users at once + +### User Filtering + +In the **People** section of the Admin Panel, you can filter users by lock status: + +1. Use the dropdown menu to select "Locked Users Only" +2. This will show only users who are currently locked out due to failed login attempts + +## Security Recommendations + +- Use the default settings as a starting point and adjust based on your security requirements +- Consider increasing the lockout period for high-security environments +- Regularly check the locked users list to identify potential attack patterns diff --git a/docs/Theme/Custom-CSS-themes.md b/docs/Theme/Custom-CSS-themes.md index 1b69eedc0..f56953ca8 100644 --- a/docs/Theme/Custom-CSS-themes.md +++ b/docs/Theme/Custom-CSS-themes.md @@ -37,7 +37,7 @@ 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 wekan](https://wekan.fi/wekan-dark-mode.png) ## Dark theme diff --git a/docs/Theme/Dark-Mode.md b/docs/Theme/Dark-Mode.md index 4208674c9..c546744c5 100644 --- a/docs/Theme/Dark-Mode.md +++ b/docs/Theme/Dark-Mode.md @@ -1,6 +1,6 @@ ## Wekan Dark Mode -![dark wekan](https://wekan.github.io/wekan-dark-mode.png) +![dark wekan](https://wekan.fi/wekan-dark-mode.png) ## Other Dark Modes diff --git a/docs/Theme/background/openclipart-org_detail_303889_sailboat-at-a-beach.svg b/docs/Theme/background/openclipart-org_detail_303889_sailboat-at-a-beach.svg new file mode 100644 index 000000000..adc02d5e4 --- /dev/null +++ b/docs/Theme/background/openclipart-org_detail_303889_sailboat-at-a-beach.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/Theme/board-colors.png b/docs/Theme/board-colors.png new file mode 100644 index 000000000..4fa753ecf Binary files /dev/null and b/docs/Theme/board-colors.png differ diff --git a/docs/Theme/card-colors.png b/docs/Theme/card-colors.png new file mode 100644 index 000000000..14062fd77 Binary files /dev/null and b/docs/Theme/card-colors.png differ diff --git a/docs/Theme/wekan-dark-mode.png b/docs/Theme/wekan-dark-mode.png new file mode 100644 index 000000000..b70cf1954 Binary files /dev/null and b/docs/Theme/wekan-dark-mode.png differ diff --git a/docs/Theme/wekan-themes.png b/docs/Theme/wekan-themes.png new file mode 100644 index 000000000..338db3c69 Binary files /dev/null and b/docs/Theme/wekan-themes.png differ diff --git a/docs/Translations/Customize-Translations.md b/docs/Translations/Customize-Translations.md index 85545bbd4..07e3abaac 100644 --- a/docs/Translations/Customize-Translations.md +++ b/docs/Translations/Customize-Translations.md @@ -23,4 +23,4 @@ where is added new custom fields, that are not default. - 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 +Translation Custom String \ No newline at end of file diff --git a/docs/Translations/Translations.md b/docs/Translations/Translations.md index cc8d00f9d..d8c5d639b 100644 --- a/docs/Translations/Translations.md +++ b/docs/Translations/Translations.md @@ -27,4 +27,58 @@ Then in your JADE files, use the string like so: 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 +again for the final release. + +## Example + +``` +diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade +index ee31d76be..e3b2ea7cd 100644 +--- a/client/components/cards/cardDetails.jade ++++ b/client/components/cards/cardDetails.jade +@@ -142,19 +142,19 @@ template(name="cardDetails") + .card-details-item.card-details-item-recurring + h3.card-details-item-title + i.fa.fa-repeat +- | Recurrence ++ | {{_ 'recurrence'}} + label + input.js-recurring-checkbox(type="checkbox" checked=card.isRecurring) +- | Repeat this card ++ | {{_ 'repeat-this-card'}} + if card.isRecurring + label +- | Repeat every ++ | {{_ 'repeat-every'}} + select.js-recurring-pattern +- option(value="daily" selected=card.recurrencePattern === 'daily') Daily +- option(value="weekly" selected=card.recurrencePattern === 'weekly') Weekly +- option(value="monthly" selected=card.recurrencePattern === 'monthly') Monthly ++ option(value="daily", selected="#{card.recurrencePattern === 'daily'}") {{_ 'daily'}} ++ option(value="weekly", selected="#{card.recurrencePattern === 'weekly'}") {{_ 'weekly'}} ++ option(value="monthly", selected="#{card.recurrencePattern === 'monthly'}") {{_ 'monthly'}} + label +- | End repeat on ++ | {{_ 'end-repeat-on'}} + input.js-recurring-end-date(type="date" value=card.recurrenceEndDate) + if currentBoard.hasAnyAllowsUser + hr +diff --git a/imports/i18n/data/en.i18n.json b/imports/i18n/data/en.i18n.json +index 10260ff2b..b16200c1a 100644 +--- a/imports/i18n/data/en.i18n.json ++++ b/imports/i18n/data/en.i18n.json +@@ -1270,5 +1270,12 @@ + "supportPopup-title": "Support", + "accessibility-page-enabled": "Accessibility page enabled", + "accessibility-title": "Accessibility topic", +- "accessibility-content": "Accessibility content" ++ "accessibility-content": "Accessibility content", ++ "recurrence": "Recurrence", ++ "repeat-this-card": "Repeat this card", ++ "repeat-every": "Repeat every", ++ "daily": "Daily", ++ "weekly": "Weekly", ++ "monthly": "Monthly", ++ "end-repeat-on": "End repeat on" + } +``` \ No newline at end of file diff --git a/docs/Translations/custom-translation-string.png b/docs/Translations/custom-translation-string.png new file mode 100644 index 000000000..b0cff931b Binary files /dev/null and b/docs/Translations/custom-translation-string.png differ diff --git a/docs/Translations/protonmail.png b/docs/Translations/protonmail.png new file mode 100644 index 000000000..e61f34ba0 Binary files /dev/null and b/docs/Translations/protonmail.png differ diff --git a/docs/Translations/screenshot-change-language.png b/docs/Translations/screenshot-change-language.png new file mode 100644 index 000000000..788d29b9f Binary files /dev/null and b/docs/Translations/screenshot-change-language.png differ diff --git a/docs/Upgrade/Upgrade.md b/docs/Upgrade/Upgrade.md new file mode 100644 index 000000000..15c45e30b --- /dev/null +++ b/docs/Upgrade/Upgrade.md @@ -0,0 +1,23 @@ +## Upgrade + +- There is very active development to upgrade all platforms to newest WeKan. Please try not asking about it every day. +- If using Snap, please wait for official automatic upgrade from 6.09 to 7.x +- It is only possible to migrate to same version of WeKan at different platform, like Snap 6.09 to Docker 6.09 + - Because attachments will not be visible, if upgrading from 6.09 to 7.x + - There will be some way to upgrade attachments later. + +## Migrate + +- [Backup/Restore Snap/Docker](../Backup/Backup.md) + - also copy files at `/var/snap/wekan/common/files/` to environment variable `WRITABLE_PATH` files subdirectory + - If you use WeKan included Caddy v1, also copy `/var/snap/wekan/common/files/Caddyfile`, but recommended is to use [newer webserver like Caddy 2 etc](../Webserver) + - About Caddy: Caddy v1 Caddyfile is NOT compatible with Caddy v2 Caddyfile !! It is different syntax. Look at Caddy v2 syntax at [Caddy docs](../Webserver/Caddy.md) or [MultiSnap docs](../Platforms/FOSS/Snap/Many-Snaps-on-LXC.md) +- [Automatically updating multi Snap](../Platforms/FOSS/Snap/Many-Snaps-on-LXC.md) + - at multisnap also copy other snapnames like t `/var/snap/wekan_OTHERSNAPNAME/common/files/` to environment variable `WRITABLE_PATH` files subdirectory +- [Migrate Sandstorm](../Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md) that also has [exporting to JSON textfiles](../Platforms/FOSS/Sandstorm/Export-from-Wekan-Sandstorm-grain-.zip-file.md#11b-dump-database-to-json-text-files) +- [Migrate text to SQLite and attachments to separate files](https://github.com/wekan/minio-metadata) that will be later used with future WeKan versions like [WeKan Studio](https://github.com/wekan/wekanstudio) or [wami](https://github.com/wekan/wami) +- [Trello Attachments Downloader](https://github.com/wekan/trello-attachments-downloader), also save JSON of each board. There will later be import to WeKan. +- [ImportExport](../ImportExport), some may work, some may need improvements. These will later be features directly at WeKan. + + + diff --git a/docs/Webhooks/Outgoing-Webhook-to-Discord.md b/docs/Webhooks/Discord/Outgoing-Webhook-to-Discord.md similarity index 93% rename from docs/Webhooks/Outgoing-Webhook-to-Discord.md rename to docs/Webhooks/Discord/Outgoing-Webhook-to-Discord.md index c311d35e5..0cbe4df9e 100644 --- a/docs/Webhooks/Outgoing-Webhook-to-Discord.md +++ b/docs/Webhooks/Discord/Outgoing-Webhook-to-Discord.md @@ -2,7 +2,7 @@ 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 +Outgoing Webhook to Discord 1. Add Webhook to Discord @@ -34,4 +34,4 @@ Wekan boards have Outgoing Webhooks for board change messages, those can be brid 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 +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.fi/api/). diff --git a/docs/Webhooks/Discord/outgoing-webhook-discord.gif b/docs/Webhooks/Discord/outgoing-webhook-discord.gif new file mode 100644 index 000000000..527a4e45d Binary files /dev/null and b/docs/Webhooks/Discord/outgoing-webhook-discord.gif differ diff --git a/docs/Webhooks/screenshot-outgoing-webhooks.png b/docs/Webhooks/screenshot-outgoing-webhooks.png new file mode 100644 index 000000000..907f9e8b9 Binary files /dev/null and b/docs/Webhooks/screenshot-outgoing-webhooks.png differ diff --git a/docs/Webserver/BridgedAdapter.png b/docs/Webserver/BridgedAdapter.png new file mode 100644 index 000000000..038440bda Binary files /dev/null and b/docs/Webserver/BridgedAdapter.png differ diff --git a/docs/Webserver/Caddy-Webserver-Config.md b/docs/Webserver/Caddy.md similarity index 99% rename from docs/Webserver/Caddy-Webserver-Config.md rename to docs/Webserver/Caddy.md index 95417e8a0..69b7f2eba 100644 --- a/docs/Webserver/Caddy-Webserver-Config.md +++ b/docs/Webserver/Caddy.md @@ -1,3 +1,10 @@ +## Infra Caddy Guy Scripts: Docker, Caddy Lightweight Server Management Bash TUI + +- https://github.com/nguyenanhung/infra-caddy-guy +- https://news.ycombinator.com/item?id=43940096 + +---- + [Caddy 2 .well-known/assetlinks.json config for WeKan Android Play Store app](../PWA#fullscreen-android-app-with-caddy-and-wekan-server) # CloudFlare DNS diff --git a/docs/Webserver/Lets-Encrypt-and-Google-Auth.md b/docs/Webserver/Lets-Encrypt-and-Google-Auth.md new file mode 100644 index 000000000..d2ab07ec1 --- /dev/null +++ b/docs/Webserver/Lets-Encrypt-and-Google-Auth.md @@ -0,0 +1,70 @@ +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/Webserver/NAT.png b/docs/Webserver/NAT.png new file mode 100644 index 000000000..8ad4370d4 Binary files /dev/null and b/docs/Webserver/NAT.png differ diff --git a/docs/Webserver/Nginx-Webserver-Config.md b/docs/Webserver/Nginx.md similarity index 100% rename from docs/Webserver/Nginx-Webserver-Config.md rename to docs/Webserver/Nginx.md diff --git a/docs/Webserver/PortForwarding.png b/docs/Webserver/PortForwarding.png new file mode 100644 index 000000000..af6ba615e Binary files /dev/null and b/docs/Webserver/PortForwarding.png differ diff --git a/docs/Webserver/Scaling.md b/docs/Webserver/Scaling.md index 104ffa87f..5acfdfd33 100644 --- a/docs/Webserver/Scaling.md +++ b/docs/Webserver/Scaling.md @@ -43,7 +43,7 @@ Minimum specs: ## Alternatives -At https://wekan.github.io / Download / Kubernetes or OpenShift, etc +At https://wekan.fi / Download / Kubernetes or OpenShift, etc *** 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.sh b/find.sh index b552866e4..7c11e282d 100755 --- a/find.sh +++ b/find.sh @@ -13,4 +13,6 @@ if (( $# != 1 )); then exit 0 fi -find . | grep -v node_modules | grep -v .build | grep -v .meteor | grep -v .git | xargs grep --no-messages $1 | less +#find . | grep -v node_modules | grep -v .build | grep -v .meteor | grep -v .git | xargs grep --no-messages $1 | less +#find . -print0 | grep -v node_modules | grep -v .build | grep -v .meteor | grep -v .git | xargs -0 grep --no-messages $1 | less +find . | grep -v node_modules | grep -v .build | grep -v .meteor | grep -v .git | xargs grep -I --no-messages $1 | less diff --git a/imports/i18n/data/af.i18n.json b/imports/i18n/data/af.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/af.i18n.json +++ b/imports/i18n/data/af.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/af_ZA.i18n.json b/imports/i18n/data/af_ZA.i18n.json index e756e6377..16941625f 100644 --- a/imports/i18n/data/af_ZA.i18n.json +++ b/imports/i18n/data/af_ZA.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ar-DZ.i18n.json b/imports/i18n/data/ar-DZ.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/ar-DZ.i18n.json +++ b/imports/i18n/data/ar-DZ.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ar-EG.i18n.json b/imports/i18n/data/ar-EG.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/ar-EG.i18n.json +++ b/imports/i18n/data/ar-EG.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ar.i18n.json b/imports/i18n/data/ar.i18n.json index 819c012ed..75f5136df 100644 --- a/imports/i18n/data/ar.i18n.json +++ b/imports/i18n/data/ar.i18n.json @@ -89,13 +89,13 @@ "setListWidthPopup-title": "تعيين العرض", "set-list-width": "تعيين العرض", "set-list-width-value": "تعيين الحد الأدنى والأقصى للعرض (بالبكسل)", - "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", + "list-width-error-message": "يجب أن تكون عرضات القائمة أعدادًا صحيحة أكبر من 100", + "keyboard-shortcuts-enabled": "تم تفعيل اختصارات لوحة المفاتيح. انقر لتعطيلها.", + "keyboard-shortcuts-disabled": "اختصارات لوحة المفاتيح معطلة. انقر للتفعيل.", + "setSwimlaneHeightPopup-title": "ضبط ارتفاع مسار السباحة", + "set-swimlane-height": "ضبط ارتفاع مسار السباحة", + "set-swimlane-height-value": "ارتفاع مسار السباحة (بكسل)", + "swimlane-height-error-message": "يجب أن يكون ارتفاع مسار السباحة عددًا صحيحًا موجبًا\n ", "add-swimlane": "Add Swimlane", "add-subtask": "إضافة مهمة فرعية", "add-checklist": "إضافة قائمة تدقيق", @@ -103,10 +103,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 image to minicard", + "add-cover": "إضافة صورة الغلاف إلى البطاقة الصغيرة", "add-label": "إضافة ملصق", "add-list": "إضافة قائمة", - "add-after-list": "Add After List", + "add-after-list": "أضف بعد القائمة", "add-members": "إضافة أعضاء", "added": "أُضيف", "addMemberPopup-title": "أعضاء", @@ -125,6 +125,7 @@ "archive": "نقل الى الارشيف", "archive-all": "نقل الكل الى الارشيف", "archive-board": "نقل اللوح الى الارشيف", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "نقل البطاقة الى الارشيف", "archive-list": "نقل القائمة الى الارشيف", "archive-swimlane": "نقل خط السباحة الى الارشيف", @@ -146,13 +147,13 @@ "attachmentDeletePopup-title": "تريد حذف المرفق ?", "attachments": "المرفقات", "auto-watch": "مراقبة لوحات تلقائيا عندما يتم إنشاؤها", - "avatar-too-big": "The avatar is too large (__size__ max)", + "avatar-too-big": "الصورة الرمزية كبيرة جدًا (الحجم الأقصى)", "back": "رجوع", "board-change-color": "تغيير اللوم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", + "board-change-background-image": "تغيير صورة الخلفية", + "board-background-image-url": "عنوان URL لصورة الخلفية", + "add-background-image": "إضافة صورة الخلفية", + "remove-background-image": "إزالة صورة الخلفية", "show-at-all-boards-page" : "Show at All Boards page", "board-info-on-my-boards" : "جميع إعدادات اللوحات", "boardInfoOnMyBoardsPopup-title" : "جميع إعدادات اللوحات", @@ -165,9 +166,9 @@ "board-public-info": "سوف تصبح هذه اللوحة عامّة.", "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", + "boardChangeBackgroundImagePopup-title": "تغيير صورة الخلفية", "allBoardsChangeColorPopup-title": "تغيير اللومr", - "allBoardsChangeBackgroundImagePopup-title": "Change Background Image", + "allBoardsChangeBackgroundImagePopup-title": "تغيير صورة الخلفية", "boardChangeTitlePopup-title": "إعادة تسمية اللوحة", "boardChangeVisibilityPopup-title": "تعديل وضوح الرؤية", "boardChangeWatchPopup-title": "تغيير المتابعة", @@ -266,9 +267,9 @@ "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", + "click-to-enable-auto-width": "تم تعطيل عرض القائمة التلقائي. انقر للتفعيل.", + "click-to-disable-auto-width": "تم تفعيل عرض القائمة التلقائي. انقر لتعطيله.", + "auto-list-width": "عرض القائمة التلقائية", "clipboard": "Clipboard or drag & drop", "close": "غلق", "close-board": "غلق اللوحة", @@ -300,7 +301,7 @@ "color-white": "أبيض", "color-yellow": "yellow", "unset-color": "غير محدد", - "comments": "Comments", + "comments": "تعليقات", "comment": "تعليق", "comment-placeholder": "أكتب تعليق", "comment-only": "التعليق فقط", @@ -383,14 +384,14 @@ "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-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-csv-schema": "لا يتضمن ملف CSV (القيم المفصولة بفواصل)/TSV (القيم المفصولة بعلامات التبويب) الخاص بك المعلومات الصحيحة بالتنسيق الصحيح", "error-list-doesNotExist": "This list does not exist", "error-user-doesNotExist": "This user does not exist", "error-user-notAllowSelf": "لا يمكنك دعوة نفسك", @@ -429,7 +430,7 @@ "filter-overdue": "Overdue", "filter-due-today": "Due today", "filter-due-this-week": "Due this week", - "filter-due-next-week": "Due next week", + "filter-due-next-week": "المقرر الاسبوع المقبل", "filter-due-tomorrow": "Due tomorrow", "list-filter-label": "Filter List by Title", "filter-clear": "مسح التصفية", @@ -451,7 +452,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", + "show-activities": "عرض الأنشطة", "headerBarCreateBoardPopup-title": "إنشاء لوحة", "home": "الرئيسية", "import": "Import", @@ -558,7 +559,7 @@ "public": "عامّ", "public-desc": "هذه اللوحة عامة: مرئية لكلّ من يحصل على الرابط ، و هي مرئية أيضا في محركات البحث مثل جوجل. التعديل مسموح به للأعضاء فقط.", "quick-access-description": "أضف لوحة إلى المفضلة لإنشاء اختصار في هذا الشريط.", - "remove-cover": "Remove cover image from minicard", + "remove-cover": "إزالة صورة الغلاف من البطاقة الصغيرة", "remove-from-board": "حذف من اللوحة", "remove-label": "إزالة التصنيف", "listDeletePopup-title": "حذف القائمة ؟", @@ -587,7 +588,7 @@ "shortcut-clear-filters": "مسح التصفيات", "shortcut-close-dialog": "غلق النافذة", "shortcut-filter-my-cards": "تصفية بطاقاتي", - "shortcut-filter-my-assigned-cards": "Filter my assigned cards", + "shortcut-filter-my-assigned-cards": "تصفية البطاقات المخصصة لي", "shortcut-show-shortcuts": "عرض قائمة الإختصارات ،تلك", "shortcut-toggle-filterbar": "Toggle Filter Sidebar", "shortcut-toggle-searchbar": "Toggle Search Sidebar", @@ -610,7 +611,7 @@ "has-spenttime-cards": "Has spent time cards", "time": "الوقت", "title": "عنوان", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", + "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": "تتبع", @@ -750,9 +751,9 @@ "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", + "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", @@ -865,7 +866,7 @@ "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-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", @@ -896,9 +897,10 @@ "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: ", + "duplicate-board-confirm": "Are you sure you want to duplicate this 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": "Restore all", @@ -966,7 +968,7 @@ "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", + "hide-finished-checklist": "إخفاء قائمة التحقق النهائية", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -974,7 +976,7 @@ "teams": "Teams", "displayName": "Display Name", "shortName": "Short Name", - "autoAddUsersWithDomainName": "Automatically add users with the domain name", + "autoAddUsersWithDomainName": "إضافة المستخدمين تلقائيًا باستخدام اسم المجال", "website": "موقع الكتروني", "person": "شخص", "my-cards": "My Cards", @@ -1111,7 +1113,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": "خطأ بالخادم", @@ -1120,8 +1122,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-activities-of-all-boards": "لا تعرض أنشطة اللوحة على جميع اللوحات", + "now-activities-of-all-boards-are-hidden": "الآن تم إخفاء جميع أنشطة جميع المجالس", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1131,7 @@ "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", + "creator-on-minicard": "الخالق على بطاقة صغيرة", "filesReportTitle": "تقارير الملفات", "reports": "تقارير", "rulesReportTitle": "Rules Report", @@ -1204,9 +1206,9 @@ "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", + "newlineBecomesNewChecklistItem": "يصبح كل سطر من النص أحد عناصر قائمة التحقق", + "newLineNewItem": "سطر واحد من النص = عنصر واحد من قائمة التحقق", + "newlineBecomesNewChecklistItemOriginOrder": "يصبح كل سطر من النص أحد عناصر قائمة التحقق، الترتيب الأصلي", "originOrder": "النظام الأصلي\n ", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", @@ -1241,32 +1243,64 @@ "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", + "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": "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", + "translation-text": "نص الترجمة", + "show-subtasks-field": "إظهار حقل المهام الفرعية", + "show-week-of-year": "عرض أسبوع السنة (ISO 8601)", + "convert-to-markdown": "تحويل إلى تخفيض السعر", + "import-board-zip": "أضف ملف .zip الذي يحتوي على ملفات JSON الخاصة باللوحة، ودلائل فرعية لأسماء اللوحة مع المرفقات", "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" + "uncollapse": "إلغاء الانهيار", + "hideCheckedChecklistItems": "إخفاء عناصر قائمة التحقق المحددة", + "hideAllChecklistItems": "إخفاء جميع عناصر قائمة التحقق", + "support": "دعم", + "supportPopup-title": "دعم", + "accessibility": "Accessibility", + "accessibility-page-enabled": "تم تمكين صفحة إمكانية الوصول", + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "محتوى إمكانية الوصول", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "كل المستخدمين", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "نشط", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ary.i18n.json b/imports/i18n/data/ary.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/ary.i18n.json +++ b/imports/i18n/data/ary.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ast-ES.i18n.json b/imports/i18n/data/ast-ES.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/ast-ES.i18n.json +++ b/imports/i18n/data/ast-ES.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/az-AZ.i18n.json b/imports/i18n/data/az-AZ.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/az-AZ.i18n.json +++ b/imports/i18n/data/az-AZ.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/az-LA.i18n.json b/imports/i18n/data/az-LA.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/az-LA.i18n.json +++ b/imports/i18n/data/az-LA.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/az.i18n.json b/imports/i18n/data/az.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/az.i18n.json +++ b/imports/i18n/data/az.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/bg.i18n.json b/imports/i18n/data/bg.i18n.json index 36ffe06f4..5982d15cc 100644 --- a/imports/i18n/data/bg.i18n.json +++ b/imports/i18n/data/bg.i18n.json @@ -125,6 +125,7 @@ "archive": "Премести в Архива", "archive-all": "Премести всички в Архива", "archive-board": "Премести Таблото в Архива", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Премести Картата в Архива", "archive-list": "Премести Списъка в Архива", "archive-swimlane": "Премести Коридора в Архива", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Копирай таблото", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Състояние", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Активен", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/br.i18n.json b/imports/i18n/data/br.i18n.json index 695b21cc7..1ad70fd97 100644 --- a/imports/i18n/data/br.i18n.json +++ b/imports/i18n/data/br.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ca.i18n.json b/imports/i18n/data/ca.i18n.json index 7ff6f51f8..64efdf766 100644 --- a/imports/i18n/data/ca.i18n.json +++ b/imports/i18n/data/ca.i18n.json @@ -125,6 +125,7 @@ "archive": "Moure a l'arxiu", "archive-all": "Moure tot a l'arxiu", "archive-board": "Moure Tauler al Arxiu", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Moure Fitxa al Arxiu", "archive-list": "Moure Llista al Arxiu", "archive-swimlane": "Mou carril a l'Arxiu", @@ -896,6 +897,7 @@ "oidc-button-text": "Personalitza el text del botó OIDC", "default-authentication-method": "Mètode d'autenticació per defecte", "duplicate-board": "Tauler duplicat", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "EL nom d'organitzacions és:", "team-number": "El nombre d'equips és:", "people-number": "El nombre d'usuaris és:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Estat", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Tots els usuaris", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Actiu", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ca@valencia.i18n.json b/imports/i18n/data/ca@valencia.i18n.json index 614494d0c..6a54e48a2 100644 --- a/imports/i18n/data/ca@valencia.i18n.json +++ b/imports/i18n/data/ca@valencia.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ca_ES.i18n.json b/imports/i18n/data/ca_ES.i18n.json index e87e7f1c3..e0a7909c4 100644 --- a/imports/i18n/data/ca_ES.i18n.json +++ b/imports/i18n/data/ca_ES.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/cmn.i18n.json b/imports/i18n/data/cmn.i18n.json index 72d99aaa3..e6ab6ee95 100644 --- a/imports/i18n/data/cmn.i18n.json +++ b/imports/i18n/data/cmn.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/cs-CZ.i18n.json b/imports/i18n/data/cs-CZ.i18n.json index 51e07ec5d..f8d4022df 100644 --- a/imports/i18n/data/cs-CZ.i18n.json +++ b/imports/i18n/data/cs-CZ.i18n.json @@ -125,6 +125,7 @@ "archive": "Přesunout do archivu", "archive-all": "Přesunout vše do archivu", "archive-board": "Přesunout tablo do archivu", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Přesunout kartu do archivu", "archive-list": "Přesunout seznam do archivu", "archive-swimlane": "Přesunout swimlane do archivu", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Zobraz způsob ověřování", "duplicate-board": "Duplikovat tablo", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Stav", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Všechny", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktivní", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/cs.i18n.json b/imports/i18n/data/cs.i18n.json index e529b4195..9e2829156 100644 --- a/imports/i18n/data/cs.i18n.json +++ b/imports/i18n/data/cs.i18n.json @@ -125,6 +125,7 @@ "archive": "Přesunout do archivu", "archive-all": "Přesunout vše do archivu", "archive-board": "Přesunout tablo do archivu", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Přesunout kartu do archivu", "archive-list": "Přesunout seznam do archivu", "archive-swimlane": "Přesunout swimlane do archivu", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Výchozí způsob ověřování", "duplicate-board": "Duplikovat tablo", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Počet organizací je:", "team-number": "Počet týmů je:", "people-number": "Počet osob je:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Stav", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Všechny", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktivní", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/cy-GB.i18n.json b/imports/i18n/data/cy-GB.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/cy-GB.i18n.json +++ b/imports/i18n/data/cy-GB.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/cy.i18n.json b/imports/i18n/data/cy.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/cy.i18n.json +++ b/imports/i18n/data/cy.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/da.i18n.json b/imports/i18n/data/da.i18n.json index 26cf86c80..d452407cc 100644 --- a/imports/i18n/data/da.i18n.json +++ b/imports/i18n/data/da.i18n.json @@ -125,6 +125,7 @@ "archive": "Flyt til arkiv", "archive-all": "Flyt alle til arkiv", "archive-board": "Flyt tavle til arkiv", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Flyt kort til arkiv", "archive-list": "Flyt liste til arkiv", "archive-swimlane": "Flyt svømmebane til arkiv", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Standard for godkendelsesmetode", "duplicate-board": "Duplikér tavle", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktiv", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/de-AT.i18n.json b/imports/i18n/data/de-AT.i18n.json index 0281a474d..16d0a158c 100644 --- a/imports/i18n/data/de-AT.i18n.json +++ b/imports/i18n/data/de-AT.i18n.json @@ -125,6 +125,7 @@ "archive": "Ins Archiv verschieben", "archive-all": "Alles ins Archiv verschieben", "archive-board": "Board ins Archiv verschieben", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Karte ins Archiv verschieben", "archive-list": "Liste ins Archiv verschieben", "archive-swimlane": "Swimlane ins Archiv verschieben", @@ -896,6 +897,7 @@ "oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche", "default-authentication-method": "Standardauthentifizierungsverfahren", "duplicate-board": "Board duplizieren", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "alle Benutzer", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktiv", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/de-CH.i18n.json b/imports/i18n/data/de-CH.i18n.json index e52b93ad6..7960c88f9 100644 --- a/imports/i18n/data/de-CH.i18n.json +++ b/imports/i18n/data/de-CH.i18n.json @@ -125,6 +125,7 @@ "archive": "Ins Archiv verschieben", "archive-all": "Alles ins Archiv verschieben", "archive-board": "Board ins Archiv verschieben", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Karte ins Archiv verschieben", "archive-list": "Liste ins Archiv verschieben", "archive-swimlane": "Swimlane ins Archiv verschieben", @@ -896,6 +897,7 @@ "oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche", "default-authentication-method": "Standardauthentifizierungsverfahren", "duplicate-board": "Board duplizieren", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "alle Benutzer", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktiv", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/de.i18n.json b/imports/i18n/data/de.i18n.json index fbe3b6ecf..710b8112e 100644 --- a/imports/i18n/data/de.i18n.json +++ b/imports/i18n/data/de.i18n.json @@ -125,6 +125,7 @@ "archive": "Ins Archiv verschieben", "archive-all": "Alles ins Archiv verschieben", "archive-board": "Board ins Archiv verschieben", + "archive-board-confirm": "Wollen Sie das Board wirklich archivieren?", "archive-card": "Karte ins Archiv verschieben", "archive-list": "Liste ins Archiv verschieben", "archive-swimlane": "Swimlane ins Archiv verschieben", @@ -896,6 +897,7 @@ "oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche", "default-authentication-method": "Standardauthentifizierungsverfahren", "duplicate-board": "Board duplizieren", + "duplicate-board-confirm": "Wollen Sie das Board wirklich duplizieren?", "org-number": "Die Anzahl der Organisationen ist:", "team-number": "Die Anzahl der Teams ist:", "people-number": "Die Anzahl der Personen ist:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Verberge alle Checklisteneinträge", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Bedienungshilfe", "accessibility-page-enabled": "Bedienungshilfe Seite freigeschaltet", + "accessibility-info-not-added-yet": "Es wurde noch keine Information zur Bedienungshilfe hinzugefügt", "accessibility-title": "Bedienungshilfe Titel", - "accessibility-content": "Bedienungshilfe Inhalt" + "accessibility-content": "Bedienungshilfe Inhalt", + "accounts-lockout-settings": "Brute-Force-Schutz Einstellungen", + "accounts-lockout-info": "Diese Einstellungen steuern, wie Anmeldeversuche gegen Brute-Force-Angriffe geschützt werden", + "accounts-lockout-known-users": "Einstellungen für bekannte Benutzer (korrekter Benutzername, falsches Passwort)", + "accounts-lockout-unknown-users": "Einstellungen für unbekannte Benutzer (nicht existierender Benutzername)", + "accounts-lockout-failures-before": "Fehler vor einer Sperrung", + "accounts-lockout-period": "Dauer der Sperrung (Sekunden)", + "accounts-lockout-failure-window": "Fehlerfenster (Sekunden)", + "accounts-lockout-settings-updated": "Die Brute-force-Schutz Einstellungen wurden aktualisiert", + "accounts-lockout-locked-users": "Gesperrte Benutzer", + "accounts-lockout-locked-users-info": "Kürzlich gesperrte Benutzer aufgrund von zu vielen fehlerhaften Logins", + "accounts-lockout-no-locked-users": "Es gibt aktuell keine gesperrten Benutzer", + "accounts-lockout-failed-attempts": "Fehlversuche", + "accounts-lockout-remaining-time": "Verbleibende Zeit", + "accounts-lockout-user-unlocked": "Benutzer wurde erfolgreich entsperrt", + "accounts-lockout-confirm-unlock": "Wollen Sie den Benutzer wirklich entsperren?", + "accounts-lockout-confirm-unlock-all": "Wollen Sie wirklich alle gesperrten Benutzer entsperren?", + "accounts-lockout-show-locked-users": "Zeige nur gesperrte Benutzer", + "accounts-lockout-user-locked": "Benutzer ist gesperrt", + "accounts-lockout-click-to-unlock": "Klicken Sie, um den Benutzer zu entsperren", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Zeige:", + "admin-people-filter-all": "alle Benutzer", + "admin-people-filter-locked": "Nur gesperrte Benutzer", + "admin-people-filter-active": "Aktiv", + "admin-people-filter-inactive": "Nicht Aktiv", + "admin-people-active-status": "Aktiv Status", + "admin-people-user-active": "Benutzer ist Aktiv - zum Deaktivieren klicken", + "admin-people-user-inactive": "Benutzer ist Inaktiv - zum Aktivieren klicken", + "accounts-lockout-all-users-unlocked": "Alle gesperrten Benutzer wurden entsperrt", + "accounts-lockout-unlock-all": "Alle entsperren" } diff --git a/imports/i18n/data/de_DE.i18n.json b/imports/i18n/data/de_DE.i18n.json index fc3ed5809..beff4e34c 100644 --- a/imports/i18n/data/de_DE.i18n.json +++ b/imports/i18n/data/de_DE.i18n.json @@ -125,6 +125,7 @@ "archive": "Ins Archiv verschieben", "archive-all": "Alles ins Archiv verschieben", "archive-board": "Board ins Archiv verschieben", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Karte ins Archiv verschieben", "archive-list": "Liste ins Archiv verschieben", "archive-swimlane": "Swimlane ins Archiv verschieben", @@ -896,6 +897,7 @@ "oidc-button-text": "Benutzerdefinierter Text der OIDC-Schaltfläche", "default-authentication-method": "Standardauthentifizierungsverfahren", "duplicate-board": "Board duplizieren", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Die Anzahl der Organisationen ist:", "team-number": "Die Anzahl der Teams ist:", "people-number": "Die Anzahl der Personen ist:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Verberge alle Checklisteneinträge", "support": "Unterstützung", "supportPopup-title": "Unterstützung", + "accessibility": "Accessibility", "accessibility-page-enabled": "Barrierefreie Seite freigeschaltet", - "accessibility-title": "Barrierefreier Eintrag", - "accessibility-content": "Barrierefreier Eintrag" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Barrierefreier Eintrag", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "alle Benutzer", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktiv", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/el-GR.i18n.json b/imports/i18n/data/el-GR.i18n.json index 4eacf20f7..bd9533609 100644 --- a/imports/i18n/data/el-GR.i18n.json +++ b/imports/i18n/data/el-GR.i18n.json @@ -125,6 +125,7 @@ "archive": "Μετακίνηση στο Αρχείο", "archive-all": "Μετακίνηση Όλων στο Αρχείο", "archive-board": "Μετακίνηση Πίνακα στο Αρχείο", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Μετακίνηση Κάρτας στο Αρχείο", "archive-list": "Μετακίνηση Λίστας στο Αρχείο", "archive-swimlane": "Μετακίνηση της Λωρίδας στο Αρχείο", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Ενεργό", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/el.i18n.json b/imports/i18n/data/el.i18n.json index 3f4666a1b..0644171ed 100644 --- a/imports/i18n/data/el.i18n.json +++ b/imports/i18n/data/el.i18n.json @@ -125,6 +125,7 @@ "archive": "Μετακίνηση στο Αρχείο", "archive-all": "Μετακίνηση Όλων στο Αρχείο", "archive-board": "Μετακίνηση Πίνακα στο Αρχείο", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Μετακίνηση Κάρτας στο Αρχείο", "archive-list": "Μετακίνηση Λίστας στο Αρχείο", "archive-swimlane": "Μετακίνηση της Λωρίδας στο Αρχείο", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Ενεργό", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en-BR.i18n.json b/imports/i18n/data/en-BR.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/en-BR.i18n.json +++ b/imports/i18n/data/en-BR.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en-DE.i18n.json b/imports/i18n/data/en-DE.i18n.json index 9e93c3326..8eea72ed2 100644 --- a/imports/i18n/data/en-DE.i18n.json +++ b/imports/i18n/data/en-DE.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en-GB.i18n.json b/imports/i18n/data/en-GB.i18n.json index 3424f8de4..d54e28396 100644 --- a/imports/i18n/data/en-GB.i18n.json +++ b/imports/i18n/data/en-GB.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organisations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en-IT.i18n.json b/imports/i18n/data/en-IT.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/en-IT.i18n.json +++ b/imports/i18n/data/en-IT.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en-MY.i18n.json b/imports/i18n/data/en-MY.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/en-MY.i18n.json +++ b/imports/i18n/data/en-MY.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en-YS.i18n.json b/imports/i18n/data/en-YS.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/en-YS.i18n.json +++ b/imports/i18n/data/en-YS.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en.i18n.json b/imports/i18n/data/en.i18n.json index 10260ff2b..55cdb8cb9 100644 --- a/imports/i18n/data/en.i18n.json +++ b/imports/i18n/data/en.i18n.json @@ -1268,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en_AU.i18n.json b/imports/i18n/data/en_AU.i18n.json new file mode 100644 index 000000000..55cdb8cb9 --- /dev/null +++ b/imports/i18n/data/en_AU.i18n.json @@ -0,0 +1,1306 @@ +{ + "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-board-confirm": "Are you sure you want to archive this board?", + "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 private.", + "board-public-info": "This board will be public.", + "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 logging in.", + "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 start", + "add-custom-html-before-body-end": "Add Custom HTML before 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", + "duplicate-board-confirm": "Are you sure you want to duplicate this 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__:` - 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": "Accessibility", + "accessibility-page-enabled": "Accessibility page enabled", + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" +} diff --git a/imports/i18n/data/en_ID.i18n.json b/imports/i18n/data/en_ID.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/en_ID.i18n.json +++ b/imports/i18n/data/en_ID.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en_SG.i18n.json b/imports/i18n/data/en_SG.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/en_SG.i18n.json +++ b/imports/i18n/data/en_SG.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en_TR.i18n.json b/imports/i18n/data/en_TR.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/en_TR.i18n.json +++ b/imports/i18n/data/en_TR.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/en_ZA.i18n.json b/imports/i18n/data/en_ZA.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/en_ZA.i18n.json +++ b/imports/i18n/data/en_ZA.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/eo.i18n.json b/imports/i18n/data/eo.i18n.json index d55f385c1..3a4344a2e 100644 --- a/imports/i18n/data/eo.i18n.json +++ b/imports/i18n/data/eo.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/es-AR.i18n.json b/imports/i18n/data/es-AR.i18n.json index e4011c011..935318379 100644 --- a/imports/i18n/data/es-AR.i18n.json +++ b/imports/i18n/data/es-AR.i18n.json @@ -125,6 +125,7 @@ "archive": "Mover al Archivo", "archive-all": "Mover Todo al Archivo", "archive-board": "Mover Tablero al Archivo", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Mover Tarjeta al Archivo", "archive-list": "Mover Lista al Archivo", "archive-swimlane": "Mover Calle al Archivo", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Activo", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/es-CL.i18n.json b/imports/i18n/data/es-CL.i18n.json index a4bee6545..98e4f5d50 100644 --- a/imports/i18n/data/es-CL.i18n.json +++ b/imports/i18n/data/es-CL.i18n.json @@ -125,6 +125,7 @@ "archive": "Archivar", "archive-all": "Archivar todo", "archive-board": "Archivar este tablero", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Archivar esta tarjeta", "archive-list": "Archivar esta lista", "archive-swimlane": "Archivar este carril", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Método de autenticación por defecto", "duplicate-board": "Duplicar tablero", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Activo", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/es-LA.i18n.json b/imports/i18n/data/es-LA.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/es-LA.i18n.json +++ b/imports/i18n/data/es-LA.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/es-MX.i18n.json b/imports/i18n/data/es-MX.i18n.json index 123ddb258..07e58ec9c 100644 --- a/imports/i18n/data/es-MX.i18n.json +++ b/imports/i18n/data/es-MX.i18n.json @@ -125,6 +125,7 @@ "archive": "Archivar", "archive-all": "Archivar todo", "archive-board": "Archivar este tablero", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Archivar esta tarjeta", "archive-list": "Archivar esta lista", "archive-swimlane": "Archivar este carril", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/es-PE.i18n.json b/imports/i18n/data/es-PE.i18n.json index 59843c62f..3001cae98 100644 --- a/imports/i18n/data/es-PE.i18n.json +++ b/imports/i18n/data/es-PE.i18n.json @@ -125,6 +125,7 @@ "archive": "Archivar", "archive-all": "Archivar todo", "archive-board": "Archivar este tablero", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Archivar esta tarjeta", "archive-list": "Archivar esta lista", "archive-swimlane": "Archivar este carril", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Método de autenticación por defecto", "duplicate-board": "Duplicar tablero", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Estado", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Todos los usuarios", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Activo", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/es-PY.i18n.json b/imports/i18n/data/es-PY.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/es-PY.i18n.json +++ b/imports/i18n/data/es-PY.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/es.i18n.json b/imports/i18n/data/es.i18n.json index ab1b60637..cd3082c99 100644 --- a/imports/i18n/data/es.i18n.json +++ b/imports/i18n/data/es.i18n.json @@ -125,6 +125,7 @@ "archive": "Archivar", "archive-all": "Archivar todo", "archive-board": "Archivar este tablero", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Archivar esta tarjeta", "archive-list": "Archivar esta lista", "archive-swimlane": "Archivar este carril", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Método de autenticación por defecto", "duplicate-board": "Duplicar tablero", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "El número de organizaciones es:", "team-number": "El número de equipos es:", "people-number": "El número de personas es:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Ocultar todos los elementos de la lista de verificación", "support": "Soporte", "supportPopup-title": "Soporte", + "accessibility": "Accessibility", "accessibility-page-enabled": "Página de accesibilidad habilitada", - "accessibility-title": "Temas de accesibilidad", - "accessibility-content": "Contenido de accesibilidad" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Contenido de accesibilidad", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Estado", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Todos los usuarios", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Activo", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/es_CO.i18n.json b/imports/i18n/data/es_CO.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/es_CO.i18n.json +++ b/imports/i18n/data/es_CO.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/et-EE.i18n.json b/imports/i18n/data/et-EE.i18n.json index 9c5651b0f..a30102d63 100644 --- a/imports/i18n/data/et-EE.i18n.json +++ b/imports/i18n/data/et-EE.i18n.json @@ -125,6 +125,7 @@ "archive": "Liiguta arhiivi", "archive-all": "Vii kõik arhiivi", "archive-board": "Liiguta tahvel arhiivi", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Liiguta kaart arhiivi", "archive-list": "Liiguta nimekiri arhiivi", "archive-swimlane": "Liiguta ujumisrajoon arhiivi", @@ -896,6 +897,7 @@ "oidc-button-text": "OIDC-nupu teksti kohandamine", "default-authentication-method": "Vaikimisi autentimismeetod", "duplicate-board": "Duplikaat Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Staatus", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Kõik kasutajad", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktiivne", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/eu.i18n.json b/imports/i18n/data/eu.i18n.json index 791c52b6e..5a8934f4f 100644 --- a/imports/i18n/data/eu.i18n.json +++ b/imports/i18n/data/eu.i18n.json @@ -125,6 +125,7 @@ "archive": "Eraman biltegira", "archive-all": "Eraman guztiak biltegira", "archive-board": "Mugitu arbela biltegira", + "archive-board-confirm": "Ziur zaude taula hau artxibatu nahi duzula?", "archive-card": "Eraman txartela biltegira", "archive-list": "Eraman zerrenda biltegira", "archive-swimlane": "Eraman erraila biltegira", @@ -610,7 +611,7 @@ "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-assignees": "Gaitu/ezgaitu esleipendunak 1-9 txartelerako (arbeleko gehitze-ordenaren arabera).", "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", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Ziur zaude taula hau bikoiztu nahi duzula?", "org-number": "Erakunde kopurua hau da:", "team-number": "Taldeen kopurua hau da:", "people-number": "Jendearen kopurua hau da:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Ezkutatu kontrol-zerrendako elementu guztiak", "support": "Laguntza", "supportPopup-title": "Laguntza", + "accessibility": "irisgarritasuna", "accessibility-page-enabled": "Irisgarritasun orria gaituta", - "accessibility-title": "Irisgarritasun gaia", - "accessibility-content": "Irisgarritasun edukia" + "accessibility-info-not-added-yet": "Irisgarritasun informaziorik ez da gehitu oraindik", + "accessibility-title": "Irisgarritasun titulua", + "accessibility-content": "Irisgarritasun edukia", + "accounts-lockout-settings": "Brute Force babesteko ezarpenak", + "accounts-lockout-info": "Ezarpen hauek kontrolatzen dute nola babesten diren saioa hasteko saiakerak indar basatien erasoetatik.", + "accounts-lockout-known-users": "Erabiltzaile ezagunentzako konfigurazioa (erabiltzaile izen zuzena, pasahitz okerra)", + "accounts-lockout-unknown-users": " Erabiltzaile ezezagunentzako konfigurazioa (ez dago erabiltzaile-izenik)", + "accounts-lockout-failures-before": "Erroreak blokeatu aurretik", + "accounts-lockout-period": "Blokeoaren aldia (segundoak)", + "accounts-lockout-failure-window": "Hutsegite leihoa (segundoak)", + "accounts-lockout-settings-updated": "Indar basatiko erasoen kontrako babesa eguneratu da", + "accounts-lockout-locked-users": "Blokeatutako erabiltzaileak", + "accounts-lockout-locked-users-info": " Erabiltzaileak blokeatuta daude saioa hasteko huts egindako saiakera gehiegi dituztelako.", + "accounts-lockout-no-locked-users": "Une honetan ez dago blokeatutako erabiltzailerik", + "accounts-lockout-failed-attempts": "Huts egindako saiakerak", + "accounts-lockout-remaining-time": "Geratzen den denbora", + "accounts-lockout-user-unlocked": "Erabiltzailea behar bezala desblokeatu da", + "accounts-lockout-confirm-unlock": "Ziur zaude erabiltzaile hau desblokeatu nahi duzula?", + "accounts-lockout-confirm-unlock-all": "Ziur zaude blokeatutako erabiltzaile guztiak desblokeatu nahi dituzula?", + "accounts-lockout-show-locked-users": "Erakutsi bakarrik blokeatutako erabiltzaileak", + "accounts-lockout-user-locked": "Erabiltzailea blokeatuta dago", + "accounts-lockout-click-to-unlock": "Klikatu erabiltzaile hau desblokeatzeko", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Erakutsi:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Bakarrik blokeatutako erabiltzaileak", + "admin-people-filter-active": "Gaituta", + "admin-people-filter-inactive": "Ez dago aktibo", + "admin-people-active-status": "Egoera aktiboa", + "admin-people-user-active": "Erabiltzailea aktiboa dago - egin klik desaktibatzeko", + "admin-people-user-inactive": "Erabiltzailea ez dago aktiboa - egin klik aktibatzeko", + "accounts-lockout-all-users-unlocked": "Blokeatutako erabiltzaile guztiak desblokeatu dira", + "accounts-lockout-unlock-all": "Desblokeatu guztiak" } diff --git a/imports/i18n/data/fa-IR.i18n.json b/imports/i18n/data/fa-IR.i18n.json index 792856efd..cdae1a30a 100644 --- a/imports/i18n/data/fa-IR.i18n.json +++ b/imports/i18n/data/fa-IR.i18n.json @@ -125,6 +125,7 @@ "archive": "انتقال به آرشیو", "archive-all": "انتقال همه به آرشیو", "archive-board": "انتقال برد به آرشیو", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "انتقال کارت به آرشیو", "archive-list": "انتقال لیست به آرشیو", "archive-swimlane": "انتقال مسیر به آرشیو", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "نوع اعتبارسنجی پیشفرض", "duplicate-board": "برد تکراری", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "تعداد سازمان ها:", "team-number": "تعداد تیم ها:", "people-number": "تعداد افراد:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "پنهان کردن همه موارد چک لیست", "support": "پشتیبانی", "supportPopup-title": "پشتیبانی", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "وضعیت", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "تمام کاربران", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "فعال", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/fa.i18n.json b/imports/i18n/data/fa.i18n.json index e7b0ce5bc..ef8fe9a5a 100644 --- a/imports/i18n/data/fa.i18n.json +++ b/imports/i18n/data/fa.i18n.json @@ -125,6 +125,7 @@ "archive": "انتقال به آرشیو", "archive-all": "انتقال همه به آرشیو", "archive-board": "انتقال برد به آرشیو", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "انتقال کارت به آرشیو", "archive-list": "انتقال لیست به آرشیو", "archive-swimlane": "انتقال مسیر به آرشیو", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "نوع اعتبارسنجی پیشفرض", "duplicate-board": "برد تکراری", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "وضعیت", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "تمام کاربران", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "فعال", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/fi.i18n.json b/imports/i18n/data/fi.i18n.json index 4e11a001f..fd4ede8ea 100644 --- a/imports/i18n/data/fi.i18n.json +++ b/imports/i18n/data/fi.i18n.json @@ -125,6 +125,7 @@ "archive": "Siirrä Arkistoon", "archive-all": "Siirrä kaikki Arkistoon", "archive-board": "Siirrä taulu Arkistoon", + "archive-board-confirm": "Oletko varma että haluat arkistoida tämän taulun?", "archive-card": "Siirrä kortti Arkistoon", "archive-list": "Siirrä lista Arkistoon", "archive-swimlane": "Siirrä uimarata Arkistoon", @@ -896,6 +897,7 @@ "oidc-button-text": "Muokkaa OIDC kirjautumispainikkeen tekstiä", "default-authentication-method": "Oletuskirjautumistapa", "duplicate-board": "Tee kaksoiskappale taulusta", + "duplicate-board-confirm": "Oletko varma että haluat monistaa tämän taulun?", "org-number": "Organisaatioiden määrä on:", "team-number": "Tiimien määrä on:", "people-number": "Ihmisten määrä on:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Piilota kaikki tarkistuslistan kohdat", "support": "Tuki", "supportPopup-title": "Tuki", + "accessibility": "Saavutettavuus", "accessibility-page-enabled": "Saavutettavuus sivu käytössä", + "accessibility-info-not-added-yet": "Saavutettavuus tietoja ei ole lisätty vielä", "accessibility-title": "Saavutettavuus otsikko", - "accessibility-content": "Saavutettavuus sisältö" + "accessibility-content": "Saavutettavuus sisältö", + "accounts-lockout-settings": "Raaka voima suojausasetukset", + "accounts-lockout-info": "Nämä asetukset määrittävät, miten kirjautumisyritykset suojataan raaka voima hyökkäyksiltä.", + "accounts-lockout-known-users": "Tunnettujen käyttäjien asetukset (oikea käyttäjätunnus, väärä salasana)", + "accounts-lockout-unknown-users": "Tuntemattomien käyttäjien asetukset (olematon käyttäjätunnus)", + "accounts-lockout-failures-before": "Epäonnistumiset ennen lukitusta", + "accounts-lockout-period": "Lukituksen kesto (sekuntia)", + "accounts-lockout-failure-window": "Virheikkuna (sekuntia)", + "accounts-lockout-settings-updated": "Raaka voima suojausasetukset on päivitetty", + "accounts-lockout-locked-users": "Lukitut käyttäjät", + "accounts-lockout-locked-users-info": "Käyttäjät jotka ovat tällä hetkellä lukittuina ulos liian monen epäonnistuneen kirjautumisyrityksen vuoksi", + "accounts-lockout-no-locked-users": "Lukittuja käyttäjiä ei ole tällä hetkellä", + "accounts-lockout-failed-attempts": "Epäonnistuneet yritykset", + "accounts-lockout-remaining-time": "Jäljellä oleva aika", + "accounts-lockout-user-unlocked": "Käyttäjän lukitus on avattu onnistuneesti", + "accounts-lockout-confirm-unlock": "Haluatko varmasti avata tämän käyttäjän lukituksen?", + "accounts-lockout-confirm-unlock-all": "Haluatko varmasti avata kaikkien lukittujen käyttäjien lukituksen?", + "accounts-lockout-show-locked-users": "Näytä vain lukitut käyttäjät", + "accounts-lockout-user-locked": "Käyttäjä on lukittu", + "accounts-lockout-click-to-unlock": "Napsauta avataksesi tämän käyttäjän lukituksen", + "accounts-lockout-status": "Tilanne", + "admin-people-filter-show": "Näytä:", + "admin-people-filter-all": "Kaikki käyttäjät", + "admin-people-filter-locked": "Vain lukitut käyttäjät", + "admin-people-filter-active": "Aktiivinen", + "admin-people-filter-inactive": "Ei aktiivinen", + "admin-people-active-status": "Aktiivisuus tila", + "admin-people-user-active": "Käyttäjä on aktiivinen - napsauttamalla ei-aktiiviseksi", + "admin-people-user-inactive": "Käyttäjä ei ole aktiivinen - napsauta aktivoidaksesi", + "accounts-lockout-all-users-unlocked": "Kaikki lukitut käyttäjät on avattu", + "accounts-lockout-unlock-all": "Avaa lukitus kaikista" } diff --git a/imports/i18n/data/fr-CH.i18n.json b/imports/i18n/data/fr-CH.i18n.json index d7595cf07..52611475e 100644 --- a/imports/i18n/data/fr-CH.i18n.json +++ b/imports/i18n/data/fr-CH.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/fr-FR.i18n.json b/imports/i18n/data/fr-FR.i18n.json index 3737dfa6a..0ac85174b 100644 --- a/imports/i18n/data/fr-FR.i18n.json +++ b/imports/i18n/data/fr-FR.i18n.json @@ -125,6 +125,7 @@ "archive": "Archiver", "archive-all": "Tout archiver", "archive-board": "Archiver le tableau", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Archiver la carte", "archive-list": "Archiver la liste", "archive-swimlane": "Archiver le couloir", @@ -896,6 +897,7 @@ "oidc-button-text": "Personnaliser le texte du bouton OIDC", "default-authentication-method": "Méthode d'authentification par défaut", "duplicate-board": "Dupliquer le tableau", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Le nombre d'organisations est de :", "team-number": "Le nombre d'équipes est de :", "people-number": "Le nombre d'utilisateurs est de :", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Statut", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Tous les utilisateurs", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Actif", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/fr.i18n.json b/imports/i18n/data/fr.i18n.json index 9cf32fbbf..4c8a84494 100644 --- a/imports/i18n/data/fr.i18n.json +++ b/imports/i18n/data/fr.i18n.json @@ -125,6 +125,7 @@ "archive": "Archiver", "archive-all": "Tout archiver", "archive-board": "Archiver le tableau", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Archiver la carte", "archive-list": "Archiver la liste", "archive-swimlane": "Archiver le couloir", @@ -896,6 +897,7 @@ "oidc-button-text": "Personnaliser le texte du bouton OIDC", "default-authentication-method": "Méthode d'authentification par défaut", "duplicate-board": "Dupliquer le tableau", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Le nombre d'organisations est de :", "team-number": "Le nombre d'équipes est de :", "people-number": "Le nombre d'utilisateurs est de :", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Cacher tous les éléments de la check-list", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Page d'accessibilité activée", - "accessibility-title": "Sujet d'accessibilité", - "accessibility-content": "Contenu d'accessibilité" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Contenu d'accessibilité", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Statut", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Tous les utilisateurs", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Actif", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/fy-NL.i18n.json b/imports/i18n/data/fy-NL.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/fy-NL.i18n.json +++ b/imports/i18n/data/fy-NL.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/fy.i18n.json b/imports/i18n/data/fy.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/fy.i18n.json +++ b/imports/i18n/data/fy.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/gl-ES.i18n.json b/imports/i18n/data/gl-ES.i18n.json index f2cd7a910..13e3207c6 100644 --- a/imports/i18n/data/gl-ES.i18n.json +++ b/imports/i18n/data/gl-ES.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/gl.i18n.json b/imports/i18n/data/gl.i18n.json index 9dfe8894e..cccfdf87e 100644 --- a/imports/i18n/data/gl.i18n.json +++ b/imports/i18n/data/gl.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/gu-IN.i18n.json b/imports/i18n/data/gu-IN.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/gu-IN.i18n.json +++ b/imports/i18n/data/gu-IN.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/he-IL.i18n.json b/imports/i18n/data/he-IL.i18n.json index 126686818..fcaf9ea26 100644 --- a/imports/i18n/data/he-IL.i18n.json +++ b/imports/i18n/data/he-IL.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/he.i18n.json b/imports/i18n/data/he.i18n.json index 3273295d4..11826497e 100644 --- a/imports/i18n/data/he.i18n.json +++ b/imports/i18n/data/he.i18n.json @@ -125,6 +125,7 @@ "archive": "העברה לארכיון", "archive-all": "אחסן הכל בארכיון", "archive-board": "העברת הלוח לארכיון", + "archive-board-confirm": "להעביר את הלוח הזה לארכיון?", "archive-card": "העברת הכרטיס לארכיון", "archive-list": "העברת הרשימה לארכיון", "archive-swimlane": "העברת מסלול לארכיון", @@ -896,6 +897,7 @@ "oidc-button-text": "עריכת הטקסט על כפתור ה־OIDC", "default-authentication-method": "שיטת אימות כבררת מחדל", "duplicate-board": "שכפול לוח", + "duplicate-board-confirm": "לשכפל את הלוח הזה?", "org-number": "מספר הארגונים הוא:", "team-number": "מספר הצוותים הוא:", "people-number": "מספר האנשים הוא:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "הסתרת כל הפריטים ברשימת המטלות", "support": "תמיכה", "supportPopup-title": "תמיכה", + "accessibility": "נגישות", "accessibility-page-enabled": "עמוד הנגישות הופעל", - "accessibility-title": "נושא נגישות", - "accessibility-content": "תוכן נגישות" + "accessibility-info-not-added-yet": "פרטי הנגישות לא נוספו עדיין", + "accessibility-title": "כותרת נגישות", + "accessibility-content": "תוכן נגישות", + "accounts-lockout-settings": "הגדרות הגנה מפני כוח ברוטאלי", + "accounts-lockout-info": "ההגדרות האלו שולטות באופן שבו ניסיונות כניסה מוגנים מפני מתקפות כוח ברוטאלי.", + "accounts-lockout-known-users": "הגדרות למשתמשים ידועים (שם משתמש נכון, סיסמה שגויה)", + "accounts-lockout-unknown-users": "הגדרות למשתמשים לא ידועים (שמות משתמשים שאינם קיימים)", + "accounts-lockout-failures-before": "כשלונות לפני חסימה", + "accounts-lockout-period": "משך חסימה (שניות)", + "accounts-lockout-failure-window": "חלון כשלון (שניות)", + "accounts-lockout-settings-updated": "הגדרות ההגנה מפני כוח ברוטאלי עודכנו", + "accounts-lockout-locked-users": "משתמשים נעולים", + "accounts-lockout-locked-users-info": "משתמשים שנחסמו עקב ריבוי ניסיונות כניסה כושלים", + "accounts-lockout-no-locked-users": "אין משתמשים נעולים כרגע", + "accounts-lockout-failed-attempts": "ניסיונות כושלים", + "accounts-lockout-remaining-time": "זמן שנותר", + "accounts-lockout-user-unlocked": "חסימת המשתמש הוסרה בהצלחה", + "accounts-lockout-confirm-unlock": "להסיר את חסימת המשתמש הזה?", + "accounts-lockout-confirm-unlock-all": "להסיר את החסימה של כל המשתמשים החסומים?", + "accounts-lockout-show-locked-users": "להציג משתמשים חסומים בלבד", + "accounts-lockout-user-locked": "המשתמש חסום", + "accounts-lockout-click-to-unlock": "לחיצה תסיר את חסימת המשתמש", + "accounts-lockout-status": "מצב", + "admin-people-filter-show": "להציג:", + "admin-people-filter-all": "כל המשתמשים", + "admin-people-filter-locked": "משתמשים חסומים בלבד", + "admin-people-filter-active": "פעיל", + "admin-people-filter-inactive": "לא פעיל", + "admin-people-active-status": "מצב פעילות", + "admin-people-user-active": "משתמש פעיל - לחיצה תשבית", + "admin-people-user-inactive": "משתמש לא פעיל - לחיצה תפעיל", + "accounts-lockout-all-users-unlocked": "כל המשתמשים החסומים שוחררו", + "accounts-lockout-unlock-all": "להסיר חסימה מעל כולם" } diff --git a/imports/i18n/data/hi-IN.i18n.json b/imports/i18n/data/hi-IN.i18n.json index 4e08ed540..104b53bb4 100644 --- a/imports/i18n/data/hi-IN.i18n.json +++ b/imports/i18n/data/hi-IN.i18n.json @@ -125,6 +125,7 @@ "archive": "संग्रह में ले जाएं", "archive-all": "सभी को संग्रह में ले जाएं", "archive-board": "संग्रह करने के लिए बोर्ड ले जाएँ", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "कार्ड को संग्रह में ले जाएं", "archive-list": "सूची को संग्रह में ले जाएं", "archive-swimlane": "संग्रह करने के लिए स्विमलेन ले जाएँ", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "संगठनों की संख्या है: ", "team-number": "दल - टीमों की संख्या है: ", "people-number": "व्यक्तियों की संख्या है: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "सभी चेकलिस्ट आइटम छुपाएं", "support": "समर्थन या सहायता", "supportPopup-title": "समर्थन या सहायता", + "accessibility": "Accessibility", "accessibility-page-enabled": "अभिगम्यता पृष्ठ सक्षम किया गया", - "accessibility-title": " सुलभता विषय", - "accessibility-content": "सुलभता सामग्री" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "सुलभता सामग्री", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/hi.i18n.json b/imports/i18n/data/hi.i18n.json index f6e2a64a3..e7d86f559 100644 --- a/imports/i18n/data/hi.i18n.json +++ b/imports/i18n/data/hi.i18n.json @@ -125,6 +125,7 @@ "archive": "संग्रह में ले जाएं", "archive-all": "सभी को संग्रह में ले जाएं", "archive-board": "संग्रह करने के लिए बोर्ड ले जाएँ", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "कार्ड को संग्रह में ले जाएं", "archive-list": "सूची को संग्रह में ले जाएं", "archive-swimlane": "संग्रह करने के लिए स्विमलेन ले जाएँ", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "संगठनों की संख्या है:", "team-number": "टीमों की संख्या है:", "people-number": "लोगों की संख्या है:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "सभी चेकलिस्ट आइटम छिपाएं", "support": "सहायता", "supportPopup-title": "सहायता", + "accessibility": "Accessibility", "accessibility-page-enabled": "अभिगम्यता पृष्ठ सक्षम किया गया", - "accessibility-title": "एक्सेसिबिलिटी टॉपिक", - "accessibility-content": "अभिगम्यता सामग्री" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "अभिगम्यता सामग्री", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/hr.i18n.json b/imports/i18n/data/hr.i18n.json index 06cfc183e..cbef507e3 100644 --- a/imports/i18n/data/hr.i18n.json +++ b/imports/i18n/data/hr.i18n.json @@ -125,6 +125,7 @@ "archive": "Preseli u arhivu", "archive-all": "Preseli sve u arhivu", "archive-board": "Preseli ploču u arhivu", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Preseli karticu u arhivu", "archive-list": "Preseli listu u arhivu", "archive-swimlane": "Preseli traku u arhivu", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/hu.i18n.json b/imports/i18n/data/hu.i18n.json index f128893be..711be3b18 100644 --- a/imports/i18n/data/hu.i18n.json +++ b/imports/i18n/data/hu.i18n.json @@ -125,6 +125,7 @@ "archive": "Mozgasd az archívumba", "archive-all": "Mindet archiváld", "archive-board": "Archiváld a Táblát", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Archiváld a Kártyát", "archive-list": "Archiváld a Listát", "archive-swimlane": "Archiváld az Úszósávot", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Alapértelmezett hitelesítési mód", "duplicate-board": "Tábla duplikálása", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Állapot", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Minden felhasználó", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktív", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/hy.i18n.json b/imports/i18n/data/hy.i18n.json index 801a30eaa..7c093f9f8 100644 --- a/imports/i18n/data/hy.i18n.json +++ b/imports/i18n/data/hy.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/id.i18n.json b/imports/i18n/data/id.i18n.json index 7be0542bf..bbcbf6ce2 100644 --- a/imports/i18n/data/id.i18n.json +++ b/imports/i18n/data/id.i18n.json @@ -125,6 +125,7 @@ "archive": "Pindahkan ke Arsip", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplikat Papan", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Nomor organisasi adalah", "team-number": "Nomor team adalah", "people-number": "Banyak orang adalah", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktif", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ig.i18n.json b/imports/i18n/data/ig.i18n.json index 22476d20d..2e962e97a 100644 --- a/imports/i18n/data/ig.i18n.json +++ b/imports/i18n/data/ig.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/it.i18n.json b/imports/i18n/data/it.i18n.json index b2e922d94..ee7c38c7b 100644 --- a/imports/i18n/data/it.i18n.json +++ b/imports/i18n/data/it.i18n.json @@ -49,8 +49,8 @@ "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-changedListTitle": "lista rinominata in ", + "activity-customfield-created": "creato campo personalizzato/a %s ", "activity-excluded": "escluso %s da %s", "activity-imported": "importato %s in %s da %s", "activity-imported-board": "importato %s da %s", @@ -86,12 +86,12 @@ "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": "Imposta larghezze", + "set-list-width": "Imposta larghezze", + "set-list-width-value": "Imposta larghezza min & max (in pixel)", + "list-width-error-message": "La larghezza della lista deve essere un numero maggiore di 100", + "keyboard-shortcuts-enabled": "Scorciatoie da tastiera abilitate. Clicca per disabilitarle.", + "keyboard-shortcuts-disabled": "Scorciatoie da tastiera disabilitate. Clicca per abilitarle.", "setSwimlaneHeightPopup-title": "Impostare l'altezza della corsia", "set-swimlane-height": "Impostare l'altezza della corsia", "set-swimlane-height-value": "Altezza della corsia (in pixel)", @@ -125,6 +125,7 @@ "archive": "Sposta nell'archivio", "archive-all": "Sposta tutto nell'archivio", "archive-board": "Sposta la bacheca nell'archivio", + "archive-board-confirm": "Sei sicuro di voler spostare questa bacheca nell'archivio?", "archive-card": "Sposta scheda nell'archivio", "archive-list": "Sposta lista nell'archivio", "archive-swimlane": "Sposta swimlane nell'archivio", @@ -266,9 +267,9 @@ "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", + "click-to-enable-auto-width": "Larghezza lista automatica disabilitata. Fai clic per abilitarla.", + "click-to-disable-auto-width": "Larghezza automatica della lista abilitata. Clicca per disabilitarla.", + "auto-list-width": "Larghezza lista automatica ", "clipboard": "Appunti o trascinamento", "close": "Chiudi", "close-board": "Chiudi bacheca", @@ -300,7 +301,7 @@ "color-white": "bianco", "color-yellow": "giallo", "unset-color": "Non impostato", - "comments": "Comments", + "comments": "Commenti", "comment": "Commenta", "comment-placeholder": "Scrivi un commento...", "comment-only": "Solo commenti", @@ -383,7 +384,7 @@ "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-vertical-scrollbars": "Abilita le barre di scorrimento verticali", "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", @@ -451,7 +452,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", + "show-activities": "Mostra Attività", "headerBarCreateBoardPopup-title": "Crea bacheca", "home": "Home", "import": "Importa", @@ -580,14 +581,14 @@ "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-add-self": "Aggiungi te stesso alla scheda corrente", "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-filter-my-assigned-cards": "Filtro le carte assegnate", "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 +611,7 @@ "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-assignees": "Alterna gli assegnatari da 1-9 per la scheda (in base all'ordine di aggiunta alla bacheca).", "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", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Metodo di autenticazione predefinito", "duplicate-board": "Duplica bacheca", + "duplicate-board-confirm": "Sei sicuro di voler duplicare questa bacheca?", "org-number": "Il numero di organizzazioni è:", "team-number": "Il numero di squadre è:", "people-number": "Il numero di persone è:", @@ -966,7 +968,7 @@ "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", + "hide-finished-checklist": "Nascondi la lista di controllo completata", "task": "Compito", "create-task": "Crea compito", "ok": "OK", @@ -1120,8 +1122,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-activities-of-all-boards": "Non mostrare le attività della bacheca su tutte le bacheche", + "now-activities-of-all-boards-are-hidden": "Ora tutte le attività di tutte le bacheche sono nascoste", "move-swimlane": "Sposta swimlane", "moveSwimlanePopup-title": "Sposta swimlane", "custom-field-stringtemplate": "String Template", @@ -1204,10 +1206,10 @@ "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": "Ogni riga di testo diventa uno degli elementi della lista di controllo", + "newLineNewItem": "Una riga di testo = un elemento della lista di controllo", + "newlineBecomesNewChecklistItemOriginOrder": "Ogni riga di testo diventa uno degli elementi della lista di controllo, ordine originale", + "originOrder": "ordine originale", "copyChecklist": "Copia checklist", "copyChecklistPopup-title": "Copia checklist", "card-show-lists": "Card Show Lists", @@ -1257,16 +1259,48 @@ "text": "Testo", "translation-text": "Testo della traduzione", "show-subtasks-field": "Mostra campo delle sottoattività", - "show-week-of-year": "Show week of year (ISO 8601)", + "show-week-of-year": "Mostra la settimana dell'anno (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", + "import-board-zip": "Aggiungi il file .zip contenente i file JSON della bacheca, i nomi bacheca delle sottodirectory con gli allegati", "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" + "uncollapse": "Non collassare", + "hideCheckedChecklistItems": "Nascondi gli elementi della lista di controllo selezionati", + "hideAllChecklistItems": "Nascondi gli elementi della lista di controllo", + "support": "Supporto", + "supportPopup-title": "Supporto", + "accessibility": "Accessibilità", + "accessibility-page-enabled": "Pagina accessibilità abilitata", + "accessibility-info-not-added-yet": "Le informazioni sull'accessibilità non sono ancora state aggiunte ", + "accessibility-title": "Titolo di accessibilità", + "accessibility-content": "Contenuti di accessibilità", + "accounts-lockout-settings": "Impostazioni di protezione dalla forza bruta", + "accounts-lockout-info": "Queste impostazioni controllano il modo in cui i tentativi di accesso vengono protetti dagli attacchi di forza bruta.", + "accounts-lockout-known-users": "Impostazioni per utenti noti (nome utente corretto, password errata)", + "accounts-lockout-unknown-users": "Impostazioni per utenti sconosciuti (nome utente inesistente)", + "accounts-lockout-failures-before": "Fallimenti prima del blocco", + "accounts-lockout-period": "Periodo di blocco (secondi)", + "accounts-lockout-failure-window": "Finestra di errore (secondi)", + "accounts-lockout-settings-updated": "Le impostazioni di protezione dalla forza bruta sono state aggiornate", + "accounts-lockout-locked-users": "Utenti bloccati", + "accounts-lockout-locked-users-info": "Utenti attualmente bloccati a causa di troppi tentativi di accesso non riusciti ", + "accounts-lockout-no-locked-users": "Al momento non ci sono utenti bloccati", + "accounts-lockout-failed-attempts": "Tentativi Falliti", + "accounts-lockout-remaining-time": "Tempo Rimanente", + "accounts-lockout-user-unlocked": "L'utente è stato sbloccato con successo", + "accounts-lockout-confirm-unlock": "Sei sicuro di voler sbloccare questo utente?", + "accounts-lockout-confirm-unlock-all": "Vuoi davvero sbloccare tutti gli utenti bloccati?", + "accounts-lockout-show-locked-users": "Mostra solo gli utenti bloccati", + "accounts-lockout-user-locked": "L'utente è bloccato", + "accounts-lockout-click-to-unlock": "Clicca per sbloccare questo utente", + "accounts-lockout-status": "Stato", + "admin-people-filter-show": "Mostra:", + "admin-people-filter-all": "Tutti gli utenti", + "admin-people-filter-locked": "Solo utenti bloccati", + "admin-people-filter-active": "Attivo", + "admin-people-filter-inactive": "Non Attivo", + "admin-people-active-status": "Status Attivo", + "admin-people-user-active": "L'utente è attivo - clicca per disattivarlo", + "admin-people-user-inactive": "L'utente è inattivo: clicca per attivarlo", + "accounts-lockout-all-users-unlocked": "Tutti gli utenti bloccati sono stati sbloccati", + "accounts-lockout-unlock-all": "Sblocca Tutti" } diff --git a/imports/i18n/data/ja-HI.i18n.json b/imports/i18n/data/ja-HI.i18n.json index 60edd6d3f..d896f34a8 100644 --- a/imports/i18n/data/ja-HI.i18n.json +++ b/imports/i18n/data/ja-HI.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "組織数:", "team-number": "チーム数: ", "people-number": "人数:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "すべてのチェックリスト項目を非表示", "support": "サポート", "supportPopup-title": "サポート", + "accessibility": "アクセシビリティ", "accessibility-page-enabled": "アクセシビリティページが有効", - "accessibility-title": "アクセシビリティトピック", - "accessibility-content": "アクセシビリティコンテンツ" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "アクセシビリティコンテンツ", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "ロックアウト期間(秒)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "ロックされたユーザ", + "accounts-lockout-locked-users-info": "ログイン失敗回数が多すぎるため、現在ロックアウトされているユーザ", + "accounts-lockout-no-locked-users": "現在ロックされているユーザはいません", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "ユーザのロック解除に成功しました。", + "accounts-lockout-confirm-unlock": "このユーザのロックを解除してもよろしいですか?", + "accounts-lockout-confirm-unlock-all": "ロックされているすべてのユーザのロックを解除してもよろしいですか?", + "accounts-lockout-show-locked-users": "ロックされたユーザのみを表示", + "accounts-lockout-user-locked": "ユーザはロックされています", + "accounts-lockout-click-to-unlock": "クリックしてこのユーザのロックを解除してください。", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "ロックされたユーザのみ", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "ロックされているすべてのユーザのロックが解除されました。", + "accounts-lockout-unlock-all": "すべてロック解除" } diff --git a/imports/i18n/data/ja.i18n.json b/imports/i18n/data/ja.i18n.json index bf2161a68..380dd6949 100644 --- a/imports/i18n/data/ja.i18n.json +++ b/imports/i18n/data/ja.i18n.json @@ -125,6 +125,7 @@ "archive": "アーカイブする", "archive-all": "すべてアーカイブする", "archive-board": "ボードをアーカイブする", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "カードをアーカイブする", "archive-list": "リストをアーカイブする", "archive-swimlane": "スイムレーンをアーカイブする", @@ -896,6 +897,7 @@ "oidc-button-text": "OIDC ボタンのテキストをカスタマイズ", "default-authentication-method": "デフォルトの認証方式", "duplicate-board": "ボードの複製", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "組織数:", "team-number": "チーム数: ", "people-number": "人数:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "すべてのチェックリスト項目を非表示", "support": "サポート", "supportPopup-title": "サポート", + "accessibility": "アクセシビリティ", "accessibility-page-enabled": "アクセシビリティページが有効", - "accessibility-title": "アクセシビリティトピック", - "accessibility-content": "アクセシビリティコンテンツ" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "アクセシビリティコンテンツ", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "ロックアウト期間(秒)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "ロックされたユーザ", + "accounts-lockout-locked-users-info": "ログイン失敗回数が多すぎるため、現在ロックアウトされているユーザ", + "accounts-lockout-no-locked-users": "現在ロックされているユーザはいません", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "ユーザのロック解除に成功しました。", + "accounts-lockout-confirm-unlock": "このユーザのロックを解除してもよろしいですか?", + "accounts-lockout-confirm-unlock-all": "ロックされているすべてのユーザのロックを解除してもよろしいですか?", + "accounts-lockout-show-locked-users": "ロックされたユーザのみを表示", + "accounts-lockout-user-locked": "ユーザはロックされています", + "accounts-lockout-click-to-unlock": "クリックしてこのユーザのロックを解除してください。", + "accounts-lockout-status": "ステータス", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "全ユーザー", + "admin-people-filter-locked": "ロックされたユーザのみ", + "admin-people-filter-active": "有効状態", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "ロックされているすべてのユーザのロックが解除されました。", + "accounts-lockout-unlock-all": "すべてロック解除" } diff --git a/imports/i18n/data/ka.i18n.json b/imports/i18n/data/ka.i18n.json index a77558487..1b6667a16 100644 --- a/imports/i18n/data/ka.i18n.json +++ b/imports/i18n/data/ka.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "აქტიური", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/km.i18n.json b/imports/i18n/data/km.i18n.json index 85b7fe364..e68ecef57 100644 --- a/imports/i18n/data/km.i18n.json +++ b/imports/i18n/data/km.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ko-KR.i18n.json b/imports/i18n/data/ko-KR.i18n.json index f8aae6451..b2db6f5d1 100644 --- a/imports/i18n/data/ko-KR.i18n.json +++ b/imports/i18n/data/ko-KR.i18n.json @@ -49,7 +49,7 @@ "activity-archived": "%s moved to Archive", "activity-attached": "attached %s to %s", "activity-created": "created %s", - "activity-changedListTitle": "renamed list to %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 +86,12 @@ "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": "목록 너비는 100보다 큰 정수여야 합니다", + "keyboard-shortcuts-enabled": "키보드 단축키가 활성화 되었습니다. 클릭하여 비활성화 하세요.", + "keyboard-shortcuts-disabled": "키보드 단축키가 비활성화 되었습니다. 클릭하여 활성화 하세요.", "setSwimlaneHeightPopup-title": "Swimlane 높이 설정", "set-swimlane-height": "Swimlane 높이 설정", "set-swimlane-height-value": "Swimlane 높이 (픽셀)", @@ -116,7 +116,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", @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -266,9 +267,9 @@ "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", + "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 +301,7 @@ "color-white": "white", "color-yellow": "yellow", "unset-color": "Unset", - "comments": "Comments", + "comments": "댓글", "comment": "Comment", "comment-placeholder": "Write Comment", "comment-only": "Comment only", @@ -383,7 +384,7 @@ "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-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 +452,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", + "show-activities": "활동 내역 표시", "headerBarCreateBoardPopup-title": "Create Board", "home": "Home", "import": "Import", @@ -580,14 +581,14 @@ "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-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": "Filter my assigned 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 +611,7 @@ "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-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", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "조직의 갯수:", "team-number": "팀의 갯수:", "people-number": "사람의 수는:", @@ -966,7 +968,7 @@ "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", + "hide-finished-checklist": "종료된 확인목록 숨기기", "task": "Task", "create-task": "Create Task", "ok": "OK", @@ -974,7 +976,7 @@ "teams": "Teams", "displayName": "Display Name", "shortName": "Short Name", - "autoAddUsersWithDomainName": "Automatically add users with the domain name", + "autoAddUsersWithDomainName": "도메인 이름으로 사용자 자동 추가", "website": "Website", "person": "Person", "my-cards": "My Cards", @@ -1120,8 +1122,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-activities-of-all-boards": "모든 보드에서 보드 활동내역 보이지 않음", + "now-activities-of-all-boards-are-hidden": "이제 모든 보드의 모든 활동내역들은 숨겨졌습니다", "move-swimlane": "Move Swimlane", "moveSwimlanePopup-title": "Move Swimlane", "custom-field-stringtemplate": "String Template", @@ -1129,7 +1131,7 @@ "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", + "creator-on-minicard": "미니카드 생성자", "filesReportTitle": "Files Report", "reports": "Reports", "rulesReportTitle": "Rules Report", @@ -1204,10 +1206,10 @@ "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": "각 텍스트의 줄은 확인목록 항목 중 하나가 됩니다", + "newLineNewItem": "텍스트 한 줄 = 확인목록 항목 한 개", + "newlineBecomesNewChecklistItemOriginOrder": "각 텍스트의 줄은 원래 순서대로, 확인목록 항목 중 하나가 됩니다.", + "originOrder": "원래 순서", "copyChecklist": "Copy Checklist", "copyChecklistPopup-title": "Copy Checklist", "card-show-lists": "Card Show Lists", @@ -1257,16 +1259,48 @@ "text": "Text", "translation-text": "번역 문구", "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", + "show-week-of-year": "연중 주 표시 (ISO 8601)", + "convert-to-markdown": "마크다운으로 변환", + "import-board-zip": "보드 JSON 파일과 첨부 파일이 있는 보드 이름 하위 디렉토리가 들어있는 .zip 파일을 추가합니다.", "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" + "uncollapse": "펴기", + "hideCheckedChecklistItems": "확인된 확인목록 항목 숨기기", + "hideAllChecklistItems": "모든 확인목록 항목 숨기기", + "support": "지원", + "supportPopup-title": "지원", + "accessibility": "Accessibility", + "accessibility-page-enabled": "접근성 페이지 활성화됨", + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "접근성 내용", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ko.i18n.json b/imports/i18n/data/ko.i18n.json index b87872f87..b5f2409db 100644 --- a/imports/i18n/data/ko.i18n.json +++ b/imports/i18n/data/ko.i18n.json @@ -125,6 +125,7 @@ "archive": "보관으로 이동", "archive-all": "모두 저장소로 이동", "archive-board": "게시판을 저장소로 이동", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "카드를 저장소로 이동", "archive-list": "목록을 저장소로 이동", "archive-swimlane": "swimlane 을 저장소로 이동", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "보드 복사", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "조직의 수:", "team-number": "팀의 수:", "people-number": "인원 수:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/lt.i18n.json b/imports/i18n/data/lt.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/lt.i18n.json +++ b/imports/i18n/data/lt.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/lv.i18n.json b/imports/i18n/data/lv.i18n.json index 650821321..1b22f4075 100644 --- a/imports/i18n/data/lv.i18n.json +++ b/imports/i18n/data/lv.i18n.json @@ -125,6 +125,7 @@ "archive": "Pārvietot uz arhīvu", "archive-all": "Pārvietot visu uz arhīvu", "archive-board": "Pārvietot dēli uz arhīvu", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Pārvietot kartiņu uz arhīvu", "archive-list": "Pārvietot sarakstu uz arhīvu", "archive-swimlane": "Pārvietot joslu uz arhīvu", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Noklusētā autentifikācijas metode", "duplicate-board": "Dublēt dēli", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Statuss", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktīvs", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/mk.i18n.json b/imports/i18n/data/mk.i18n.json index 1dc8bd784..dc9b82e6a 100644 --- a/imports/i18n/data/mk.i18n.json +++ b/imports/i18n/data/mk.i18n.json @@ -125,6 +125,7 @@ "archive": "Премести во Архива", "archive-all": "Премести всички во Архива", "archive-board": "Премести Таблото во Архива", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Премести Картата во Архива", "archive-list": "Премести Списъка во Архива", "archive-swimlane": "Премести Коридора во Архива", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Активен", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/mn.i18n.json b/imports/i18n/data/mn.i18n.json index ce9e320da..5f34ea2c9 100644 --- a/imports/i18n/data/mn.i18n.json +++ b/imports/i18n/data/mn.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ms-MY.i18n.json b/imports/i18n/data/ms-MY.i18n.json index 487628b10..df6f32ff1 100644 --- a/imports/i18n/data/ms-MY.i18n.json +++ b/imports/i18n/data/ms-MY.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Semua Pengguna", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ms.i18n.json b/imports/i18n/data/ms.i18n.json index 26ff502f0..d5662915a 100644 --- a/imports/i18n/data/ms.i18n.json +++ b/imports/i18n/data/ms.i18n.json @@ -125,6 +125,7 @@ "archive": "Pindah ke arkib", "archive-all": "Pindah Semua ke arkib", "archive-board": "Pindah Papan ke arkib", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Pindah Kad ke arkib", "archive-list": "Pindah senarai ke arkib", "archive-swimlane": "Pindah aliran renang ke arkib", @@ -896,6 +897,7 @@ "oidc-button-text": "Ubahsuai teks pada butang OIDC", "default-authentication-method": "Kaedah Pengesahan lalai", "duplicate-board": "Pendua Papan", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktif", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/nb.i18n.json b/imports/i18n/data/nb.i18n.json index e65a1a5df..849fe55d3 100644 --- a/imports/i18n/data/nb.i18n.json +++ b/imports/i18n/data/nb.i18n.json @@ -125,6 +125,7 @@ "archive": "Flytt til Arkiv", "archive-all": "Flytt alt til Arkiv", "archive-board": "Flytt Tavle til Arkiv", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Flytt Kort til Arkiv", "archive-list": "Flytt Liste til Arkiv", "archive-swimlane": "Flytt Svømmebane til Arkiv", @@ -896,6 +897,7 @@ "oidc-button-text": "Tilpass OIDC knappens tekst", "default-authentication-method": "Standard autentiseringsmetode", "duplicate-board": "Dupliser tavle", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Alle Brukere", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktiv", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/nl-NL.i18n.json b/imports/i18n/data/nl-NL.i18n.json index 8d31397ed..46768479a 100644 --- a/imports/i18n/data/nl-NL.i18n.json +++ b/imports/i18n/data/nl-NL.i18n.json @@ -125,6 +125,7 @@ "archive": "Verplaats naar Archief", "archive-all": "Verplaats Alles naar Archief", "archive-board": "Verplaats Bord naar Archief", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Verplaats Kaart naar Archief", "archive-list": "Verplaats Lijst naar Archief", "archive-swimlane": "Verplaats Swimlane naar Archief", @@ -896,6 +897,7 @@ "oidc-button-text": "Pas de OIDC-button tekst aan.", "default-authentication-method": "Standaard Authenticatiemethode", "duplicate-board": "Dupliceer Bord", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Alle gebruikers", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Actief", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/nl.i18n.json b/imports/i18n/data/nl.i18n.json index b3a46543a..78cea1160 100644 --- a/imports/i18n/data/nl.i18n.json +++ b/imports/i18n/data/nl.i18n.json @@ -125,6 +125,7 @@ "archive": "Verplaats naar Archief", "archive-all": "Verplaats Alles naar Archief", "archive-board": "Verplaats Bord naar Archief", + "archive-board-confirm": "Weet je zeker dat je dit bord wilt archiveren?", "archive-card": "Verplaats Kaart naar Archief", "archive-list": "Verplaats Lijst naar Archief", "archive-swimlane": "Verplaats Swimlane naar Archief", @@ -896,6 +897,7 @@ "oidc-button-text": "Pas de OIDC-button tekst aan.", "default-authentication-method": "Standaard Authenticatiemethode", "duplicate-board": "Dupliceer Bord", + "duplicate-board-confirm": "Weet je zeker dat je dit bord wilt dupliceren?", "org-number": "Het aantal organisaties is:", "team-number": "Het aantal teams is:", "people-number": "Het aantal gebruikers is:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Verberg alle checklist items", "support": "Ondersteuning", "supportPopup-title": "Ondersteuning", + "accessibility": "Toegankelijkheid", "accessibility-page-enabled": "Toegankelijkheidspagina ingeschakeld", - "accessibility-title": "Toegankelijkheid onderwerp", - "accessibility-content": "Toegankelijkheid inhoud" + "accessibility-info-not-added-yet": "Toegankelijkheidsinformatie is nog niet toegevoegd", + "accessibility-title": "Toegankelijkheidstitel", + "accessibility-content": "Toegankelijkheid inhoud", + "accounts-lockout-settings": "Brute Force Beschermingsinstellingen", + "accounts-lockout-info": "Deze instellingen bepalen hoe inlogpogingen worden beschermd tegen brute force aanvallen.", + "accounts-lockout-known-users": "Instellingen voor bekende gebruikers (juiste gebruikersnaam, fout wachtwoord)", + "accounts-lockout-unknown-users": "Instellingen voor onbekende gebruikers (onbekende gebruikersnaam)", + "accounts-lockout-failures-before": "Mislukkingen voor blokkeren", + "accounts-lockout-period": "Blokkade duur (seconden)", + "accounts-lockout-failure-window": "Mislukkingen periode (seconden)", + "accounts-lockout-settings-updated": "Brute Force instellingen zijn bijgewerkt", + "accounts-lockout-locked-users": "Geblokkeerde Gebruikers", + "accounts-lockout-locked-users-info": "Geblokkeerde gebruikers door te veel mislukte inlogpogingen", + "accounts-lockout-no-locked-users": "Er zijn momenteel geen geblokkeerde gebruikers", + "accounts-lockout-failed-attempts": "Mislukte Pogingen", + "accounts-lockout-remaining-time": "Resterende Tijd", + "accounts-lockout-user-unlocked": "Gebruiker is succesvol ge-deblokkeerd", + "accounts-lockout-confirm-unlock": "Weet je zeker dat je deze gebruiker wilt deblokkeren?", + "accounts-lockout-confirm-unlock-all": "Weet je zeker dat je alle geblokkeerde gebruikers wilt deblokkeren?", + "accounts-lockout-show-locked-users": "Toon alleen geblokkeerde gebruikers", + "accounts-lockout-user-locked": "Gebruiker is geblokkeerd", + "accounts-lockout-click-to-unlock": "Klik om deze gebruiker te deblokkeren", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Toon:", + "admin-people-filter-all": "Alle gebruikers", + "admin-people-filter-locked": "Alleen Geblokkeerde Gebruikers", + "admin-people-filter-active": "Actief", + "admin-people-filter-inactive": "Niet Actief", + "admin-people-active-status": "Status Actief", + "admin-people-user-active": "Gebruiker is actief - klik om te deactiveren", + "admin-people-user-inactive": "Gebruiker is inactief - klik om te activeren", + "accounts-lockout-all-users-unlocked": "Alle geblokkeerde gebruikers zijn ge-deblokkeerd", + "accounts-lockout-unlock-all": "Deblokkeer Alles" } diff --git a/imports/i18n/data/oc.i18n.json b/imports/i18n/data/oc.i18n.json index cedf7a7d2..6ef5cc578 100644 --- a/imports/i18n/data/oc.i18n.json +++ b/imports/i18n/data/oc.i18n.json @@ -125,6 +125,7 @@ "archive": "Desplaçar cap a Archius", "archive-all": "Archivar tot", "archive-board": "Archivar lo tablèu", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Archivar la carta", "archive-list": "Archivar la tièra", "archive-swimlane": "Archivar lo corredor", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Avtivat", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/or_IN.i18n.json b/imports/i18n/data/or_IN.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/or_IN.i18n.json +++ b/imports/i18n/data/or_IN.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/pa.i18n.json b/imports/i18n/data/pa.i18n.json index 821c0ba00..0cf02e502 100644 --- a/imports/i18n/data/pa.i18n.json +++ b/imports/i18n/data/pa.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/pl-PL.i18n.json b/imports/i18n/data/pl-PL.i18n.json index 68bae41a4..75ec604c7 100644 --- a/imports/i18n/data/pl-PL.i18n.json +++ b/imports/i18n/data/pl-PL.i18n.json @@ -125,6 +125,7 @@ "archive": "Zarchiwizuj", "archive-all": "Przenieś wszystko do Archiwum", "archive-board": "Przenieś tablicę do Archiwum", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Przenieś kartę do Archiwum", "archive-list": "Przenieś listę do Archiwum", "archive-swimlane": "Przenieś ścieżkę do Archiwum", @@ -896,6 +897,7 @@ "oidc-button-text": "Własny tekst przycisku OIDC", "default-authentication-method": "Domyślna metoda logowania", "duplicate-board": "Duplikuj tablicę", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Liczba organizacji:", "team-number": "Liczba zespołów:", "people-number": "Liczba użytkowników to:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Wszystkich użytkowników", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktywny", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/pl.i18n.json b/imports/i18n/data/pl.i18n.json index d14c356fd..e57cf144c 100644 --- a/imports/i18n/data/pl.i18n.json +++ b/imports/i18n/data/pl.i18n.json @@ -125,6 +125,7 @@ "archive": "Zarchiwizuj", "archive-all": "Przenieś wszystko do Archiwum", "archive-board": "Przenieś tablicę do Archiwum", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Przenieś kartę do Archiwum", "archive-list": "Przenieś listę do Archiwum", "archive-swimlane": "Przenieś ścieżkę do Archiwum", @@ -896,6 +897,7 @@ "oidc-button-text": "Własny tekst przycisku OIDC", "default-authentication-method": "Domyślna metoda logowania", "duplicate-board": "Duplikuj tablicę", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Liczba organizacji:", "team-number": "Liczba zespołów:", "people-number": "Liczba użytkowników to:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Wszystkich użytkowników", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktywny", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/pt-BR.i18n.json b/imports/i18n/data/pt-BR.i18n.json index a6b55afc6..fe90a87df 100644 --- a/imports/i18n/data/pt-BR.i18n.json +++ b/imports/i18n/data/pt-BR.i18n.json @@ -125,6 +125,7 @@ "archive": "Mover para Arquivo morto", "archive-all": "Mover Tudo para o Arquivo morto", "archive-board": "Mover Quadro para o Arquivo morto", + "archive-board-confirm": "Você tem certeza que deseja excluir este quadro?", "archive-card": "Mover Cartão para o Arquivo morto", "archive-list": "Mover Lista para o Arquivo morto", "archive-swimlane": "Mover Raia para Arquivo morto", @@ -896,6 +897,7 @@ "oidc-button-text": "Personalizar o texto do botão OIDC", "default-authentication-method": "Método de Autenticação Padrão", "duplicate-board": "Duplicar Quadro", + "duplicate-board-confirm": "Você tem certeza que deseja duplicar este quadro?", "org-number": "O número de organizações é:", "team-number": "O número de times é:", "people-number": "O número de pessoas é:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Esconder todos os itens da lista de verificação", "support": "Suporte", "supportPopup-title": "Suporte", + "accessibility": "Acessibilidade", "accessibility-page-enabled": "Página de acessibilidade habilitada", - "accessibility-title": "Tópico de acessibilidade", - "accessibility-content": "Conteúdo de acessibilidade" + "accessibility-info-not-added-yet": "As informações de acessibilidade ainda não foram adicionadas", + "accessibility-title": "Título de acessibilidade", + "accessibility-content": "Conteúdo de acessibilidade", + "accounts-lockout-settings": "Configurações de proteção contra Brute Force", + "accounts-lockout-info": "Estas configurações controlam como as tentativas de login são protegidas contra ataques de brute force.", + "accounts-lockout-known-users": "Configurações para usuários conhecidos (nome de usuário correto, senha errada)", + "accounts-lockout-unknown-users": "Configurações para usuários desconhecidos (nome de usuário inexistente)", + "accounts-lockout-failures-before": "Falhas antes do bloqueio", + "accounts-lockout-period": "Período de bloqueio (segundos)", + "accounts-lockout-failure-window": "Janela de falha (segundos)", + "accounts-lockout-settings-updated": "As configurações de proteção contra Brute Force foram atualizadas", + "accounts-lockout-locked-users": "Usuários Bloqueados", + "accounts-lockout-locked-users-info": "Usuários atualmente bloqueados devido a muitas tentativas de login malsucedidas", + "accounts-lockout-no-locked-users": "Atualmente não há usuários bloqueados", + "accounts-lockout-failed-attempts": "Tentativas Fracassadas", + "accounts-lockout-remaining-time": "Tempo Restante", + "accounts-lockout-user-unlocked": "Usuário foi desbloqueado com sucesso", + "accounts-lockout-confirm-unlock": "Você tem certeza que deseja desbloquear este usuário?", + "accounts-lockout-confirm-unlock-all": "Você tem certeza que deseja desbloquear todos os usuários bloqueados?", + "accounts-lockout-show-locked-users": "Mostrar apenas usuários bloqueados", + "accounts-lockout-user-locked": "Usuário está bloqueado", + "accounts-lockout-click-to-unlock": "Clique para desbloquear este usuário", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Mostrar:", + "admin-people-filter-all": "Todos os usuários", + "admin-people-filter-locked": "Apenas Usuários Bloqueados", + "admin-people-filter-active": "Ativo", + "admin-people-filter-inactive": "Não Ativo", + "admin-people-active-status": "Status de Ativo", + "admin-people-user-active": "Usuário está ativo - clique para desativá-lo", + "admin-people-user-inactive": "Usuário está inativo - clique para ativá-lo", + "accounts-lockout-all-users-unlocked": "Todos os usuários bloqueados foram desbloqueados", + "accounts-lockout-unlock-all": "Desbloquear Todos" } diff --git a/imports/i18n/data/pt.i18n.json b/imports/i18n/data/pt.i18n.json index 5676223d3..87006b033 100644 --- a/imports/i18n/data/pt.i18n.json +++ b/imports/i18n/data/pt.i18n.json @@ -125,6 +125,7 @@ "archive": "Mover para o Arquivo", "archive-all": "Mover Tudo para o Arquivo", "archive-board": "Mover o Quadro para o Arquivo", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Mover o Cartão para o Arquivo", "archive-list": "Mover a Lista para o Arquivo", "archive-swimlane": "Mover a Pista para o Arquivo", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Método de Autenticação por Omissão", "duplicate-board": "Duplicar Quadro", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Estado", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Todos os Utilizadores", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Activo", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/pt_PT.i18n.json b/imports/i18n/data/pt_PT.i18n.json index 9f6833efb..a19d008d5 100644 --- a/imports/i18n/data/pt_PT.i18n.json +++ b/imports/i18n/data/pt_PT.i18n.json @@ -125,6 +125,7 @@ "archive": "Mover para o Arquivo", "archive-all": "Mover Tudo para o Arquivo", "archive-board": "Mover o Quadro para o Arquivo", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Mover o Cartão para o Arquivo", "archive-list": "Mover a Lista para o Arquivo", "archive-swimlane": "Mover a Pista para o Arquivo", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Método de Autenticação por Omissão", "duplicate-board": "Duplicar Quadro", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Estado", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Todos os Utilizadores", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Activo", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ro-RO.i18n.json b/imports/i18n/data/ro-RO.i18n.json index 53e48ec08..07a7631ce 100644 --- a/imports/i18n/data/ro-RO.i18n.json +++ b/imports/i18n/data/ro-RO.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ro.i18n.json b/imports/i18n/data/ro.i18n.json index a0e0666e1..8c34c7efe 100644 --- a/imports/i18n/data/ro.i18n.json +++ b/imports/i18n/data/ro.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ru-UA.i18n.json b/imports/i18n/data/ru-UA.i18n.json index 78b62d375..365d7c226 100644 --- a/imports/i18n/data/ru-UA.i18n.json +++ b/imports/i18n/data/ru-UA.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Статус", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Все пользователи", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Действующий", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ru.i18n.json b/imports/i18n/data/ru.i18n.json index 252ddb13d..2358d97d9 100644 --- a/imports/i18n/data/ru.i18n.json +++ b/imports/i18n/data/ru.i18n.json @@ -125,6 +125,7 @@ "archive": "Переместить в архив", "archive-all": "Переместить всё в архив", "archive-board": "Переместить доску в архив", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Переместить карточку в архив", "archive-list": "Переместить список в архив", "archive-swimlane": "Переместить дорожку в архив", @@ -896,6 +897,7 @@ "oidc-button-text": "Изменить текст кнопки OIDC", "default-authentication-method": "Способ авторизации по умолчанию", "duplicate-board": "Клонировать доску", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Количество организаций:", "team-number": "Количество команд:", "people-number": "Количество человек:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Статус", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Все пользователи", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Действующий", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/sk.i18n.json b/imports/i18n/data/sk.i18n.json index 16ca630a6..b10c5a6c1 100644 --- a/imports/i18n/data/sk.i18n.json +++ b/imports/i18n/data/sk.i18n.json @@ -125,6 +125,7 @@ "archive": "Archivovať", "archive-all": "Archivovať všetko", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplikovať nástenku", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/sl.i18n.json b/imports/i18n/data/sl.i18n.json index cc39b709f..d05e5555a 100644 --- a/imports/i18n/data/sl.i18n.json +++ b/imports/i18n/data/sl.i18n.json @@ -125,6 +125,7 @@ "archive": "premaknjena v arhiv", "archive-all": "Premakni vse v arhiv", "archive-board": "Arhiviraj tablo", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Arhiviraj kartico", "archive-list": "Arhiviraj seznam", "archive-swimlane": "Arhiviraj plavalno stezo", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Privzeta metoda avtentikacije", "duplicate-board": "Dupliciraj tablo", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktivno", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/sr.i18n.json b/imports/i18n/data/sr.i18n.json index 031c021e7..5a8535981 100644 --- a/imports/i18n/data/sr.i18n.json +++ b/imports/i18n/data/sr.i18n.json @@ -125,6 +125,7 @@ "archive": "Премести у архиву", "archive-all": "Премести све у архиву", "archive-board": "Премести пословну књигу у архиву", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Премести картицу са задатком у архиву", "archive-list": "Премести деоницу у архиву", "archive-swimlane": "Премести стазу у архиву", @@ -896,6 +897,7 @@ "oidc-button-text": "Измени OIDC текст на дугмету", "default-authentication-method": "Уобичајени метод за утврђивање идентитета", "duplicate-board": "Умножи пословну књигу у још један примерак", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Број предузећа је:", "team-number": "Број тимова је:", "people-number": "Број сарадника је:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Стање", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Недовршени послови сарадника", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "На окупу", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/sv.i18n.json b/imports/i18n/data/sv.i18n.json index c43ed08f8..3e3e27b72 100644 --- a/imports/i18n/data/sv.i18n.json +++ b/imports/i18n/data/sv.i18n.json @@ -125,6 +125,7 @@ "archive": "Flytta till Arkiv", "archive-all": "Flytta Alla till Arkiv", "archive-board": "Flytta Tavla till Arkiv", + "archive-board-confirm": " Är du säker på att du vill arkivera den här tavlan?", "archive-card": "Flytta kort till arkiv", "archive-list": "Flytta Lista till Arkiv", "archive-swimlane": "Flytta simbana till arkiv", @@ -896,6 +897,7 @@ "oidc-button-text": "Anpassa OIDC knappens text", "default-authentication-method": "Standard autentiseringsmetod", "duplicate-board": "Duplicera tavla", + "duplicate-board-confirm": " Är du säker på att du vill duplicera den här tavlan?", "org-number": "Antalet organisationer är:", "team-number": "Antalet team är:", "people-number": "Antalet personer är:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Dölj alla objekt i checklistan", "support": "Hjälp", "supportPopup-title": "Hjälp", + "accessibility": " Tillgänglighet", "accessibility-page-enabled": "Tillgänglighetssida aktiverad", - "accessibility-title": "Tillgänglighetsämne", - "accessibility-content": "Tillgänglighetsinnehåll" + "accessibility-info-not-added-yet": " Tillgänglighetsinformation har inte lagts till ännu", + "accessibility-title": " Tillgänglighetstitel", + "accessibility-content": "Tillgänglighetsinnehåll", + "accounts-lockout-settings": " Inställningar för brute force-skydd", + "accounts-lockout-info": " Dessa inställningar styr hur inloggningsförsök skyddas mot brute force-attacker.", + "accounts-lockout-known-users": " Inställningar för kända användare (korrekt användarnamn, fel lösenord)", + "accounts-lockout-unknown-users": " Inställningar för okända användare (obefintligt användarnamn)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": " Utelåsningsperiod (sekunder)", + "accounts-lockout-failure-window": " Tidsperiod för felräkning (sekunder)", + "accounts-lockout-settings-updated": " Inställningar för brute force-skydd har uppdaterats", + "accounts-lockout-locked-users": " Låsta användare", + "accounts-lockout-locked-users-info": " Användare som är låsta efter för många felaktiga inloggningsförsök", + "accounts-lockout-no-locked-users": " Det finns för närvarande inga låsta användare", + "accounts-lockout-failed-attempts": "Misslyckade försök", + "accounts-lockout-remaining-time": "Återstående tid", + "accounts-lockout-user-unlocked": "Användaren har låsts upp", + "accounts-lockout-confirm-unlock": "Är du säker på att du vill låsa upp den här användaren?", + "accounts-lockout-confirm-unlock-all": "Är du säker på att du vill låsa upp alla låsta användare?", + "accounts-lockout-show-locked-users": "Visa endast låsta användare", + "accounts-lockout-user-locked": "Användaren är låst", + "accounts-lockout-click-to-unlock": "Klicka för att låsa upp den här användaren", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Visa:", + "admin-people-filter-all": "Alla användare", + "admin-people-filter-locked": "Endast låsta användare", + "admin-people-filter-active": "Aktiv", + "admin-people-filter-inactive": "Inte aktiv", + "admin-people-active-status": "Aktiv status", + "admin-people-user-active": "Användaren är aktiv – klicka för att inaktivera", + "admin-people-user-inactive": "Användaren är inaktiv – klicka för att aktivera", + "accounts-lockout-all-users-unlocked": "Alla låsta användare har låsts upp", + "accounts-lockout-unlock-all": "Lås upp alla" } diff --git a/imports/i18n/data/sw.i18n.json b/imports/i18n/data/sw.i18n.json index ea7cbdf34..ee35615e1 100644 --- a/imports/i18n/data/sw.i18n.json +++ b/imports/i18n/data/sw.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ta.i18n.json b/imports/i18n/data/ta.i18n.json index fc2eda7ca..1a6446da5 100644 --- a/imports/i18n/data/ta.i18n.json +++ b/imports/i18n/data/ta.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/te-IN.i18n.json b/imports/i18n/data/te-IN.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/te-IN.i18n.json +++ b/imports/i18n/data/te-IN.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/th.i18n.json b/imports/i18n/data/th.i18n.json index 5495c1efe..4b17f8aa8 100644 --- a/imports/i18n/data/th.i18n.json +++ b/imports/i18n/data/th.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/tk_TM.i18n.json b/imports/i18n/data/tk_TM.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/tk_TM.i18n.json +++ b/imports/i18n/data/tk_TM.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/tlh.i18n.json b/imports/i18n/data/tlh.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/tlh.i18n.json +++ b/imports/i18n/data/tlh.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/tr.i18n.json b/imports/i18n/data/tr.i18n.json index 97e148dee..2b0a88738 100644 --- a/imports/i18n/data/tr.i18n.json +++ b/imports/i18n/data/tr.i18n.json @@ -125,6 +125,7 @@ "archive": "Arşive Taşı", "archive-all": "Hepsini Arşive Taşı", "archive-board": "Panoyu Arşive Taşı", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Kartı Arşive Taşı", "archive-list": "Listeyi Arşive Taşı", "archive-swimlane": "Kulvarı Arşive Taşı", @@ -896,6 +897,7 @@ "oidc-button-text": "OIDC Buton metnini özelleştirin", "default-authentication-method": "Varsayılan Kimlik Doğrulama Yöntemi", "duplicate-board": "Panoyu Çoğalt", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Durum", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Tüm Kullanıcılar", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Aktif", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ug.i18n.json b/imports/i18n/data/ug.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/ug.i18n.json +++ b/imports/i18n/data/ug.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/uk-UA.i18n.json b/imports/i18n/data/uk-UA.i18n.json index 8f94712ff..1c4f65a80 100644 --- a/imports/i18n/data/uk-UA.i18n.json +++ b/imports/i18n/data/uk-UA.i18n.json @@ -125,6 +125,7 @@ "archive": "Перенести до архіву", "archive-all": "Перенести все до архіву", "archive-board": "Перенести дошку до архіву", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Перенести картку до архіву", "archive-list": "Перенести список до архіву", "archive-swimlane": "Перенести доріжку до архіву", @@ -896,6 +897,7 @@ "oidc-button-text": "Налаштувати текст кнопки OIDC", "default-authentication-method": "Стандартний метод автентифікації", "duplicate-board": "Дублювати дошку", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Кількість організацій:", "team-number": "Кількість команд:", "people-number": "Кількість людей:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Приховати всі пункти чек-листа", "support": "Підтримка", "supportPopup-title": "Підтримка", + "accessibility": "Accessibility", "accessibility-page-enabled": "Доступность сторінки ввімкнена", - "accessibility-title": "Доступность теми", - "accessibility-content": "Доступность вмісту" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Доступность вмісту", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Статус", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Усі Користувачі", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Активно", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/uk.i18n.json b/imports/i18n/data/uk.i18n.json index 396f77407..810eb827f 100644 --- a/imports/i18n/data/uk.i18n.json +++ b/imports/i18n/data/uk.i18n.json @@ -125,6 +125,7 @@ "archive": "Перенести до архіву", "archive-all": "Перенести все до архіву", "archive-board": "Перенести дошку до архіву", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Перенести картку до архіву", "archive-list": "Перенести список до архіву", "archive-swimlane": "Перенести доріжку до архіву", @@ -896,6 +897,7 @@ "oidc-button-text": "Налаштувати текст кнопки OIDC", "default-authentication-method": "Стандартний метод автентифікації", "duplicate-board": "Дублювати дошку", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Кількість організацій:", "team-number": "Кількість команд:", "people-number": "Кількість людей:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Приховати всі пункти чек-листа", "support": "Підтримка", "supportPopup-title": "Підтримка", + "accessibility": "Accessibility", "accessibility-page-enabled": "Увімкнено сторінку доступності", - "accessibility-title": "Тема доступності", - "accessibility-content": "Доступність контенту" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Доступність контенту", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Статус", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Усі Користувачі", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Активно", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/uz-AR.i18n.json b/imports/i18n/data/uz-AR.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/uz-AR.i18n.json +++ b/imports/i18n/data/uz-AR.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/uz-LA.i18n.json b/imports/i18n/data/uz-LA.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/uz-LA.i18n.json +++ b/imports/i18n/data/uz-LA.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/uz-UZ.i18n.json b/imports/i18n/data/uz-UZ.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/uz-UZ.i18n.json +++ b/imports/i18n/data/uz-UZ.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/uz.i18n.json b/imports/i18n/data/uz.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/uz.i18n.json +++ b/imports/i18n/data/uz.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ve-CC.i18n.json b/imports/i18n/data/ve-CC.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/ve-CC.i18n.json +++ b/imports/i18n/data/ve-CC.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ve-PP.i18n.json b/imports/i18n/data/ve-PP.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/ve-PP.i18n.json +++ b/imports/i18n/data/ve-PP.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/ve.i18n.json b/imports/i18n/data/ve.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/ve.i18n.json +++ b/imports/i18n/data/ve.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/vi-VN.i18n.json b/imports/i18n/data/vi-VN.i18n.json index f9b4c798e..6aaa88791 100644 --- a/imports/i18n/data/vi-VN.i18n.json +++ b/imports/i18n/data/vi-VN.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "Số tổ chức là:", "team-number": "Số đội là:", "people-number": "Số người là:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/vi.i18n.json b/imports/i18n/data/vi.i18n.json index b13110496..e28758da6 100644 --- a/imports/i18n/data/vi.i18n.json +++ b/imports/i18n/data/vi.i18n.json @@ -125,6 +125,7 @@ "archive": "Di chuyển đến Lưu trữ", "archive-all": "Di chuyển tất cả vào Lưu trữ", "archive-board": "Di chuyển Bảng sang Lưu trữ", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Di chuyển Thẻ vào Lưu trữ", "archive-list": "Di chuyển Danh sách vào Lưu trữ", "archive-swimlane": "Di chuyển Làn ngang vào Lưu trữ", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Phương thức xác thực mặc định", "duplicate-board": "Bảng trùng lặp", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Trạng thái", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "Tất cả người dùng", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Hoạt động", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/vl-SS.i18n.json b/imports/i18n/data/vl-SS.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/vl-SS.i18n.json +++ b/imports/i18n/data/vl-SS.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/vo.i18n.json b/imports/i18n/data/vo.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/vo.i18n.json +++ b/imports/i18n/data/vo.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/wa-RR.i18n.json b/imports/i18n/data/wa-RR.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/wa-RR.i18n.json +++ b/imports/i18n/data/wa-RR.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/wa.i18n.json b/imports/i18n/data/wa.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/wa.i18n.json +++ b/imports/i18n/data/wa.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/wo.i18n.json b/imports/i18n/data/wo.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/wo.i18n.json +++ b/imports/i18n/data/wo.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/wuu-Hans.i18n.json b/imports/i18n/data/wuu-Hans.i18n.json new file mode 100644 index 000000000..55cdb8cb9 --- /dev/null +++ b/imports/i18n/data/wuu-Hans.i18n.json @@ -0,0 +1,1306 @@ +{ + "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-board-confirm": "Are you sure you want to archive this board?", + "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", + "duplicate-board-confirm": "Are you sure you want to duplicate this 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": "Accessibility", + "accessibility-page-enabled": "Accessibility page enabled", + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" +} diff --git a/imports/i18n/data/xh.i18n.json b/imports/i18n/data/xh.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/xh.i18n.json +++ b/imports/i18n/data/xh.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/yi.i18n.json b/imports/i18n/data/yi.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/yi.i18n.json +++ b/imports/i18n/data/yi.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/yo.i18n.json b/imports/i18n/data/yo.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/yo.i18n.json +++ b/imports/i18n/data/yo.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/yue_CN.i18n.json b/imports/i18n/data/yue_CN.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/yue_CN.i18n.json +++ b/imports/i18n/data/yue_CN.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zgh.i18n.json b/imports/i18n/data/zgh.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/zgh.i18n.json +++ b/imports/i18n/data/zgh.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zh-CN.i18n.json b/imports/i18n/data/zh-CN.i18n.json index 238e15892..6b1f33b8d 100644 --- a/imports/i18n/data/zh-CN.i18n.json +++ b/imports/i18n/data/zh-CN.i18n.json @@ -14,7 +14,7 @@ "act-removeChecklistItem": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 清单项 __checklistItem__", "act-checkedItem": "选中看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 的清单项 __checklistItem__", "act-uncheckedItem": "反选看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 的清单项 __checklistItem__", - "act-completeChecklist": "完成检查列表 __checklist__ 卡片 __card__ 列表 __list__ 泳道 __swimlane__ 看板 __board__", + "act-completeChecklist": "完成清单 __checklist__ 卡片 __card__ 列表 __list__ 泳道 __swimlane__ 看板 __board__", "act-uncompleteChecklist": "看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 未完成", "act-addComment": "对看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 发表了评论: __comment__", "act-editComment": "编辑卡片中的评论:看板__board__中的泳道__swimlane__中的列表__list__中的评论__comment__", @@ -86,12 +86,12 @@ "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": "列表宽度必须为大于100的整数", + "keyboard-shortcuts-enabled": "已启用键盘快捷键。点选已停用。", + "keyboard-shortcuts-disabled": "已停用键盘快捷键。点选已启用。", "setSwimlaneHeightPopup-title": "设置泳道高度", "set-swimlane-height": "设置泳道高度", "set-swimlane-height-value": "泳道高度(px)", @@ -125,6 +125,7 @@ "archive": "归档", "archive-all": "全部归档", "archive-board": "将看板归档", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "将卡片归档", "archive-list": "将列表归档", "archive-swimlane": "将泳道归档", @@ -266,9 +267,9 @@ "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", + "click-to-enable-auto-width": "已停用自动列表宽度。点选已启用。", + "click-to-disable-auto-width": "已启用自动列表宽度。点选已停用。", + "auto-list-width": "自动列表宽度", "clipboard": "剪贴板或者拖放文件", "close": "关闭", "close-board": "关闭看板", @@ -383,7 +384,7 @@ "email-sent": "邮件已发送", "email-verifyEmail-subject": "在 __siteName__ 验证您的邮件地址", "email-verifyEmail-text": "尊敬的 __user__,\n\n点击下面的链接,验证您的邮件地址:\n\n__url__\n\n谢谢。", - "enable-vertical-scrollbars": "Enable vertical scrollbars", + "enable-vertical-scrollbars": "启用垂直滚动条", "enable-wip-limit": "启用最大任务数限制", "error-board-doesNotExist": "该看板不存在", "error-board-notAdmin": "需要成为管理员才能执行此操作", @@ -580,7 +581,7 @@ "select-board": "选择看板", "set-wip-limit-value": "设置此列表中的最大任务数", "setWipLimitPopup-title": "设置最大任务数", - "shortcut-add-self": "Add yourself to current card", + "shortcut-add-self": "将您新增至目前的卡片", "shortcut-assign-self": "指派当前卡片给自己", "shortcut-autocomplete-emoji": "表情符号自动补全", "shortcut-autocomplete-members": "自动补全成员", @@ -610,7 +611,7 @@ "has-spenttime-cards": "耗时卡", "time": "时间", "title": "标题", - "toggle-assignees": "Toggle assignees 1-9 for card (By order of addition to board).", + "toggle-assignees": "切换卡片的代理人 1-9(按加入看板的顺序)。", "toggle-labels": "切换卡片标签1-9,多选添加标签1-9", "remove-labels-multiselect": "多选移除标签1-9", "tracking": "跟踪", @@ -896,6 +897,7 @@ "oidc-button-text": "自定义 OIDC 按钮文本", "default-authentication-method": "默认认证方式", "duplicate-board": "复制看板", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "组织数量为:", "team-number": "团队数量为:", "people-number": "人数是:", @@ -1257,16 +1259,48 @@ "text": "文本", "translation-text": "翻译文本", "show-subtasks-field": "显示子任务字段", - "show-week-of-year": "Show week of year (ISO 8601)", + "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", + "import-board-zip": "新增包含看板 JSON文件与帶有附件的看板名称子目录的 .zip文件", "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" + "hideAllChecklistItems": "隐藏所有待办清单项目", + "support": "支持", + "supportPopup-title": "支持", + "accessibility": "Accessibility", + "accessibility-page-enabled": "已启用无障碍页面", + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "无障碍内容", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "状态", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "所有用户", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "活跃", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zh-GB.i18n.json b/imports/i18n/data/zh-GB.i18n.json index 8c1e2a4a8..7df0bc80e 100644 --- a/imports/i18n/data/zh-GB.i18n.json +++ b/imports/i18n/data/zh-GB.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zh-HK.i18n.json b/imports/i18n/data/zh-HK.i18n.json index 22a0cb1e5..f1b5553ee 100644 --- a/imports/i18n/data/zh-HK.i18n.json +++ b/imports/i18n/data/zh-HK.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zh-Hans.i18n.json b/imports/i18n/data/zh-Hans.i18n.json index ccc880855..81790d683 100644 --- a/imports/i18n/data/zh-Hans.i18n.json +++ b/imports/i18n/data/zh-Hans.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zh-Hant.i18n.json b/imports/i18n/data/zh-Hant.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/zh-Hant.i18n.json +++ b/imports/i18n/data/zh-Hant.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zh-TW.i18n.json b/imports/i18n/data/zh-TW.i18n.json index 79ac8f358..dc07b6660 100644 --- a/imports/i18n/data/zh-TW.i18n.json +++ b/imports/i18n/data/zh-TW.i18n.json @@ -125,6 +125,7 @@ "archive": "封存", "archive-all": "全部封存", "archive-board": "將看板封存", + "archive-board-confirm": "您確定要封存此看板嗎?", "archive-card": "將卡片封存", "archive-list": "將清單封存", "archive-swimlane": "將泳道流程圖封存", @@ -896,6 +897,7 @@ "oidc-button-text": "自定義 OIDC 按鈕文字", "default-authentication-method": "預設認證方式", "duplicate-board": "複製看板", + "duplicate-board-confirm": "您確定您想要再製此看板嗎?", "org-number": "組織數為:", "team-number": "團隊數為:", "people-number": "人數為:", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "隱藏所有待辦清單項目", "support": "支援", "supportPopup-title": "支援", + "accessibility": "無障礙", "accessibility-page-enabled": "已啟用無障礙頁面", - "accessibility-title": "無障礙主題", - "accessibility-content": "無障礙內容" + "accessibility-info-not-added-yet": "尚未新增無障礙資訊", + "accessibility-title": "無障礙標題", + "accessibility-content": "無障礙內容", + "accounts-lockout-settings": "暴力攻擊防護設定", + "accounts-lockout-info": "這些設定可以控制如何防止遭受暴力攻擊登入。", + "accounts-lockout-known-users": "已知使用者的設定(正確的使用者名稱、錯誤的密碼)", + "accounts-lockout-unknown-users": "未知使用者的設定(不存在的使用者名稱)", + "accounts-lockout-failures-before": "鎖定前的失敗次數", + "accounts-lockout-period": "鎖定週期(秒)", + "accounts-lockout-failure-window": "失敗時間窗(秒)", + "accounts-lockout-settings-updated": "暴力攻擊防護設定已更新", + "accounts-lockout-locked-users": "已鎖定的使用者", + "accounts-lockout-locked-users-info": "使用者目前因嘗試登入失敗次數過多而被鎖定", + "accounts-lockout-no-locked-users": "目前沒有已鎖定的使用者", + "accounts-lockout-failed-attempts": "失敗的嘗試", + "accounts-lockout-remaining-time": "剩餘時間", + "accounts-lockout-user-unlocked": "已成功解鎖使用者", + "accounts-lockout-confirm-unlock": "您確定您要解鎖此使用者嗎?", + "accounts-lockout-confirm-unlock-all": "您確定您要解鎖全部鎖定的使用者嗎?", + "accounts-lockout-show-locked-users": "僅顯示已鎖定的使用者", + "accounts-lockout-user-locked": "使用者已鎖定", + "accounts-lockout-click-to-unlock": "點選以解鎖此使用者", + "accounts-lockout-status": "狀態", + "admin-people-filter-show": "顯示:", + "admin-people-filter-all": "全部使用者", + "admin-people-filter-locked": "僅已鎖定的使用者", + "admin-people-filter-active": "啟用", + "admin-people-filter-inactive": "不活躍", + "admin-people-active-status": "活躍狀態", + "admin-people-user-active": "使用者活躍 -點選以停用", + "admin-people-user-inactive": "使用者不活躍 - 點選以啟用", + "accounts-lockout-all-users-unlocked": "所有鎖定的使用者均已解鎖", + "accounts-lockout-unlock-all": "解鎖全部" } diff --git a/imports/i18n/data/zh.i18n.json b/imports/i18n/data/zh.i18n.json index 44b4a7048..d27185336 100644 --- a/imports/i18n/data/zh.i18n.json +++ b/imports/i18n/data/zh.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zu-ZA.i18n.json b/imports/i18n/data/zu-ZA.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/zu-ZA.i18n.json +++ b/imports/i18n/data/zu-ZA.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/data/zu.i18n.json b/imports/i18n/data/zu.i18n.json index 78b62d375..55cdb8cb9 100644 --- a/imports/i18n/data/zu.i18n.json +++ b/imports/i18n/data/zu.i18n.json @@ -125,6 +125,7 @@ "archive": "Move to Archive", "archive-all": "Move All to Archive", "archive-board": "Move Board to Archive", + "archive-board-confirm": "Are you sure you want to archive this board?", "archive-card": "Move Card to Archive", "archive-list": "Move List to Archive", "archive-swimlane": "Move Swimlane to Archive", @@ -896,6 +897,7 @@ "oidc-button-text": "Customize the OIDC button text", "default-authentication-method": "Default Authentication Method", "duplicate-board": "Duplicate Board", + "duplicate-board-confirm": "Are you sure you want to duplicate this board?", "org-number": "The number of organizations is: ", "team-number": "The number of teams is: ", "people-number": "The number of people is: ", @@ -1266,7 +1268,39 @@ "hideAllChecklistItems": "Hide all checklist items", "support": "Support", "supportPopup-title": "Support", + "accessibility": "Accessibility", "accessibility-page-enabled": "Accessibility page enabled", - "accessibility-title": "Accessibility topic", - "accessibility-content": "Accessibility content" + "accessibility-info-not-added-yet": "Accessibility info has not been added yet", + "accessibility-title": "Accessibility title", + "accessibility-content": "Accessibility content", + "accounts-lockout-settings": "Brute Force Protection Settings", + "accounts-lockout-info": "These settings control how login attempts are protected against brute force attacks.", + "accounts-lockout-known-users": "Settings for known users (correct username, wrong password)", + "accounts-lockout-unknown-users": "Settings for unknown users (non-existent username)", + "accounts-lockout-failures-before": "Failures before lockout", + "accounts-lockout-period": "Lockout period (seconds)", + "accounts-lockout-failure-window": "Failure window (seconds)", + "accounts-lockout-settings-updated": "Brute force protection settings have been updated", + "accounts-lockout-locked-users": "Locked Users", + "accounts-lockout-locked-users-info": "Users currently locked out due to too many failed login attempts", + "accounts-lockout-no-locked-users": "There are currently no locked users", + "accounts-lockout-failed-attempts": "Failed Attempts", + "accounts-lockout-remaining-time": "Remaining Time", + "accounts-lockout-user-unlocked": "User has been unlocked successfully", + "accounts-lockout-confirm-unlock": "Are you sure you want to unlock this user?", + "accounts-lockout-confirm-unlock-all": "Are you sure you want to unlock all locked users?", + "accounts-lockout-show-locked-users": "Show locked users only", + "accounts-lockout-user-locked": "User is locked", + "accounts-lockout-click-to-unlock": "Click to unlock this user", + "accounts-lockout-status": "Status", + "admin-people-filter-show": "Show:", + "admin-people-filter-all": "All Users", + "admin-people-filter-locked": "Locked Users Only", + "admin-people-filter-active": "Active", + "admin-people-filter-inactive": "Not Active", + "admin-people-active-status": "Active Status", + "admin-people-user-active": "User is active - click to deactivate", + "admin-people-user-inactive": "User is inactive - click to activate", + "accounts-lockout-all-users-unlocked": "All locked users have been unlocked", + "accounts-lockout-unlock-all": "Unlock All" } diff --git a/imports/i18n/index.js b/imports/i18n/index.js index 7dc821b29..cc42e80aa 100644 --- a/imports/i18n/index.js +++ b/imports/i18n/index.js @@ -2,16 +2,13 @@ import { TAPi18n } from './tap'; import './accounts'; import './moment'; -export { TAPi18n }; - if (Meteor.isClient) { - (async () => { - await import('./blaze'); - await TAPi18n.init(); - })(); -} else { - (async () => { - await TAPi18n.init(); - })(); + import './blaze'; } +export { TAPi18n }; + +(async () => { + await TAPi18n.init(); +})(); + diff --git a/imports/i18n/languages.js b/imports/i18n/languages.js index 5bb4201c1..3291df95f 100644 --- a/imports/i18n/languages.js +++ b/imports/i18n/languages.js @@ -13,6 +13,13 @@ export default { load: () => import('./data/af_ZA.i18n.json'), rtl: "false", }, + "en_AU": { + code: "en", + tag: "en_AU", + name: "English (Australia)", + load: () => import('./data/en_AU.i18n.json'), + rtl: "false", + }, "en_ZA": { code: "en", tag: "en_ZA", diff --git a/models/boards.js b/models/boards.js index 690063718..f8ed0fb40 100644 --- a/models/boards.js +++ b/models/boards.js @@ -1760,7 +1760,7 @@ if (Meteor.isServer) { ).sort(); }, setAllBoardsHideActivities() { - if (ReactiveCache.getCurrentUser()?.isAdmin) { + if ((ReactiveCache.getCurrentUser() || {}).isAdmin) { Boards.update( { showActivities: true @@ -2001,8 +2001,8 @@ if (Meteor.isServer) { * * @param {string} userId the ID of the user to retrieve the data * @return_type [{_id: string, - title: string}] - */ + * title: string}] + */ JsonRoutes.add('GET', '/api/users/:userId/boards', function(req, res) { try { Authentication.checkLoggedIn(req.userId); @@ -2236,7 +2236,7 @@ if (Meteor.isServer) { }); } }); - + /** * @operation add_board_label * @summary Add a label to a board diff --git a/models/cards.js b/models/cards.js index fedef962f..69a34ad32 100644 --- a/models/cards.js +++ b/models/cards.js @@ -3301,6 +3301,27 @@ if (Meteor.isServer) { }); }); + /** + * @operation get_card_by_id + * @summary Get a Card by Card ID + * + * @param {string} cardId the card ID + * @return_type Cards + */ + JsonRoutes.add( + 'GET', + '/api/cards/:cardId', + function(req, res) { + const paramCardId = req.params.cardId; + card = ReactiveCache.getCard(paramCardId) + Authentication.checkBoardAccess(req.userId, card.boardId); + JsonRoutes.sendResult(res, { + code: 200, + data: card, + }); + }, + ); + /** * @operation get_card * @summary Get a Card @@ -4042,7 +4063,7 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function( * @param {string} cardId the ID of the card * @param {string} customFieldId the ID of the custom field * @param {string} value the new custom field value - * @return_type {_id: string, customFields: object} + * @return_type {_id: string, customFields: [{_id: string, value: object}]} */ JsonRoutes.add( 'POST', diff --git a/models/lists.js b/models/lists.js index c99edf8e7..10504ab58 100644 --- a/models/lists.js +++ b/models/lists.js @@ -600,6 +600,161 @@ if (Meteor.isServer) { } }); + /** + * @operation edit_list + * @summary Edit a List + * + * @description This updates a list on a board. + * You can update the title, color, wipLimit, starred, and collapsed properties. + * + * @param {string} boardId the board ID + * @param {string} listId the ID of the list to update + * @param {string} [title] the new title of the list + * @param {string} [color] the new color of the list + * @param {Object} [wipLimit] the WIP limit configuration + * @param {boolean} [starred] whether the list is starred + * @param {boolean} [collapsed] whether the list is collapsed + * @return_type {_id: string} + */ + JsonRoutes.add('PUT', '/api/boards/:boardId/lists/:listId', function( + req, + res, + ) { + try { + const paramBoardId = req.params.boardId; + const paramListId = req.params.listId; + let updated = false; + Authentication.checkBoardAccess(req.userId, paramBoardId); + + const list = ReactiveCache.getList({ + _id: paramListId, + boardId: paramBoardId, + archived: false, + }); + + if (!list) { + JsonRoutes.sendResult(res, { + code: 404, + data: { error: 'List not found' }, + }); + return; + } + + // Update title if provided + if (req.body.title) { + const newTitle = req.body.title; + Lists.direct.update( + { + _id: paramListId, + boardId: paramBoardId, + archived: false, + }, + { + $set: { + title: newTitle, + }, + }, + ); + updated = true; + } + + // Update color if provided + if (req.body.color) { + const newColor = req.body.color; + Lists.direct.update( + { + _id: paramListId, + boardId: paramBoardId, + archived: false, + }, + { + $set: { + color: newColor, + }, + }, + ); + updated = true; + } + + // Update starred status if provided + if (req.body.hasOwnProperty('starred')) { + const newStarred = req.body.starred; + Lists.direct.update( + { + _id: paramListId, + boardId: paramBoardId, + archived: false, + }, + { + $set: { + starred: newStarred, + }, + }, + ); + updated = true; + } + + // Update collapsed status if provided + if (req.body.hasOwnProperty('collapsed')) { + const newCollapsed = req.body.collapsed; + Lists.direct.update( + { + _id: paramListId, + boardId: paramBoardId, + archived: false, + }, + { + $set: { + collapsed: newCollapsed, + }, + }, + ); + updated = true; + } + + // Update wipLimit if provided + if (req.body.wipLimit) { + const newWipLimit = req.body.wipLimit; + Lists.direct.update( + { + _id: paramListId, + boardId: paramBoardId, + archived: false, + }, + { + $set: { + wipLimit: newWipLimit, + }, + }, + ); + 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: { + _id: paramListId, + }, + }); + } catch (error) { + JsonRoutes.sendResult(res, { + code: 200, + data: error, + }); + } + }); + /** * @operation delete_list * @summary Delete a List diff --git a/models/lockoutSettings.js b/models/lockoutSettings.js new file mode 100644 index 000000000..04bd18cc6 --- /dev/null +++ b/models/lockoutSettings.js @@ -0,0 +1,157 @@ +import { ReactiveCache } from '/imports/reactiveCache'; + +LockoutSettings = new Mongo.Collection('lockoutSettings'); + +LockoutSettings.attachSchema( + new SimpleSchema({ + _id: { + type: String, + }, + value: { + type: Number, + decimal: false, + }, + category: { + type: String, + }, + sort: { + type: Number, + decimal: 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(); + } + }, + }, + }), +); + +LockoutSettings.allow({ + update(userId) { + const user = ReactiveCache.getUser(userId); + return user && user.isAdmin; + }, +}); + +if (Meteor.isServer) { + Meteor.startup(() => { + LockoutSettings._collection.createIndex({ modifiedAt: -1 }); + + // Known users settings + LockoutSettings.upsert( + { _id: 'known-failuresBeforeLockout' }, + { + $setOnInsert: { + value: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE + ? parseInt(process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE, 10) : 3, + category: 'known', + sort: 0, + }, + }, + ); + + LockoutSettings.upsert( + { _id: 'known-lockoutPeriod' }, + { + $setOnInsert: { + value: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD + ? parseInt(process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD, 10) : 60, + category: 'known', + sort: 1, + }, + }, + ); + + LockoutSettings.upsert( + { _id: 'known-failureWindow' }, + { + $setOnInsert: { + value: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW + ? parseInt(process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW, 10) : 15, + category: 'known', + sort: 2, + }, + }, + ); + + // Unknown users settings + const typoVar = process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE; + const correctVar = process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BEFORE; + + LockoutSettings.upsert( + { _id: 'unknown-failuresBeforeLockout' }, + { + $setOnInsert: { + value: (correctVar || typoVar) + ? parseInt(correctVar || typoVar, 10) : 3, + category: 'unknown', + sort: 0, + }, + }, + ); + + LockoutSettings.upsert( + { _id: 'unknown-lockoutPeriod' }, + { + $setOnInsert: { + value: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD + ? parseInt(process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD, 10) : 60, + category: 'unknown', + sort: 1, + }, + }, + ); + + LockoutSettings.upsert( + { _id: 'unknown-failureWindow' }, + { + $setOnInsert: { + value: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW + ? parseInt(process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW, 10) : 15, + category: 'unknown', + sort: 2, + }, + }, + ); + }); +} + +LockoutSettings.helpers({ + getKnownConfig() { + return { + failuresBeforeLockout: LockoutSettings.findOne('known-failuresBeforeLockout')?.value || 3, + lockoutPeriod: LockoutSettings.findOne('known-lockoutPeriod')?.value || 60, + failureWindow: LockoutSettings.findOne('known-failureWindow')?.value || 15 + }; + }, + getUnknownConfig() { + return { + failuresBeforeLockout: LockoutSettings.findOne('unknown-failuresBeforeLockout')?.value || 3, + lockoutPeriod: LockoutSettings.findOne('unknown-lockoutPeriod')?.value || 60, + failureWindow: LockoutSettings.findOne('unknown-failureWindow')?.value || 15 + }; + } +}); + +export default LockoutSettings; diff --git a/models/settings.js b/models/settings.js index ca1184de7..00349c762 100644 --- a/models/settings.js +++ b/models/settings.js @@ -275,22 +275,18 @@ if (Meteor.isServer) { url: FlowRouter.url('sign-up'), }; const lang = author.getLanguage(); -/* - if (process.env.MAIL_SERVICE !== '') { - let transporter = nodemailer.createTransport({ - service: process.env.MAIL_SERVICE, - auth: { - user: process.env.MAIL_SERVICE_USER, - pass: process.env.MAIL_SERVICE_PASSWORD - }, - }) - let info = transporter.sendMail({ + // Use EmailLocalization utility to handle email in the proper language + if (typeof EmailLocalization !== 'undefined') { + EmailLocalization.sendEmail({ to: icode.email, from: Accounts.emailTemplates.from, - subject: TAPi18n.__('email-invite-register-subject', params, lang), - text: TAPi18n.__('email-invite-register-text', params, lang), - }) + subject: 'email-invite-register-subject', + text: 'email-invite-register-text', + params: params, + language: lang + }); } else { + // Fallback if EmailLocalization is not available Email.send({ to: icode.email, from: Accounts.emailTemplates.from, @@ -298,13 +294,6 @@ if (Meteor.isServer) { text: TAPi18n.__('email-invite-register-text', params, lang), }); } -*/ - Email.send({ - to: icode.email, - from: Accounts.emailTemplates.from, - subject: TAPi18n.__('email-invite-register-subject', params, lang), - text: TAPi18n.__('email-invite-register-text', params, lang), - }); } catch (e) { InvitationCodes.remove(_id); throw new Meteor.Error('email-fail', e.message); diff --git a/models/users.js b/models/users.js index 8643fca2b..404a332d8 100644 --- a/models/users.js +++ b/models/users.js @@ -1618,62 +1618,51 @@ if (Meteor.isServer) { subBoard.addMember(user._id); user.addInvite(subBoard._id); } - } + } try { + const fullName = + inviter.profile !== undefined && + inviter.profile.fullname !== undefined + ? inviter.profile.fullname + : ''; + const userFullName = + user.profile !== undefined && user.profile.fullname !== undefined + ? user.profile.fullname + : ''; + const params = { + user: + userFullName != '' + ? userFullName + ' (' + user.username + ' )' + : user.username, + inviter: + fullName != '' + ? fullName + ' (' + inviter.username + ' )' + : inviter.username, + board: board.title, + url: board.absoluteUrl(), + }; + // Get the recipient user's language preference for the email + const lang = user.getLanguage(); - try { - const fullName = - inviter.profile !== undefined && - inviter.profile.fullname !== undefined - ? inviter.profile.fullname - : ''; - const userFullName = - user.profile !== undefined && user.profile.fullname !== undefined - ? user.profile.fullname - : ''; - const params = { - user: - userFullName != '' - ? userFullName + ' (' + user.username + ' )' - : user.username, - inviter: - fullName != '' - ? fullName + ' (' + inviter.username + ' )' - : inviter.username, - board: board.title, - url: board.absoluteUrl(), - }; - const lang = user.getLanguage(); - - /* - if (process.env.MAIL_SERVICE !== '') { - let transporter = nodemailer.createTransport({ - service: process.env.MAIL_SERVICE, - auth: { - user: process.env.MAIL_SERVICE_USER, - pass: process.env.MAIL_SERVICE_PASSWORD - }, - }) - let info = transporter.sendMail({ - to: user.emails[0].address.toLowerCase(), - from: Accounts.emailTemplates.from, - subject: TAPi18n.__('email-invite-subject', params, lang), - text: TAPi18n.__('email-invite-text', params, lang), - }) - } else { - Email.send({ - to: user.emails[0].address.toLowerCase(), - from: Accounts.emailTemplates.from, - subject: TAPi18n.__('email-invite-subject', params, lang), - text: TAPi18n.__('email-invite-text', params, lang), - }); - } -*/ - Email.send({ - to: user.emails[0].address.toLowerCase(), - from: Accounts.emailTemplates.from, - subject: TAPi18n.__('email-invite-subject', params, lang), - text: TAPi18n.__('email-invite-text', params, lang), - }); + // Add code to send invitation with EmailLocalization + if (typeof EmailLocalization !== 'undefined') { + EmailLocalization.sendEmail({ + to: user.emails[0].address, + from: Accounts.emailTemplates.from, + subject: 'email-invite-subject', + text: 'email-invite-text', + params: params, + language: lang, + userId: user._id + }); + } else { + // Fallback if EmailLocalization is not available + Email.send({ + to: user.emails[0].address, + from: Accounts.emailTemplates.from, + subject: TAPi18n.__('email-invite-subject', params, lang), + text: TAPi18n.__('email-invite-text', params, lang), + }); + } } catch (e) { throw new Meteor.Error('email-fail', e.message); } diff --git a/openapi/README.md b/openapi/README.md index e3fb7fd99..718174f00 100644 --- a/openapi/README.md +++ b/openapi/README.md @@ -13,7 +13,7 @@ the REST API of Wekan and exports it under the OpenAPI 2.0 specification ### calling the tool - python3 generate_openapi.py --release v1.65 > ../public/wekan_api.yml + python3 generate_openapi.py --release v7.92 > ../public/api/wekan.yml ## Generating docs Now that we have the OpenAPI, it's easy enough to convert the YAML file into some nice Markdown with diff --git a/openapi/generate_openapi.py b/openapi/generate_openapi.py index 83966f5bf..429d80ae5 100644 --- a/openapi/generate_openapi.py +++ b/openapi/generate_openapi.py @@ -932,47 +932,63 @@ paths: operationId: login summary: Login with REST API consumes: - - application/x-www-form-urlencoded - application/json + - application/x-www-form-urlencoded tags: - Login parameters: - - name: username - in: formData + - name: loginRequest + in: body required: true - description: | - Your username - type: string - - name: password - in: formData - required: true - description: | - Your password - type: string - format: password + description: Login credentials + schema: + type: object + required: + - username + - password + properties: + username: + description: | + Your username + type: string + password: + description: | + Your password + type: string + format: password responses: 200: description: |- Successful authentication schema: - items: - properties: - id: - type: string - token: - type: string - tokenExpires: - type: string + type: object + required: + - id + - token + - tokenExpires + properties: + id: + type: string + description: User ID + token: + type: string + description: | + Authentication token + tokenExpires: + type: string + format: date-time + description: | + Token expiration date 400: description: | Error in authentication schema: - items: - properties: - error: - type: number - reason: - type: string + type: object + properties: + error: + type: string + reason: + type: string default: description: | Error in authentication diff --git a/package-lock.json b/package-lock.json index e95814667..8266a1273 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v7.86.0", + "version": "v7.95.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -128,7 +128,7 @@ "jszip": "^3.10.1", "readable-stream": "^3.6.0", "saxes": "^5.0.1", - "tmp": "^0.2.0", + "tmp": "^0.2.5", "unzipper": "^0.10.11", "uuid": "^8.3.0" } @@ -367,9 +367,9 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -427,6 +427,66 @@ "set-function-length": "^1.1.1" } }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "dependencies": { + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + } + } + }, "chainsaw": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", @@ -623,6 +683,23 @@ "domhandler": "^4.2.0" } }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "dependencies": { + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + } + } + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -705,6 +782,14 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -895,6 +980,15 @@ "hasown": "^2.0.0" } }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -1355,6 +1449,11 @@ "mathjax-full": "^3.2.0" } }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, "mathjax-full": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz", @@ -1382,17 +1481,17 @@ "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.24", + "resolved": "https://registry.npmjs.org/meteor-node-stubs/-/meteor-node-stubs-1.2.24.tgz", + "integrity": "sha512-tw9QzDFVOI5A5CcEw4tTD6CjF+Lk14uzhy2gWH5ImoH4mx4pyPVcha9MmyVur+rEVgpzk+aMG6rs3RxAF9SwiA==", "requires": { + "@meteorjs/crypto-browserify": "^3.12.1", "assert": "^2.1.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", "events": "^3.3.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", @@ -1401,28 +1500,123 @@ "punycode": "^1.4.1", "querystring-es3": "^0.2.1", "readable-stream": "^3.6.2", + "sha.js": "^2.4.12", "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", + "url": "^0.11.4", "util": "^0.12.5", "vm-browserify": "^1.1.2" }, "dependencies": { + "@meteorjs/browserify-sign": { + "version": "4.2.6", + "bundled": true, + "requires": { + "bn.js": "^5.2.1", + "brorand": "^1.1.0", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash-base": "~3.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "readable-stream": { + "version": "2.3.8", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "bundled": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "bundled": true + } + } + } + } + }, + "@meteorjs/create-ecdh": { + "version": "4.0.5", + "bundled": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.2", + "bundled": true + } + } + }, + "@meteorjs/crypto-browserify": { + "version": "3.12.4", + "bundled": true, + "requires": { + "@meteorjs/browserify-sign": "^4.2.3", + "@meteorjs/create-ecdh": "^4.0.4", + "browserify-cipher": "^1.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + } + }, "asn1.js": { - "version": "5.4.1", + "version": "4.10.1", "bundled": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" }, "dependencies": { "bn.js": { - "version": "4.12.0", + "version": "4.12.2", "bundled": true } } @@ -1439,15 +1633,18 @@ } }, "available-typed-arrays": { - "version": "1.0.5", - "bundled": true + "version": "1.0.7", + "bundled": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, "base64-js": { "version": "1.5.1", "bundled": true }, "bn.js": { - "version": "5.2.0", + "version": "5.2.2", "bundled": true }, "brorand": { @@ -1486,32 +1683,12 @@ } }, "browserify-rsa": { - "version": "4.1.0", - "bundled": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.2", + "version": "4.1.1", "bundled": true, "requires": { "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", + "randombytes": "^2.1.0", "safe-buffer": "^5.2.1" - }, - "dependencies": { - "bn.js": { - "version": "5.2.1", - "bundled": true - } } }, "browserify-zlib": { @@ -1538,20 +1715,37 @@ "bundled": true }, "call-bind": { - "version": "1.0.5", + "version": "1.0.8", "bundled": true, "requires": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" } }, - "cipher-base": { + "call-bind-apply-helpers": { + "version": "1.0.2", + "bundled": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { "version": "1.0.4", "bundled": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "cipher-base": { + "version": "1.0.6", + "bundled": true, + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" } }, "console-browserify": { @@ -1562,19 +1756,9 @@ "version": "1.0.0", "bundled": true }, - "create-ecdh": { - "version": "4.0.4", - "bundled": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "bundled": true - } - } + "core-util-is": { + "version": "1.0.3", + "bundled": true }, "create-hash": { "version": "1.2.0", @@ -1599,30 +1783,13 @@ "sha.js": "^2.4.8" } }, - "crypto-browserify": { - "version": "3.12.0", - "bundled": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, "define-data-property": { - "version": "1.1.1", + "version": "1.1.4", "bundled": true, "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" } }, "define-properties": { @@ -1635,7 +1802,7 @@ } }, "des.js": { - "version": "1.0.1", + "version": "1.1.0", "bundled": true, "requires": { "inherits": "^2.0.1", @@ -1652,7 +1819,7 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", + "version": "4.12.2", "bundled": true } } @@ -1661,23 +1828,28 @@ "version": "4.23.0", "bundled": true }, - "elliptic": { - "version": "6.6.1", + "dunder-proto": { + "version": "1.0.1", "bundled": true, "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.1", - "bundled": true - } + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "es-define-property": { + "version": "1.0.1", + "bundled": true + }, + "es-errors": { + "version": "1.3.0", + "bundled": true + }, + "es-object-atoms": { + "version": "1.1.1", + "bundled": true, + "requires": { + "es-errors": "^1.3.0" } }, "events": { @@ -1693,10 +1865,10 @@ } }, "for-each": { - "version": "0.3.3", + "version": "0.3.5", "bundled": true, "requires": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" } }, "function-bind": { @@ -1704,51 +1876,57 @@ "bundled": true }, "get-intrinsic": { - "version": "1.2.2", + "version": "1.3.0", "bundled": true, "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "bundled": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" } }, "gopd": { - "version": "1.0.1", - "bundled": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "has-property-descriptors": { - "version": "1.0.1", - "bundled": true, - "requires": { - "get-intrinsic": "^1.2.2" - } - }, - "has-proto": { - "version": "1.0.1", + "version": "1.2.0", "bundled": true }, + "has-property-descriptors": { + "version": "1.0.2", + "bundled": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, "has-symbols": { - "version": "1.0.3", + "version": "1.1.0", "bundled": true }, "has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", "bundled": true, "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "hash-base": { - "version": "3.1.0", + "version": "3.0.5", "bundled": true, "requires": { "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "safe-buffer": "^5.2.1" } }, "hash.js": { @@ -1760,7 +1938,7 @@ } }, "hasown": { - "version": "2.0.0", + "version": "2.0.2", "bundled": true, "requires": { "function-bind": "^1.1.2" @@ -1788,11 +1966,11 @@ "bundled": true }, "is-arguments": { - "version": "1.1.1", + "version": "1.2.0", "bundled": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" } }, "is-callable": { @@ -1800,10 +1978,13 @@ "bundled": true }, "is-generator-function": { - "version": "1.0.10", + "version": "1.1.0", "bundled": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" } }, "is-nan": { @@ -1814,13 +1995,31 @@ "define-properties": "^1.1.3" } }, - "is-typed-array": { - "version": "1.1.12", + "is-regex": { + "version": "1.2.1", "bundled": true, "requires": { - "which-typed-array": "^1.1.11" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, + "is-typed-array": { + "version": "1.1.15", + "bundled": true, + "requires": { + "which-typed-array": "^1.1.16" + } + }, + "isarray": { + "version": "2.0.5", + "bundled": true + }, + "math-intrinsics": { + "version": "1.1.0", + "bundled": true + }, "md5.js": { "version": "1.3.5", "bundled": true, @@ -1839,7 +2038,7 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", + "version": "4.12.2", "bundled": true } } @@ -1853,15 +2052,15 @@ "bundled": true }, "object-inspect": { - "version": "1.13.1", + "version": "1.13.4", "bundled": true }, "object-is": { - "version": "1.1.5", + "version": "1.1.6", "bundled": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" } }, "object-keys": { @@ -1869,12 +2068,14 @@ "bundled": true }, "object.assign": { - "version": "4.1.4", + "version": "4.1.7", "bundled": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, @@ -1887,14 +2088,15 @@ "bundled": true }, "parse-asn1": { - "version": "5.1.6", + "version": "5.1.7", "bundled": true, "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" } }, "path-browserify": { @@ -1902,20 +2104,56 @@ "bundled": true }, "pbkdf2": { - "version": "3.1.2", + "version": "3.1.3", "bundled": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "dependencies": { + "create-hash": { + "version": "1.1.3", + "bundled": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "hash-base": { + "version": "2.0.2", + "bundled": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "ripemd160": { + "version": "2.0.1", + "bundled": true, + "requires": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + } } }, + "possible-typed-array-names": { + "version": "1.1.0", + "bundled": true + }, "process": { "version": "0.11.10", "bundled": true }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true + }, "public-encrypt": { "version": "4.0.3", "bundled": true, @@ -1929,7 +2167,7 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", + "version": "4.12.2", "bundled": true } } @@ -1939,10 +2177,10 @@ "bundled": true }, "qs": { - "version": "6.11.2", + "version": "6.14.0", "bundled": true, "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" } }, "querystring-es3": { @@ -1985,18 +2223,25 @@ "version": "5.2.1", "bundled": true }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "set-function-length": { - "version": "1.1.1", + "safe-regex-test": { + "version": "1.1.0", "bundled": true, "requires": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + } + }, + "set-function-length": { + "version": "1.2.2", + "bundled": true, + "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.0" + "has-property-descriptors": "^1.0.2" } }, "setimmediate": { @@ -2004,20 +2249,52 @@ "bundled": true }, "sha.js": { - "version": "2.4.11", + "version": "2.4.12", "bundled": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" } }, "side-channel": { - "version": "1.0.4", + "version": "1.1.0", "bundled": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "bundled": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "bundled": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "bundled": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "stream-browserify": { @@ -2052,16 +2329,34 @@ "setimmediate": "^1.0.4" } }, + "to-buffer": { + "version": "1.2.1", + "bundled": true, + "requires": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + } + }, "tty-browserify": { "version": "0.0.1", "bundled": true }, + "typed-array-buffer": { + "version": "1.0.3", + "bundled": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + } + }, "url": { - "version": "0.11.3", + "version": "0.11.4", "bundled": true, "requires": { "punycode": "^1.4.1", - "qs": "^6.11.2" + "qs": "^6.12.3" } }, "util": { @@ -2084,14 +2379,16 @@ "bundled": true }, "which-typed-array": { - "version": "1.1.13", + "version": "1.1.19", "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" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" } }, "xtend": { @@ -2366,6 +2663,11 @@ "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==" }, + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" + }, "precond": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", @@ -2435,9 +2737,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } @@ -2742,9 +3044,26 @@ } }, "tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==" + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==" + }, + "to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "requires": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } }, "token-types": { "version": "4.2.1", @@ -2776,6 +3095,148 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "dependencies": { + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + } + }, + "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" + } + }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "requires": { + "is-callable": "^1.2.7" + } + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "dependencies": { + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + } + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "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" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "requires": { + "which-typed-array": "^1.1.16" + } + }, + "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" + } + }, + "which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + } + } + } + }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", diff --git a/package.json b/package.json index f76dd89d2..38e844583 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v7.86.0", + "version": "v7.95.0", "description": "Open-Source kanban", "private": true, "repository": { @@ -44,7 +44,7 @@ "markdown-it-emoji": "^2.0.0", "markdown-it-mathjax3": "^4.3.2", "meteor-accounts-t9n": "^2.6.0", - "meteor-node-stubs": "https://github.com/wekan/meteor-node-stubs.git", + "meteor-node-stubs": "^1.2.24", "minio": "^7.1.3", "moment": "^2.29.4", "os": "^0.1.2", @@ -53,6 +53,7 @@ "qs": "^6.13.0", "simpl-schema": "^3.4.6", "source-map-support": "^0.5.20", + "to-buffer": "^1.2.1", "uuid": "^8.3.2" } } diff --git a/public/api/wekan.html b/public/api/wekan.html index 879d1898a..aad238f1f 100644 --- a/public/api/wekan.html +++ b/public/api/wekan.html @@ -1524,7 +1524,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <ul class="toc-list-h1"> <li> - <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v7.86">Wekan REST API v7.86</a> + <a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v7.95">Wekan REST API v7.95</a> </li> @@ -1562,11 +1562,66 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <ul class="toc-list-h2"> + <li> + <a href="#get_public_boards" class="toc-h2 toc-link" data-title="get_public_boards">get_public_boards</a> + + </li> + + <li> + <a href="#new_board" class="toc-h2 toc-link" data-title="new_board">new_board</a> + + </li> + + <li> + <a href="#get_board" class="toc-h2 toc-link" data-title="get_board">get_board</a> + + </li> + + <li> + <a href="#delete_board" class="toc-h2 toc-link" data-title="delete_board">delete_board</a> + + </li> + + <li> + <a href="#get_board_attachments" class="toc-h2 toc-link" data-title="get_board_attachments">get_board_attachments</a> + + </li> + <li> <a href="#exportjson" class="toc-h2 toc-link" data-title="exportJson">exportJson</a> </li> + <li> + <a href="#copy_board" class="toc-h2 toc-link" data-title="copy_board">copy_board</a> + + </li> + + <li> + <a href="#add_board_label" class="toc-h2 toc-link" data-title="add_board_label">add_board_label</a> + + </li> + + <li> + <a href="#set_board_member_permission" class="toc-h2 toc-link" data-title="set_board_member_permission">set_board_member_permission</a> + + </li> + + <li> + <a href="#update_board_title" class="toc-h2 toc-link" data-title="update_board_title">update_board_title</a> + + </li> + + <li> + <a href="#get_boards_count" class="toc-h2 toc-link" data-title="get_boards_count">get_boards_count</a> + + </li> + + <li> + <a href="#get_boards_from_user" class="toc-h2 toc-link" data-title="get_boards_from_user">get_boards_from_user</a> + + </li> + </ul> </li> @@ -1713,6 +1768,11 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </li> + <li> + <a href="#get_card_by_id" class="toc-h2 toc-link" data-title="get_card_by_id">get_card_by_id</a> + + </li> + </ul> </li> @@ -1830,6 +1890,11 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </li> + <li> + <a href="#edit_list" class="toc-h2 toc-link" data-title="edit_list">edit_list</a> + + </li> + <li> <a href="#delete_list" class="toc-h2 toc-link" data-title="delete_list">delete_list</a> @@ -1878,6 +1943,31 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <ul class="toc-list-h2"> + <li> + <a href="#tocsboards" class="toc-h2 toc-link" data-title="Boards">Boards</a> + + </li> + + <li> + <a href="#tocsboardslabels" class="toc-h2 toc-link" data-title="BoardsLabels">BoardsLabels</a> + + </li> + + <li> + <a href="#tocsboardsmembers" class="toc-h2 toc-link" data-title="BoardsMembers">BoardsMembers</a> + + </li> + + <li> + <a href="#tocsboardsorgs" class="toc-h2 toc-link" data-title="BoardsOrgs">BoardsOrgs</a> + + </li> + + <li> + <a href="#tocsboardsteams" class="toc-h2 toc-link" data-title="BoardsTeams">BoardsTeams</a> + + </li> + <li> <a href="#tocscardcomments" class="toc-h2 toc-link" data-title="CardComments">CardComments</a> @@ -1963,7 +2053,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc <div class="page-wrapper"> <div class="dark-box"></div> <div class="content"> - <h1 id="wekan-rest-api">Wekan REST API v7.86</h1> + <h1 id="wekan-rest-api">Wekan REST API v7.95</h1> <blockquote> <p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p> </blockquote> @@ -1995,18 +2085,18 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc </blockquote> <pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> curl -X POST /users/login \ - -H <span class="hljs-string">'Content-Type: application/x-www-form-urlencoded'</span> \ + -H <span class="hljs-string">'Content-Type: application/json'</span> \ -H <span class="hljs-string">'Accept: */*'</span> </code></pre> <pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/users/login</span> HTTP/1.1 -<span class="http"><span class="hljs-attribute">Content-Type</span>: application/x-www-form-urlencoded +<span class="http"><span class="hljs-attribute">Content-Type</span>: application/json <span class="hljs-attribute">Accept</span>: */* <span class="undefined"></span></span></code></pre> <pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { - <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'application/x-www-form-urlencoded'</span>, + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'*/*'</span> }; @@ -2028,7 +2118,7 @@ $.ajax({ "password": "pa$$word" }'</span>; <span class="hljs-keyword">const</span> headers = { - <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'application/x-www-form-urlencoded'</span>, + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'*/*'</span> }; @@ -2050,7 +2140,7 @@ fetch(<span class="hljs-string">'/users/login'</span>, <span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> headers = { - <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'application/x-www-form-urlencoded'</span>, + <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'*/*'</span> } @@ -2063,7 +2153,7 @@ p JSON.parse(result) </code></pre> <pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests headers = { - <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'application/x-www-form-urlencoded'</span>, + <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'application/json'</span>, <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'*/*'</span> } @@ -2099,7 +2189,7 @@ System.out.println(response.toString()); <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ - <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/x-www-form-urlencoded"</span>}, + <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"*/*"</span>}, } @@ -2119,6 +2209,11 @@ System.out.println(response.toString()); <blockquote> <p>Body parameter</p> </blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"username"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"password"</span>: <span class="hljs-string">"pa$$word"</span> +} +</code></pre> <pre class="highlight tab tab-yaml"><code><span class="hljs-attr">username:</span> <span class="hljs-string">string</span> <span class="hljs-attr">password:</span> <span class="hljs-string">pa$$word</span> @@ -2139,8 +2234,8 @@ System.out.println(response.toString()); <td>body</td> <td>body</td> <td>object</td> -<td>false</td> -<td>none</td> +<td>true</td> +<td>Login credentials</td> </tr> <tr> <td>» username</td> @@ -2211,23 +2306,23 @@ System.out.println(response.toString()); <tr> <td>» id</td> <td>string</td> -<td>false</td> -<td>none</td> +<td>true</td> <td>none</td> +<td>User ID</td> </tr> <tr> <td>» token</td> <td>string</td> -<td>false</td> -<td>none</td> +<td>true</td> <td>none</td> +<td>Authentication token</td> </tr> <tr> <td>» tokenExpires</td> -<td>string</td> -<td>false</td> -<td>none</td> +<td>string(date-time)</td> +<td>true</td> <td>none</td> +<td>Token expiration date</td> </tr> </tbody> </table> @@ -2245,7 +2340,7 @@ System.out.println(response.toString()); <tbody> <tr> <td>» error</td> -<td>number</td> +<td>string</td> <td>false</td> <td>none</td> <td>none</td> @@ -2550,6 +2645,1199 @@ System.out.println(response.toString()); This operation does not require authentication </aside> <h1 id="wekan-rest-api-boards">Boards</h1> +<h2 id="get_public_boards">get_public_boards</h2> +<p><a id="opIdget_public_boards"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X GET /api/boards \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards</span> HTTP/1.1 + +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); + +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>, + + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.get <span class="hljs-string">'/api/boards'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.get(<span class="hljs-string">'/api/boards'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"GET"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/boards"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>GET /api/boards</code></p> +<p><em>Get all public boards</em></p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>[ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span> + } +] +</code></pre> +<h3 id="get_public_boards-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="get_public_boards-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="new_board">new_board</h2> +<p><a id="opIdnew_board"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X POST /api/boards \ + -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards</span> HTTP/1.1 + +<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json + +</span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'post'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); +<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{ + "title": "string", + "owner": "string", + "isAdmin": true, + "isActive": true, + "isNoComments": true, + "isCommentOnly": true, + "isWorker": true, + "permission": "string", + "color": "string" +}'</span>; +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'POST'</span>, + <span class="hljs-attr">body</span>: inputBody, + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.post <span class="hljs-string">'/api/boards'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.post(<span class="hljs-string">'/api/boards'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"POST"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"POST"</span>, <span class="hljs-string">"/api/boards"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>POST /api/boards</code></p> +<p><em>Create a board</em></p> +<p>This allows to create a board.</p> +<p>The color has to be chosen between <code>belize</code>, <code>nephritis</code>, <code>pomegranate</code>, +<code>pumpkin</code>, <code>wisteria</code>, <code>moderatepink</code>, <code>strongcyan</code>, +<code>limegreen</code>, <code>midnight</code>, <code>dark</code>, <code>relax</code>, <code>corteza</code>:</p> + <img src="https://wekan.github.io/board-colors.png" alt="Wekan logo" /> +<blockquote> +<p>Body parameter</p> +</blockquote> +<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">title:</span> <span class="hljs-string">string</span> +<span class="hljs-attr">owner:</span> <span class="hljs-string">string</span> +<span class="hljs-attr">isAdmin:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">isActive:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">isNoComments:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">isCommentOnly:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">isWorker:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">permission:</span> <span class="hljs-string">string</span> +<span class="hljs-attr">color:</span> <span class="hljs-string">string</span> + +</code></pre> +<h3 id="new_board-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>body</td> +<td>body</td> +<td>object</td> +<td>false</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>body</td> +<td>string</td> +<td>true</td> +<td>the new title of the board</td> +</tr> +<tr> +<td>» owner</td> +<td>body</td> +<td>string</td> +<td>true</td> +<td>"ABCDE12345" <= User ID in Wekan.</td> +</tr> +<tr> +<td>» isAdmin</td> +<td>body</td> +<td>boolean</td> +<td>false</td> +<td>is the owner an admin of the board (default true)</td> +</tr> +<tr> +<td>» isActive</td> +<td>body</td> +<td>boolean</td> +<td>false</td> +<td>is the board active (default true)</td> +</tr> +<tr> +<td>» isNoComments</td> +<td>body</td> +<td>boolean</td> +<td>false</td> +<td>disable comments (default false)</td> +</tr> +<tr> +<td>» isCommentOnly</td> +<td>body</td> +<td>boolean</td> +<td>false</td> +<td>only enable comments (default false)</td> +</tr> +<tr> +<td>» isWorker</td> +<td>body</td> +<td>boolean</td> +<td>false</td> +<td>only move cards, assign himself to card and comment (default false)</td> +</tr> +<tr> +<td>» permission</td> +<td>body</td> +<td>string</td> +<td>false</td> +<td>"private" board <== Set to "public" if you</td> +</tr> +<tr> +<td>» color</td> +<td>body</td> +<td>string</td> +<td>false</td> +<td>the color of the board</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>» owner</strong>: "ABCDE12345" <= User ID in Wekan. +(Not username or email)</p> +<p><strong>» permission</strong>: "private" board <== Set to "public" if you +want public Wekan board</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"defaultSwimlaneId"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="new_board-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="new_board-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» defaultSwimlaneId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="get_board">get_board</h2> +<p><a id="opIdget_board"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X GET /api/boards/{board} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}</span> HTTP/1.1 + +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); + +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards/{board}'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>, + + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.get <span class="hljs-string">'/api/boards/{board}'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.get(<span class="hljs-string">'/api/boards/{board}'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"GET"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/boards/{board}"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>GET /api/boards/{board}</code></p> +<p><em>Get the board with that particular ID</em></p> +<h3 id="get_board-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>board</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the ID of the board to retrieve the data</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the ID of the board to retrieve the data</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"slug"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"archived"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"archivedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"stars"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"labels"</span>: [ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"color"</span>: <span class="hljs-string">"white"</span> + } + ], + <span class="hljs-attr">"members"</span>: [ + { + <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isAdmin"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isNoComments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isCommentOnly"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isWorker"</span>: <span class="hljs-literal">true</span> + } + ], + <span class="hljs-attr">"permission"</span>: <span class="hljs-string">"public"</span>, + <span class="hljs-attr">"orgs"</span>: [ + { + <span class="hljs-attr">"orgId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"orgDisplayName"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span> + } + ], + <span class="hljs-attr">"teams"</span>: [ + { + <span class="hljs-attr">"teamId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"teamDisplayName"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span> + } + ], + <span class="hljs-attr">"color"</span>: <span class="hljs-string">"belize"</span>, + <span class="hljs-attr">"backgroundImageURL"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"allowsCardCounterList"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsBoardMemberList"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"subtasksDefaultBoardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"subtasksDefaultListId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dateSettingsDefaultBoardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dateSettingsDefaultListId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"allowsSubtasks"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsAttachments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsChecklists"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsComments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionTitle"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionText"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionTextOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCoverAttachmentOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsBadgeAttachmentOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCardSortingByNumberOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCardNumber"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsActivities"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsLabels"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCreator"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCreatorOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsAssignee"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsMembers"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsRequestedBy"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCardSortingByNumber"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsShowLists"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsAssignedBy"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsReceivedDate"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsStartDate"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsEndDate"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDueDate"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"presentParentTask"</span>: <span class="hljs-string">"prefix-with-full-path"</span>, + <span class="hljs-attr">"receivedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"startAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dueAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"endAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"spentTime"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"isOvertime"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"type"</span>: <span class="hljs-string">"board"</span>, + <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"showActivities"</span>: <span class="hljs-literal">true</span> +} +</code></pre> +<h3 id="get_board-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td><a href="#schemaboards">Boards</a></td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="delete_board">delete_board</h2> +<p><a id="opIddelete_board"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X DELETE /api/boards/{board} \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">DELETE</span> <span class="hljs-string">/api/boards/{board}</span> HTTP/1.1 + +<span class="undefined"></span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'delete'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); + +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards/{board}'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'DELETE'</span>, + + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.delete <span class="hljs-string">'/api/boards/{board}'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.delete(<span class="hljs-string">'/api/boards/{board}'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"DELETE"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"DELETE"</span>, <span class="hljs-string">"/api/boards/{board}"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>DELETE /api/boards/{board}</code></p> +<p><em>Delete a board</em></p> +<h3 id="delete_board-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>board</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the ID of the board</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the ID of the board</p> +<h3 id="delete_board-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>None</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="get_board_attachments">get_board_attachments</h2> +<p><a id="opIdget_board_attachments"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X GET /api/boards/{board}/attachments \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards/{board}/attachments</span> HTTP/1.1 + +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/attachments'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); + +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards/{board}/attachments'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>, + + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.get <span class="hljs-string">'/api/boards/{board}/attachments'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.get(<span class="hljs-string">'/api/boards/{board}/attachments'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/attachments"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"GET"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/boards/{board}/attachments"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>GET /api/boards/{board}/attachments</code></p> +<p><em>Get the list of attachments of a board</em></p> +<h3 id="get_board_attachments-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>board</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the board ID</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>[ + { + <span class="hljs-attr">"attachmentId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"attachmentName"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"attachmentType"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"url"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"urlDownload"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"swimlaneId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"listId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"cardId"</span>: <span class="hljs-string">"string"</span> + } +] +</code></pre> +<h3 id="get_board_attachments-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="get_board_attachments-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» attachmentId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» attachmentName</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» attachmentType</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» url</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» urlDownload</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» boardId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» swimlaneId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» listId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» cardId</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> <h2 id="exportjson">exportJson</h2> <p><a id="opIdexportJson"></a></p> <blockquote> @@ -2716,6 +4004,1242 @@ for detailed explanations</p> To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> +<h2 id="copy_board">copy_board</h2> +<p><a id="opIdcopy_board"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X POST /api/boards/{board}/copy \ + -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/copy</span> HTTP/1.1 + +<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json + +</span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/copy'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'post'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); +<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{ + "title": "string" +}'</span>; +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards/{board}/copy'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'POST'</span>, + <span class="hljs-attr">body</span>: inputBody, + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.post <span class="hljs-string">'/api/boards/{board}/copy'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.post(<span class="hljs-string">'/api/boards/{board}/copy'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/copy"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"POST"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"POST"</span>, <span class="hljs-string">"/api/boards/{board}/copy"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>POST /api/boards/{board}/copy</code></p> +<p><em>Copy a board to a new one</em></p> +<p>If your are board admin or wekan admin, this copies the +given board to a new one.</p> +<blockquote> +<p>Body parameter</p> +</blockquote> +<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">title:</span> <span class="hljs-string">string</span> + +</code></pre> +<h3 id="copy_board-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>board</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the board</td> +</tr> +<tr> +<td>body</td> +<td>body</td> +<td>object</td> +<td>false</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>body</td> +<td>string</td> +<td>true</td> +<td>the title of the new board (default to old one)</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code><span class="hljs-string">"string"</span> +</code></pre> +<h3 id="copy_board-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>string</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="add_board_label">add_board_label</h2> +<p><a id="opIdadd_board_label"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X PUT /api/boards/{board}/labels \ + -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">PUT</span> <span class="hljs-string">/api/boards/{board}/labels</span> HTTP/1.1 + +<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json + +</span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/labels'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'put'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); +<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{ + "label": "string" +}'</span>; +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards/{board}/labels'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'PUT'</span>, + <span class="hljs-attr">body</span>: inputBody, + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.put <span class="hljs-string">'/api/boards/{board}/labels'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.put(<span class="hljs-string">'/api/boards/{board}/labels'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/labels"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"PUT"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"PUT"</span>, <span class="hljs-string">"/api/boards/{board}/labels"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>PUT /api/boards/{board}/labels</code></p> +<p><em>Add a label to a board</em></p> +<p>If the board doesn't have the name/color label, this function +adds the label to the board.</p> +<blockquote> +<p>Body parameter</p> +</blockquote> +<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">label:</span> <span class="hljs-string">string</span> + +</code></pre> +<h3 id="add_board_label-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>board</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the board</td> +</tr> +<tr> +<td>body</td> +<td>body</td> +<td>object</td> +<td>false</td> +<td>none</td> +</tr> +<tr> +<td>» label</td> +<td>body</td> +<td>string</td> +<td>true</td> +<td>the label value</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code><span class="hljs-string">"string"</span> +</code></pre> +<h3 id="add_board_label-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>string</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="set_board_member_permission">set_board_member_permission</h2> +<p><a id="opIdset_board_member_permission"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X POST /api/boards/{board}/members/{member} \ + -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">POST</span> <span class="hljs-string">/api/boards/{board}/members/{member}</span> HTTP/1.1 + +<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> + +</span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/members/{member}'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'post'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); +<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{ + "isAdmin": true, + "isNoComments": true, + "isCommentOnly": true, + "isWorker": true +}'</span>; +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards/{board}/members/{member}'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'POST'</span>, + <span class="hljs-attr">body</span>: inputBody, + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.post <span class="hljs-string">'/api/boards/{board}/members/{member}'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.post(<span class="hljs-string">'/api/boards/{board}/members/{member}'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/members/{member}"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"POST"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"POST"</span>, <span class="hljs-string">"/api/boards/{board}/members/{member}"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>POST /api/boards/{board}/members/{member}</code></p> +<p><em>Change the permission of a member of a board</em></p> +<blockquote> +<p>Body parameter</p> +</blockquote> +<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">isAdmin:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">isNoComments:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">isCommentOnly:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">isWorker:</span> <span class="hljs-literal">true</span> + +</code></pre> +<h3 id="set_board_member_permission-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>board</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the ID of the board that we are changing</td> +</tr> +<tr> +<td>member</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the ID of the user to change permissions</td> +</tr> +<tr> +<td>body</td> +<td>body</td> +<td>object</td> +<td>false</td> +<td>none</td> +</tr> +<tr> +<td>» isAdmin</td> +<td>body</td> +<td>boolean</td> +<td>true</td> +<td>admin capability</td> +</tr> +<tr> +<td>» isNoComments</td> +<td>body</td> +<td>boolean</td> +<td>true</td> +<td>NoComments capability</td> +</tr> +<tr> +<td>» isCommentOnly</td> +<td>body</td> +<td>boolean</td> +<td>true</td> +<td>CommentsOnly capability</td> +</tr> +<tr> +<td>» isWorker</td> +<td>body</td> +<td>boolean</td> +<td>true</td> +<td>Worker capability</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the ID of the board that we are changing</p> +<p><strong>member</strong>: the ID of the user to change permissions</p> +<h3 id="set_board_member_permission-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>None</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="update_board_title">update_board_title</h2> +<p><a id="opIdupdate_board_title"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X PUT /api/boards/{board}/title \ + -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">PUT</span> <span class="hljs-string">/api/boards/{board}/title</span> HTTP/1.1 + +<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> + +</span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/title'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'put'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); +<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{ + "title": "string" +}'</span>; +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards/{board}/title'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'PUT'</span>, + <span class="hljs-attr">body</span>: inputBody, + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.put <span class="hljs-string">'/api/boards/{board}/title'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.put(<span class="hljs-string">'/api/boards/{board}/title'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/title"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"PUT"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"PUT"</span>, <span class="hljs-string">"/api/boards/{board}/title"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>PUT /api/boards/{board}/title</code></p> +<p><em>Update the title of a board</em></p> +<blockquote> +<p>Body parameter</p> +</blockquote> +<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">title:</span> <span class="hljs-string">string</span> + +</code></pre> +<h3 id="update_board_title-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>board</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the ID of the board to update</td> +</tr> +<tr> +<td>body</td> +<td>body</td> +<td>object</td> +<td>false</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>body</td> +<td>string</td> +<td>true</td> +<td>the new title for the board</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the ID of the board to update</p> +<h3 id="update_board_title-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>None</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="get_boards_count">get_boards_count</h2> +<p><a id="opIdget_boards_count"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X GET /api/boards_count \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/boards_count</span> HTTP/1.1 + +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards_count'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); + +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards_count'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>, + + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.get <span class="hljs-string">'/api/boards_count'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.get(<span class="hljs-string">'/api/boards_count'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards_count"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"GET"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/boards_count"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>GET /api/boards_count</code></p> +<p><em>Get public and private boards count</em></p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"private"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"public"</span>: <span class="hljs-number">0</span> +} +</code></pre> +<h3 id="get_boards_count-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="get_boards_count-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» private</td> +<td>integer</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» public</td> +<td>integer</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> +<h2 id="get_boards_from_user">get_boards_from_user</h2> +<p><a id="opIdget_boards_from_user"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X GET /api/users/{user}/boards \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/users/{user}/boards</span> HTTP/1.1 + +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/users/{user}/boards'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); + +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/users/{user}/boards'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>, + + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.get <span class="hljs-string">'/api/users/{user}/boards'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.get(<span class="hljs-string">'/api/users/{user}/boards'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/users/{user}/boards"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"GET"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/users/{user}/boards"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>GET /api/users/{user}/boards</code></p> +<p><em>Get all boards attached to a user</em></p> +<h3 id="get_boards_from_user-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>user</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the ID of the user to retrieve the data</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>user</strong>: the ID of the user to retrieve the data</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>[ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span> + } +] +</code></pre> +<h3 id="get_boards_from_user-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="get_boards_from_user-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> <h1 id="wekan-rest-api-checklists">Checklists</h1> <h2 id="get_all_checklists">get_all_checklists</h2> <p><a id="opIdget_all_checklists"></a></p> @@ -7703,7 +10227,12 @@ System.out.println(response.toString()); </blockquote> <pre class="highlight tab tab-json"><code>{ <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, - <span class="hljs-attr">"customFields"</span>: {} + <span class="hljs-attr">"customFields"</span>: [ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"value"</span>: {} + } + ] } </code></pre> <h3 id="edit_card_custom_field-responses">Responses</h3> @@ -7747,6 +10276,20 @@ System.out.println(response.toString()); </tr> <tr> <td>» customFields</td> +<td>[object]</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>»» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>»» value</td> <td>object</td> <td>false</td> <td>none</td> @@ -8204,6 +10747,283 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> +<h2 id="get_card_by_id">get_card_by_id</h2> +<p><a id="opIdget_card_by_id"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X GET /api/cards/{card} \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">GET</span> <span class="hljs-string">/api/cards/{card}</span> HTTP/1.1 + +<span class="http"><span class="hljs-attribute">Accept</span>: application/json + +<span class="undefined"></span></span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/cards/{card}'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'get'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); + +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/cards/{card}'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'GET'</span>, + + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.get <span class="hljs-string">'/api/cards/{card}'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.get(<span class="hljs-string">'/api/cards/{card}'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/cards/{card}"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"GET"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"GET"</span>, <span class="hljs-string">"/api/cards/{card}"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>GET /api/cards/{card}</code></p> +<p><em>Get a Card by Card ID</em></p> +<h3 id="get_card_by_id-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>card</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the card ID</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>card</strong>: the card ID</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"archived"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"archivedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"parentId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"listId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"swimlaneId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"boardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"coverId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"color"</span>: <span class="hljs-string">"white"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"customFields"</span>: [ + {} + ], + <span class="hljs-attr">"dateLastActivity"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"requestedBy"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"assignedBy"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"labelIds"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"members"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"assignees"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"receivedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"startAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dueAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"endAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"spentTime"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"isOvertime"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"subtaskSort"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"type"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"linkedId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"vote"</span>: { + <span class="hljs-attr">"question"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"positive"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"negative"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"end"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"public"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowNonBoardMembers"</span>: <span class="hljs-literal">true</span> + }, + <span class="hljs-attr">"poker"</span>: { + <span class="hljs-attr">"question"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"one"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"two"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"three"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"five"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"eight"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"thirteen"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"twenty"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"forty"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"oneHundred"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"unsure"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"end"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"allowNonBoardMembers"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"estimation"</span>: <span class="hljs-number">0</span> + }, + <span class="hljs-attr">"targetId_gantt"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"linkType_gantt"</span>: [ + <span class="hljs-number">0</span> + ], + <span class="hljs-attr">"linkId_gantt"</span>: [ + <span class="hljs-string">"string"</span> + ], + <span class="hljs-attr">"cardNumber"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"showActivities"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"hideFinishedChecklistIfItemsAreHidden"</span>: <span class="hljs-literal">true</span> +} +</code></pre> +<h3 id="get_card_by_id-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td><a href="#schemacards">Cards</a></td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> <h1 id="wekan-rest-api-customfields">CustomFields</h1> <h2 id="get_all_custom_fields">get_all_custom_fields</h2> <p><a id="opIdget_all_custom_fields"></a></p> @@ -12413,6 +15233,283 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity </aside> +<h2 id="edit_list">edit_list</h2> +<p><a id="opIdedit_list"></a></p> +<blockquote> +<p>Code samples</p> +</blockquote> +<pre class="highlight tab tab-shell"><code><span class="hljs-comment"># You can also use wget</span> +curl -X PUT /api/boards/{board}/lists/{list} \ + -H <span class="hljs-string">'Content-Type: multipart/form-data'</span> \ + -H <span class="hljs-string">'Accept: application/json'</span> \ + -H <span class="hljs-string">'Authorization: API_KEY'</span> + +</code></pre> +<pre class="highlight tab tab-http"><code><span class="hljs-keyword">PUT</span> <span class="hljs-string">/api/boards/{board}/lists/{list}</span> HTTP/1.1 + +<span class="fortran">Content-<span class="hljs-keyword">Type</span>: multipart/<span class="hljs-keyword">form</span>-<span class="hljs-keyword">data</span> +Accept: application/json + +</span></code></pre> +<pre class="highlight tab tab-javascript"><code><span class="hljs-keyword">var</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +$.ajax({ + <span class="hljs-attr">url</span>: <span class="hljs-string">'/api/boards/{board}/lists/{list}'</span>, + <span class="hljs-attr">method</span>: <span class="hljs-string">'put'</span>, + + <span class="hljs-attr">headers</span>: headers, + <span class="hljs-attr">success</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>) </span>{ + <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.stringify(data)); + } +}) + +</code></pre> +<pre class="highlight tab tab-javascript--nodejs"><code><span class="hljs-keyword">const</span> fetch = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node-fetch'</span>); +<span class="hljs-keyword">const</span> inputBody = <span class="hljs-string">'{ + "title": "string", + "color": "string", + "starred": true, + "collapsed": true, + "wipLimit": {} +}'</span>; +<span class="hljs-keyword">const</span> headers = { + <span class="hljs-string">'Content-Type'</span>:<span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>:<span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>:<span class="hljs-string">'API_KEY'</span> + +}; + +fetch(<span class="hljs-string">'/api/boards/{board}/lists/{list}'</span>, +{ + <span class="hljs-attr">method</span>: <span class="hljs-string">'PUT'</span>, + <span class="hljs-attr">body</span>: inputBody, + <span class="hljs-attr">headers</span>: headers +}) +.then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">res</span>) </span>{ + <span class="hljs-keyword">return</span> res.json(); +}).then(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">body</span>) </span>{ + <span class="hljs-built_in">console</span>.log(body); +}); + +</code></pre> +<pre class="highlight tab tab-ruby"><code><span class="hljs-keyword">require</span> <span class="hljs-string">'rest-client'</span> +<span class="hljs-keyword">require</span> <span class="hljs-string">'json'</span> + +headers = { + <span class="hljs-string">'Content-Type'</span> => <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span> => <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span> => <span class="hljs-string">'API_KEY'</span> +} + +result = RestClient.put <span class="hljs-string">'/api/boards/{board}/lists/{list}'</span>, + <span class="hljs-symbol">params:</span> { + }, <span class="hljs-symbol">headers:</span> headers + +p JSON.parse(result) + +</code></pre> +<pre class="highlight tab tab-python"><code><span class="hljs-keyword">import</span> requests +headers = { + <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'multipart/form-data'</span>, + <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json'</span>, + <span class="hljs-string">'Authorization'</span>: <span class="hljs-string">'API_KEY'</span> +} + +r = requests.put(<span class="hljs-string">'/api/boards/{board}/lists/{list}'</span>, params={ + +}, headers = headers) + +<span class="hljs-keyword">print</span> r.json() + +</code></pre> +<pre class="highlight tab tab-java"><code>URL obj = <span class="hljs-keyword">new</span> URL(<span class="hljs-string">"/api/boards/{board}/lists/{list}"</span>); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod(<span class="hljs-string">"PUT"</span>); +<span class="hljs-keyword">int</span> responseCode = con.getResponseCode(); +BufferedReader in = <span class="hljs-keyword">new</span> BufferedReader( + <span class="hljs-keyword">new</span> InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = <span class="hljs-keyword">new</span> StringBuffer(); +<span class="hljs-keyword">while</span> ((inputLine = in.readLine()) != <span class="hljs-keyword">null</span>) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); + +</code></pre> +<pre class="highlight tab tab-go"><code><span class="hljs-keyword">package</span> main + +<span class="hljs-keyword">import</span> ( + <span class="hljs-string">"bytes"</span> + <span class="hljs-string">"net/http"</span> +) + +<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { + + headers := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>][]<span class="hljs-keyword">string</span>{ + <span class="hljs-string">"Content-Type"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"multipart/form-data"</span>}, + <span class="hljs-string">"Accept"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"application/json"</span>}, + <span class="hljs-string">"Authorization"</span>: []<span class="hljs-keyword">string</span>{<span class="hljs-string">"API_KEY"</span>}, + + } + + data := bytes.NewBuffer([]<span class="hljs-keyword">byte</span>{jsonReq}) + req, err := http.NewRequest(<span class="hljs-string">"PUT"</span>, <span class="hljs-string">"/api/boards/{board}/lists/{list}"</span>, data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + <span class="hljs-comment">// ...</span> +} + +</code></pre> +<p><code>PUT /api/boards/{board}/lists/{list}</code></p> +<p><em>Edit a List</em></p> +<p>This updates a list on a board. +You can update the title, color, wipLimit, starred, and collapsed properties.</p> +<blockquote> +<p>Body parameter</p> +</blockquote> +<pre class="highlight tab tab-yaml"><code><span class="hljs-attr">title:</span> <span class="hljs-string">string</span> +<span class="hljs-attr">color:</span> <span class="hljs-string">string</span> +<span class="hljs-attr">starred:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">collapsed:</span> <span class="hljs-literal">true</span> +<span class="hljs-attr">wipLimit:</span> <span class="hljs-string">{}</span> + +</code></pre> +<h3 id="edit_list-parameters">Parameters</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>In</th> +<th>Type</th> +<th>Required</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>board</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the board ID</td> +</tr> +<tr> +<td>list</td> +<td>path</td> +<td>string</td> +<td>true</td> +<td>the ID of the list to update</td> +</tr> +<tr> +<td>body</td> +<td>body</td> +<td>object</td> +<td>false</td> +<td>none</td> +</tr> +<tr> +<td>» title</td> +<td>body</td> +<td>string</td> +<td>false</td> +<td>the new title of the list</td> +</tr> +<tr> +<td>» color</td> +<td>body</td> +<td>string</td> +<td>false</td> +<td>the new color of the list</td> +</tr> +<tr> +<td>» starred</td> +<td>body</td> +<td>boolean</td> +<td>false</td> +<td>whether the list is starred</td> +</tr> +<tr> +<td>» collapsed</td> +<td>body</td> +<td>boolean</td> +<td>false</td> +<td>whether the list is collapsed</td> +</tr> +<tr> +<td>» wipLimit</td> +<td>body</td> +<td>object</td> +<td>false</td> +<td>the WIP limit configuration</td> +</tr> +</tbody> +</table> +<h4 id="detailed-descriptions">Detailed descriptions</h4> +<p><strong>board</strong>: the board ID</p> +<p><strong>list</strong>: the ID of the list to update</p> +<blockquote> +<p>Example responses</p> +</blockquote> +<blockquote> +<p>200 Response</p> +</blockquote> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span> +} +</code></pre> +<h3 id="edit_list-responses">Responses</h3> +<table> +<thead> +<tr> +<th>Status</th> +<th>Meaning</th> +<th>Description</th> +<th>Schema</th> +</tr> +</thead> +<tbody> +<tr> +<td>200</td> +<td><a href="https://tools.ietf.org/html/rfc7231#section-6.3.1">OK</a></td> +<td>200 response</td> +<td>Inline</td> +</tr> +</tbody> +</table> +<h3 id="edit_list-responseschema">Response Schema</h3> +<p>Status Code <strong>200</strong></p> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>» _id</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +</tbody> +</table> +<aside class="warning"> +To perform this operation, you must be authenticated by means of one of the following methods: +UserSecurity +</aside> <h2 id="delete_list">delete_list</h2> <p><a id="opIddelete_list"></a></p> <blockquote> @@ -13718,6 +16815,940 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecurity </aside> <h1 id="schemas">Schemas</h1> +<h2 id="tocsboards">Boards</h2> +<p><a id="schemaboards"></a></p> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"title"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"slug"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"archived"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"archivedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"createdAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"modifiedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"stars"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"labels"</span>: [ + { + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"color"</span>: <span class="hljs-string">"white"</span> + } + ], + <span class="hljs-attr">"members"</span>: [ + { + <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isAdmin"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isNoComments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isCommentOnly"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isWorker"</span>: <span class="hljs-literal">true</span> + } + ], + <span class="hljs-attr">"permission"</span>: <span class="hljs-string">"public"</span>, + <span class="hljs-attr">"orgs"</span>: [ + { + <span class="hljs-attr">"orgId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"orgDisplayName"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span> + } + ], + <span class="hljs-attr">"teams"</span>: [ + { + <span class="hljs-attr">"teamId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"teamDisplayName"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span> + } + ], + <span class="hljs-attr">"color"</span>: <span class="hljs-string">"belize"</span>, + <span class="hljs-attr">"backgroundImageURL"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"allowsCardCounterList"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsBoardMemberList"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"description"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"subtasksDefaultBoardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"subtasksDefaultListId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dateSettingsDefaultBoardId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dateSettingsDefaultListId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"allowsSubtasks"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsAttachments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsChecklists"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsComments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionTitle"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionText"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDescriptionTextOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCoverAttachmentOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsBadgeAttachmentOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCardSortingByNumberOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCardNumber"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsActivities"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsLabels"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCreator"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCreatorOnMinicard"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsAssignee"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsMembers"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsRequestedBy"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsCardSortingByNumber"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsShowLists"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsAssignedBy"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsReceivedDate"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsStartDate"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsEndDate"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"allowsDueDate"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"presentParentTask"</span>: <span class="hljs-string">"prefix-with-full-path"</span>, + <span class="hljs-attr">"receivedAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"startAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"dueAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"endAt"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"spentTime"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"isOvertime"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"type"</span>: <span class="hljs-string">"board"</span>, + <span class="hljs-attr">"sort"</span>: <span class="hljs-number">0</span>, + <span class="hljs-attr">"showActivities"</span>: <span class="hljs-literal">true</span> +} + +</code></pre> +<p><em>This is a Board.</em></p> +<h3 id="properties">Properties</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>title</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The title of the board</td> +</tr> +<tr> +<td>slug</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The title slugified.</td> +</tr> +<tr> +<td>archived</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Is the board archived?</td> +</tr> +<tr> +<td>archivedAt</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>Latest archiving time of the board</td> +</tr> +<tr> +<td>createdAt</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>Creation time of the board</td> +</tr> +<tr> +<td>modifiedAt</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>Last modification time of the board</td> +</tr> +<tr> +<td>stars</td> +<td>number</td> +<td>true</td> +<td>none</td> +<td>How many stars the board has</td> +</tr> +<tr> +<td>labels</td> +<td>[<a href="#schemaboardslabels">BoardsLabels</a>]|null</td> +<td>false</td> +<td>none</td> +<td>List of labels attached to a board</td> +</tr> +<tr> +<td>members</td> +<td>[<a href="#schemaboardsmembers">BoardsMembers</a>]</td> +<td>true</td> +<td>none</td> +<td>List of members of a board</td> +</tr> +<tr> +<td>permission</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>visibility of the board</td> +</tr> +<tr> +<td>orgs</td> +<td>[<a href="#schemaboardsorgs">BoardsOrgs</a>]|null</td> +<td>false</td> +<td>none</td> +<td>the list of organizations that a board belongs to</td> +</tr> +<tr> +<td>teams</td> +<td>[<a href="#schemaboardsteams">BoardsTeams</a>]|null</td> +<td>false</td> +<td>none</td> +<td>the list of teams that a board belongs to</td> +</tr> +<tr> +<td>color</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The color of the board.</td> +</tr> +<tr> +<td>backgroundImageURL</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>The background image URL of the board.</td> +</tr> +<tr> +<td>allowsCardCounterList</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Show card counter per list</td> +</tr> +<tr> +<td>allowsBoardMemberList</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Show board member list</td> +</tr> +<tr> +<td>description</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>The description of the board</td> +</tr> +<tr> +<td>subtasksDefaultBoardId</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>The default board ID assigned to subtasks.</td> +</tr> +<tr> +<td>subtasksDefaultListId</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>The default List ID assigned to subtasks.</td> +</tr> +<tr> +<td>dateSettingsDefaultBoardId</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>dateSettingsDefaultListId</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>none</td> +</tr> +<tr> +<td>allowsSubtasks</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows subtasks?</td> +</tr> +<tr> +<td>allowsAttachments</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows attachments?</td> +</tr> +<tr> +<td>allowsChecklists</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows checklists?</td> +</tr> +<tr> +<td>allowsComments</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows comments?</td> +</tr> +<tr> +<td>allowsDescriptionTitle</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows description title?</td> +</tr> +<tr> +<td>allowsDescriptionText</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows description text?</td> +</tr> +<tr> +<td>allowsDescriptionTextOnMinicard</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows description text on minicard?</td> +</tr> +<tr> +<td>allowsCoverAttachmentOnMinicard</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows cover attachment on minicard?</td> +</tr> +<tr> +<td>allowsBadgeAttachmentOnMinicard</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows badge attachment on minicard?</td> +</tr> +<tr> +<td>allowsCardSortingByNumberOnMinicard</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows card sorting by number on minicard?</td> +</tr> +<tr> +<td>allowsCardNumber</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows card numbers?</td> +</tr> +<tr> +<td>allowsActivities</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows comments?</td> +</tr> +<tr> +<td>allowsLabels</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows labels?</td> +</tr> +<tr> +<td>allowsCreator</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allow creator?</td> +</tr> +<tr> +<td>allowsCreatorOnMinicard</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allow creator?</td> +</tr> +<tr> +<td>allowsAssignee</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows assignee?</td> +</tr> +<tr> +<td>allowsMembers</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows members?</td> +</tr> +<tr> +<td>allowsRequestedBy</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows requested by?</td> +</tr> +<tr> +<td>allowsCardSortingByNumber</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows card sorting by number?</td> +</tr> +<tr> +<td>allowsShowLists</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows show lists on the card?</td> +</tr> +<tr> +<td>allowsAssignedBy</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows requested by?</td> +</tr> +<tr> +<td>allowsReceivedDate</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows received date?</td> +</tr> +<tr> +<td>allowsStartDate</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows start date?</td> +</tr> +<tr> +<td>allowsEndDate</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows end date?</td> +</tr> +<tr> +<td>allowsDueDate</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Does the board allows due date?</td> +</tr> +<tr> +<td>presentParentTask</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>Controls how to present the parent task: - <code>prefix-with-full-path</code>: add a prefix with the full path - <code>prefix-with-parent</code>: add a prefisx with the parent name - <code>subtext-with-full-path</code>: add a subtext with the full path - <code>subtext-with-parent</code>: add a subtext with the parent name - <code>no-parent</code>: does not show the parent at all</td> +</tr> +<tr> +<td>receivedAt</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>Date the card was received</td> +</tr> +<tr> +<td>startAt</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>Starting date of the board.</td> +</tr> +<tr> +<td>dueAt</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>Due date of the board.</td> +</tr> +<tr> +<td>endAt</td> +<td>string|null</td> +<td>false</td> +<td>none</td> +<td>End date of the board.</td> +</tr> +<tr> +<td>spentTime</td> +<td>number|null</td> +<td>false</td> +<td>none</td> +<td>Time spent in the board.</td> +</tr> +<tr> +<td>isOvertime</td> +<td>boolean|null</td> +<td>false</td> +<td>none</td> +<td>Is the board overtimed?</td> +</tr> +<tr> +<td>type</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The type of board possible values: board, template-board, template-container</td> +</tr> +<tr> +<td>sort</td> +<td>number</td> +<td>true</td> +<td>none</td> +<td>Sort value</td> +</tr> +<tr> +<td>showActivities</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>none</td> +</tr> +</tbody> +</table> +<h4 id="enumerated-values">Enumerated Values</h4> +<table> +<thead> +<tr> +<th>Property</th> +<th>Value</th> +</tr> +</thead> +<tbody> +<tr> +<td>permission</td> +<td>public</td> +</tr> +<tr> +<td>permission</td> +<td>private</td> +</tr> +<tr> +<td>color</td> +<td>belize</td> +</tr> +<tr> +<td>color</td> +<td>nephritis</td> +</tr> +<tr> +<td>color</td> +<td>pomegranate</td> +</tr> +<tr> +<td>color</td> +<td>pumpkin</td> +</tr> +<tr> +<td>color</td> +<td>wisteria</td> +</tr> +<tr> +<td>color</td> +<td>moderatepink</td> +</tr> +<tr> +<td>color</td> +<td>strongcyan</td> +</tr> +<tr> +<td>color</td> +<td>limegreen</td> +</tr> +<tr> +<td>color</td> +<td>midnight</td> +</tr> +<tr> +<td>color</td> +<td>dark</td> +</tr> +<tr> +<td>color</td> +<td>relax</td> +</tr> +<tr> +<td>color</td> +<td>corteza</td> +</tr> +<tr> +<td>color</td> +<td>clearblue</td> +</tr> +<tr> +<td>color</td> +<td>natural</td> +</tr> +<tr> +<td>color</td> +<td>modern</td> +</tr> +<tr> +<td>color</td> +<td>moderndark</td> +</tr> +<tr> +<td>color</td> +<td>exodark</td> +</tr> +<tr> +<td>color</td> +<td>cleandark</td> +</tr> +<tr> +<td>color</td> +<td>cleanlight</td> +</tr> +<tr> +<td>presentParentTask</td> +<td>prefix-with-full-path</td> +</tr> +<tr> +<td>presentParentTask</td> +<td>prefix-with-parent</td> +</tr> +<tr> +<td>presentParentTask</td> +<td>subtext-with-full-path</td> +</tr> +<tr> +<td>presentParentTask</td> +<td>subtext-with-parent</td> +</tr> +<tr> +<td>presentParentTask</td> +<td>no-parent</td> +</tr> +<tr> +<td>type</td> +<td>board</td> +</tr> +<tr> +<td>type</td> +<td>template-board</td> +</tr> +<tr> +<td>type</td> +<td>template-container</td> +</tr> +</tbody> +</table> +<h2 id="tocsboardslabels">BoardsLabels</h2> +<p><a id="schemaboardslabels"></a></p> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"_id"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"name"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"color"</span>: <span class="hljs-string">"white"</span> +} + +</code></pre> +<h3 id="properties">Properties</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>_id</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>Unique id of a label</td> +</tr> +<tr> +<td>name</td> +<td>string</td> +<td>false</td> +<td>none</td> +<td>Name of a label</td> +</tr> +<tr> +<td>color</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>color of a label. Can be amongst <code>green</code>, <code>yellow</code>, <code>orange</code>, <code>red</code>, <code>purple</code>, <code>blue</code>, <code>sky</code>, <code>lime</code>, <code>pink</code>, <code>black</code>, <code>silver</code>, <code>peachpuff</code>, <code>crimson</code>, <code>plum</code>, <code>darkgreen</code>, <code>slateblue</code>, <code>magenta</code>, <code>gold</code>, <code>navy</code>, <code>gray</code>, <code>saddlebrown</code>, <code>paleturquoise</code>, <code>mistyrose</code>, <code>indigo</code></td> +</tr> +</tbody> +</table> +<h4 id="enumerated-values">Enumerated Values</h4> +<table> +<thead> +<tr> +<th>Property</th> +<th>Value</th> +</tr> +</thead> +<tbody> +<tr> +<td>color</td> +<td>white</td> +</tr> +<tr> +<td>color</td> +<td>green</td> +</tr> +<tr> +<td>color</td> +<td>yellow</td> +</tr> +<tr> +<td>color</td> +<td>orange</td> +</tr> +<tr> +<td>color</td> +<td>red</td> +</tr> +<tr> +<td>color</td> +<td>purple</td> +</tr> +<tr> +<td>color</td> +<td>blue</td> +</tr> +<tr> +<td>color</td> +<td>sky</td> +</tr> +<tr> +<td>color</td> +<td>lime</td> +</tr> +<tr> +<td>color</td> +<td>pink</td> +</tr> +<tr> +<td>color</td> +<td>black</td> +</tr> +<tr> +<td>color</td> +<td>silver</td> +</tr> +<tr> +<td>color</td> +<td>peachpuff</td> +</tr> +<tr> +<td>color</td> +<td>crimson</td> +</tr> +<tr> +<td>color</td> +<td>plum</td> +</tr> +<tr> +<td>color</td> +<td>darkgreen</td> +</tr> +<tr> +<td>color</td> +<td>slateblue</td> +</tr> +<tr> +<td>color</td> +<td>magenta</td> +</tr> +<tr> +<td>color</td> +<td>gold</td> +</tr> +<tr> +<td>color</td> +<td>navy</td> +</tr> +<tr> +<td>color</td> +<td>gray</td> +</tr> +<tr> +<td>color</td> +<td>saddlebrown</td> +</tr> +<tr> +<td>color</td> +<td>paleturquoise</td> +</tr> +<tr> +<td>color</td> +<td>mistyrose</td> +</tr> +<tr> +<td>color</td> +<td>indigo</td> +</tr> +</tbody> +</table> +<h2 id="tocsboardsmembers">BoardsMembers</h2> +<p><a id="schemaboardsmembers"></a></p> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"userId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isAdmin"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isNoComments"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isCommentOnly"</span>: <span class="hljs-literal">true</span>, + <span class="hljs-attr">"isWorker"</span>: <span class="hljs-literal">true</span> +} + +</code></pre> +<h3 id="properties">Properties</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>userId</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The uniq ID of the member</td> +</tr> +<tr> +<td>isAdmin</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Is the member an admin of the board?</td> +</tr> +<tr> +<td>isActive</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Is the member active?</td> +</tr> +<tr> +<td>isNoComments</td> +<td>boolean</td> +<td>false</td> +<td>none</td> +<td>Is the member not allowed to make comments</td> +</tr> +<tr> +<td>isCommentOnly</td> +<td>boolean</td> +<td>false</td> +<td>none</td> +<td>Is the member only allowed to comment on the board</td> +</tr> +<tr> +<td>isWorker</td> +<td>boolean</td> +<td>false</td> +<td>none</td> +<td>Is the member only allowed to move card, assign himself to card and comment</td> +</tr> +</tbody> +</table> +<h2 id="tocsboardsorgs">BoardsOrgs</h2> +<p><a id="schemaboardsorgs"></a></p> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"orgId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"orgDisplayName"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span> +} + +</code></pre> +<h3 id="properties">Properties</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>orgId</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The uniq ID of the organization</td> +</tr> +<tr> +<td>orgDisplayName</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The display name of the organization</td> +</tr> +<tr> +<td>isActive</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Is the organization active?</td> +</tr> +</tbody> +</table> +<h2 id="tocsboardsteams">BoardsTeams</h2> +<p><a id="schemaboardsteams"></a></p> +<pre class="highlight tab tab-json"><code>{ + <span class="hljs-attr">"teamId"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"teamDisplayName"</span>: <span class="hljs-string">"string"</span>, + <span class="hljs-attr">"isActive"</span>: <span class="hljs-literal">true</span> +} + +</code></pre> +<h3 id="properties">Properties</h3> +<table> +<thead> +<tr> +<th>Name</th> +<th>Type</th> +<th>Required</th> +<th>Restrictions</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td>teamId</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The uniq ID of the team</td> +</tr> +<tr> +<td>teamDisplayName</td> +<td>string</td> +<td>true</td> +<td>none</td> +<td>The display name of the team</td> +</tr> +<tr> +<td>isActive</td> +<td>boolean</td> +<td>true</td> +<td>none</td> +<td>Is the team active?</td> +</tr> +</tbody> +</table> <h2 id="tocscardcomments">CardComments</h2> <p><a id="schemacardcomments"></a></p> <pre class="highlight tab tab-json"><code>{ diff --git a/public/api/wekan.yml b/public/api/wekan.yml index e578f505e..ce4827199 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.86 + version: v7.95 description: | The REST API allows you to control and extend Wekan with ease. @@ -31,47 +31,63 @@ paths: operationId: login summary: Login with REST API consumes: - - application/x-www-form-urlencoded - application/json + - application/x-www-form-urlencoded tags: - Login parameters: - - name: username - in: formData + - name: loginRequest + in: body required: true - description: | - Your username - type: string - - name: password - in: formData - required: true - description: | - Your password - type: string - format: password + description: Login credentials + schema: + type: object + required: + - username + - password + properties: + username: + description: | + Your username + type: string + password: + description: | + Your password + type: string + format: password responses: 200: description: |- Successful authentication schema: - items: - properties: - id: - type: string - token: - type: string - tokenExpires: - type: string + type: object + required: + - id + - token + - tokenExpires + properties: + id: + type: string + description: User ID + token: + type: string + description: | + Authentication token + tokenExpires: + type: string + format: date-time + description: | + Token expiration date 400: description: | Error in authentication schema: - items: - properties: - error: - type: number - reason: - type: string + type: object + properties: + error: + type: string + reason: + type: string default: description: | Error in authentication @@ -134,6 +150,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`: + + <img src="https://wekan.github.io/board-colors.png" width="40%" alt="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 @@ -765,6 +979,41 @@ paths: properties: board_cards_count: type: integer + /api/boards/{board}/copy: + post: + operationId: 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. + tags: + - Boards + consumes: + - multipart/form-data + - application/json + parameters: + - name: title + in: formData + description: | + the title of the new board (default to old one) + 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}/custom-fields: get: operationId: get_all_custom_fields @@ -1408,6 +1657,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 @@ -1501,6 +1784,73 @@ paths: 200 response schema: $ref: "#/definitions/Lists" + put: + operationId: edit_list + summary: Edit a List + description: | + This updates a list on a board. + You can update the title, color, wipLimit, starred, and collapsed properties. + tags: + - Lists + consumes: + - multipart/form-data + - application/json + parameters: + - name: title + in: formData + description: | + the new title of the list + type: string + required: false + - name: color + in: formData + description: | + the new color of the list + type: string + required: false + - name: starred + in: formData + description: | + whether the list is starred + type: boolean + required: false + - name: collapsed + in: formData + description: | + whether the list is collapsed + type: boolean + required: false + - name: wipLimit + in: formData + description: | + the WIP limit configuration + type: object + required: false + - name: board + in: path + description: | + the board ID + type: string + required: true + - name: list + in: path + description: | + the ID of the list to update + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + type: object + properties: + _id: + type: string delete: operationId: delete_list summary: Delete a List @@ -1977,7 +2327,14 @@ paths: _id: type: string customFields: - type: object + type: array + items: + type: object + properties: + _id: + type: string + value: + type: object /api/boards/{board}/lists/{list}/cards_count: get: operationId: get_list_cards_count @@ -2010,6 +2367,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 +2628,557 @@ paths: type: string listId: type: string + /api/boards/{board}/title: + put: + operationId: update_board_title + summary: Update the title of a board + tags: + - Boards + consumes: + - multipart/form-data + - application/json + parameters: + - name: title + in: formData + description: | + the new title for the board + type: string + required: true + - name: board + in: path + description: | + the ID of the board to update + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + /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/cards/{card}: + get: + operationId: get_card_by_id + summary: Get a Card by Card ID + tags: + - Cards + parameters: + - name: card + in: path + description: | + the card ID + type: string + required: true + produces: + - application/json + security: + - UserSecurity: [] + responses: + '200': + description: |- + 200 response + schema: + $ref: "#/definitions/Cards" + /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 + - cleandark + - cleanlight + 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 + allowsCreatorOnMinicard: + 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 + showActivities: + type: boolean + 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 + - allowsCreatorOnMinicard + - allowsAssignee + - allowsMembers + - allowsRequestedBy + - allowsCardSortingByNumber + - allowsShowLists + - allowsAssignedBy + - allowsReceivedDate + - allowsStartDate + - allowsEndDate + - allowsDueDate + - type + - sort + - showActivities + 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 diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh index 1c9bbddd1..effd726c7 100755 --- a/rebuild-wekan.sh +++ b/rebuild-wekan.sh @@ -48,17 +48,51 @@ do # Latest fibers for Meteor sudo mkdir -p /usr/local/lib/node_modules/fibers/.node-gyp sudo npm -g install fibers sudo npm -g install @mapbox/node-pre-gyp # Install Meteor, if it's not yet installed - sudo npm -g install meteor --unsafe-perm + sudo npm -g install meteor@2.14 --unsafe-perm #sudo chown -R $(id -u):$(id -g) $HOME/.npm $HOME/.meteor elif [[ "$OSTYPE" == "darwin"* ]]; then - echo "macOS"; + echo "macOS" + softwareupdate --install-rosetta --agree-to-license brew install npm + # Install n for home directory version of Node.js 14.21.4 npm -g install n - export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download + directory_name="~/.n" + if [ ! -d "$directory_name" ]; then + mkdir "$directory_name" + echo "Directory '$directory_name' created." + else + echo "Directory '$directory_name' already exists." + fi + directory_name="~/.npm" + if [ ! -d "$directory_name" ]; then + mkdir "$directory_name" + echo "Directory '$directory_name' created." + else + echo "Directory '$directory_name' already exists." + fi + if awk '/node-v14-esm/{found=1; exit} END{exit !found}' ~/.zshrc; then + echo "The text node-v14-esm alread exists in .zshrc" + else + echo "The text node-v14-esm does not exist in .zshrc, adding for install node v14" + echo "export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download" >> ~/.zshrc + export N_NODE_MIRROR="https://github.com/wekan/node-v14-esm/releases/download" + fi + if awk '/export N_PREFIX/{found=1; exit} END{exit !found}' ~/.zshrc; then + echo "The text export N_PREFIX for local ~/.n directory already exists in .zshrc" + else + # echo "The text export N_PREFIX for local ~/.n directory does not exist in .zshrc, adding." + echo "export N_PREFIX=~/.n" >> ~/.zshrc + export N_PREFIX=~/.n + fi + npm config set prefix '~/.npm' + npm -g install npm@latest n 14.21.4 npm -g uninstall node-pre-gyp npm -g install @mapbox/node-pre-gyp - npm -g install meteor + npm -g install node-gyp + npm -g install meteor@2.14 + export PATH=~/.meteor:$PATH + exit; elif [[ "$OSTYPE" == "cygwin" ]]; then # POSIX compatibility layer and Linux environment emulation for Windows echo "TODO: Add Cygwin"; @@ -99,7 +133,8 @@ do 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/node_modules/fibers && node build.js) + #(cd .build/bundle/programs/server/node_modules/fibers && node build.js) + (cd .build/bundle/programs/server && npm install fibers --save-dev) (cd .build/bundle/programs/server/npm/node_modules/meteor/accounts-password && meteor npm remove bcrypt && meteor npm install bcrypt --production) # Cleanup cd .build/bundle diff --git a/releases/release-website.sh b/releases/release-website.sh index ba4420a0b..11f1a471b 100755 --- a/releases/release-website.sh +++ b/releases/release-website.sh @@ -14,7 +14,7 @@ if [ $# -ne 2 ] fi # 2) Go to website directory -cd ~/repos/w/wekan.github.io +cd ~/repos/w/wekan.fi # 3) Get latest changes to website git pull @@ -39,7 +39,7 @@ cp ~/repos/wekan/public/api/* . mv wekan.html index.html # 10) Go to docs repo -cd ~/repos/w/wekan.github.io +cd ~/repos/w/wekan.fi # 11) Commit all changes to git and push website changes live git add --all diff --git a/releases/sed-snapcraft-version.sh b/releases/sed-snapcraft-version.sh index 07b8ffc0d..b5b2f3693 100755 --- a/releases/sed-snapcraft-version.sh +++ b/releases/sed-snapcraft-version.sh @@ -12,4 +12,4 @@ if [ $# -ne 2 ] exit 1 fi -sed -i 's|$1|$2|g' snapcraft.yaml +sed -i 's|$1|$2|g' snapcraft.yaml docs/Platforms/Propietary/Windows/Offline.md diff --git a/releases/snap-build.sh b/releases/snap-build.sh new file mode 100755 index 000000000..8b1d645a4 --- /dev/null +++ b/releases/snap-build.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +echo "First run: snapcraft login" +echo "Then run this script" + +if [[ "$OSTYPE" == "linux-gnu" ]]; then + echo "Linux" + sudo apt-get -y install snapd + sudo systemctl enable snapd + sudo systemctl start snapd + sudo snap install snapcraft --classic + sudo snap install multipass + sudo snap install lxd + lxd init --auto + multipass delete ubu + multipass purge + multipass launch --name ubu + snapcraft + exit; +elif [[ "$OSTYPE" == "darwin"* ]]; then + echo "macOS" + brew install snapcraft + brew install multipass + # Launch multipass VM if needed + if ! multipass list | grep -q "ubu.*Running"; then + multipass launch --name ubu + fi + # Build with platform specified for macOS + snapcraft --use-lxd --platform=amd64 --build-for=amd64 + exit; +else + echo "Unknown OS: $OSTYPE" + echo "Please install snapcraft and multipass manually." + exit; +fi + + diff --git a/releases/snap-push-to-store.sh b/releases/snap-push-to-store.sh index dca942fde..15b467071 100755 --- a/releases/snap-push-to-store.sh +++ b/releases/snap-push-to-store.sh @@ -1 +1 @@ -snapcraft push $1 +snapcraft upload $1 diff --git a/releases/switch-kvm-snapcraft-waydroid-virtualbox.sh b/releases/switch-kvm-snapcraft-waydroid-virtualbox.sh new file mode 100755 index 000000000..4e60835a9 --- /dev/null +++ b/releases/switch-kvm-snapcraft-waydroid-virtualbox.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +echo "At newest Ubuntu for x86_64, blacklist kvm (intel, amd etc) to get VirtualBox working." +echo "Do not blacklist kvm to get working kvm, snapcraft.io/multipass and waydroid." +echo "Example:" +echo " sudo nano /etc/modprobe.d/blacklist.conf" +echo " blacklist kvm_intel" +echo " blacklist kvm" + +read -p "Press enter to edit /etc/modprobe.d/blacklist.conf with nano" + +sudo nano /etc/modprobe.d/blacklist.conf diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index e7eb08edd..a2150928d 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 = 786, + appVersion = 795, # Increment this for every release. - appMarketingVersion = (defaultText = "7.86.0~2025-04-25"), + appMarketingVersion = (defaultText = "7.95.0~2025-09-18"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, diff --git a/security-at-wekan.fi.asc b/security-at-wekan.fi.asc new file mode 100644 index 000000000..ae79b0f9f --- /dev/null +++ b/security-at-wekan.fi.asc @@ -0,0 +1,17 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +xjMEaK2aIRYJKwYBBAHaRw8BAQdAIT89DZJJl08UlL4O1B7VH1t8j3Bb5H2L +QA+9W+Q+5RvNJXNlY3VyaXR5QHdla2FuLmZpIDxzZWN1cml0eUB3ZWthbi5m +aT7CwBEEExYKAIMFgmitmiEDCwkHCZA/vSiebbrMoUUUAAAAAAAcACBzYWx0 +QG5vdGF0aW9ucy5vcGVucGdwanMub3Jnhox64D+pdSl+SYNXxxEUiNxiyk22 +1oY5r2XITCkt/ZADFQoIBBYAAgECGQECmwMCHgEWIQRr+tyvBjGXrZYeJ+E/ +vSiebbrMoQAA1rkA/i6uLDyZ6tJihJCLPvI4Uvue6vht9VExLufW7v2SnF3h +APkBNMJvGD5bOJnvnSZtRV18yyzouMXj8EdfXCY1HfzcAM44BGitmiESCisG +AQQBl1UBBQEBB0D4PAdZyHG2pKvHUJMzVnLGi8efh0+qIGqfDS/hm7K+ZAMB +CAfCvgQYFgoAcAWCaK2aIQmQP70onm26zKFFFAAAAAAAHAAgc2FsdEBub3Rh +dGlvbnMub3BlbnBncGpzLm9yZyYth6DqbMzmJP+21IFbBSU8+LQNuKEIhlNn +HwfhJ9cVApsMFiEEa/rcrwYxl62WHifhP70onm26zKEAAGFoAP42/EzsBLQr +K+ICGKE9Xte7ot7Zo4Hx3MiwFLpobofJWAD+IqQiNLo5WwwwNeSmS0cwNmov +bN4gNrrXY1/mCGKKGgg= +=7QOI +-----END PGP PUBLIC KEY BLOCK----- diff --git a/server/accounts-lockout-config.js b/server/accounts-lockout-config.js new file mode 100644 index 000000000..af437c25b --- /dev/null +++ b/server/accounts-lockout-config.js @@ -0,0 +1,33 @@ +import { AccountsLockout } from 'meteor/wekan-accounts-lockout'; +import LockoutSettings from '/models/lockoutSettings'; + +Meteor.startup(() => { + // Wait for the database to be ready + Meteor.setTimeout(() => { + try { + // Get configurations from database + const knownUsersConfig = { + failuresBeforeLockout: LockoutSettings.findOne('known-failuresBeforeLockout')?.value || 3, + lockoutPeriod: LockoutSettings.findOne('known-lockoutPeriod')?.value || 60, + failureWindow: LockoutSettings.findOne('known-failureWindow')?.value || 15 + }; + + const unknownUsersConfig = { + failuresBeforeLockout: LockoutSettings.findOne('unknown-failuresBeforeLockout')?.value || 3, + lockoutPeriod: LockoutSettings.findOne('unknown-lockoutPeriod')?.value || 60, + failureWindow: LockoutSettings.findOne('unknown-failureWindow')?.value || 15 + }; + + // Initialize the AccountsLockout with configuration + const accountsLockout = new AccountsLockout({ + knownUsers: knownUsersConfig, + unknownUsers: unknownUsersConfig, + }); + + // Start the accounts lockout mechanism + accountsLockout.startup(); + } catch (error) { + console.error('Failed to initialize accounts lockout:', error); + } + }, 2000); // Small delay to ensure database is ready +}); diff --git a/server/lib/emailLocalization.js b/server/lib/emailLocalization.js new file mode 100644 index 000000000..4c8bd0b17 --- /dev/null +++ b/server/lib/emailLocalization.js @@ -0,0 +1,58 @@ +// emailLocalization.js +// Utility functions to handle email localization in Wekan + +import { TAPi18n } from '/imports/i18n'; +import { ReactiveCache } from '/imports/reactiveCache'; + +// Main object for email localization utilities +EmailLocalization = { + /** + * Send an email using the recipient's preferred language + * @param {Object} options - Standard email sending options plus language options + * @param {String} options.to - Recipient email address + * @param {String} options.from - Sender email address + * @param {String} options.subject - Email subject i18n key + * @param {String} options.text - Email text i18n key + * @param {Object} options.params - Parameters for i18n translation + * @param {String} options.language - Language code to use (if not provided, will try to detect) + * @param {String} options.userId - User ID to determine language (if not provided with language) + */ + sendEmail(options) { + // Determine the language to use + let lang = options.language; + + // If no language is specified but we have a userId, try to get the user's language + if (!lang && options.userId) { + const user = ReactiveCache.getUser(options.userId); + if (user) { + lang = user.getLanguage(); + } + } + + // If no language could be determined, use the site default + if (!lang) { + lang = TAPi18n.getLanguage() || 'en'; + } + + // Translate subject and text using the determined language + const subject = TAPi18n.__(options.subject, options.params || {}, lang); + let text = options.text; + + // If text is an i18n key, translate it + if (typeof text === 'string' && text.startsWith('email-')) { + text = TAPi18n.__(text, options.params || {}, lang); + } + + // Send the email with translated content + return Email.send({ + to: options.to, + from: options.from || Accounts.emailTemplates.from, + subject: subject, + text: text, + html: options.html + }); + } +}; + +// Add module.exports to make it accessible from other files +module.exports = EmailLocalization; diff --git a/server/lib/importer.js b/server/lib/importer.js new file mode 100644 index 000000000..668ed8633 --- /dev/null +++ b/server/lib/importer.js @@ -0,0 +1,4 @@ +// This file ensures the EmailLocalization utility is imported +// and available throughout the application + +import './emailLocalization'; diff --git a/server/methods/lockedUsers.js b/server/methods/lockedUsers.js new file mode 100644 index 000000000..e4eaf8bbc --- /dev/null +++ b/server/methods/lockedUsers.js @@ -0,0 +1,107 @@ +import { ReactiveCache } from '/imports/reactiveCache'; + +// Method to find locked users and release them if needed +Meteor.methods({ + getLockedUsers() { + // Check if user has admin rights + const userId = Meteor.userId(); + if (!userId) { + throw new Meteor.Error('error-invalid-user', 'Invalid user'); + } + const user = ReactiveCache.getUser(userId); + if (!user || !user.isAdmin) { + throw new Meteor.Error('error-not-allowed', 'Not allowed'); + } + + // Current time to check against unlockTime + const currentTime = Number(new Date()); + + // Find users that are locked (known users) + const lockedUsers = Meteor.users.find( + { + 'services.accounts-lockout.unlockTime': { + $gt: currentTime, + } + }, + { + fields: { + _id: 1, + username: 1, + emails: 1, + 'services.accounts-lockout.unlockTime': 1, + 'services.accounts-lockout.failedAttempts': 1 + } + } + ).fetch(); + + // Format the results for the UI + return lockedUsers.map(user => { + const email = user.emails && user.emails.length > 0 ? user.emails[0].address : 'No email'; + const remainingLockTime = Math.round((user.services['accounts-lockout'].unlockTime - currentTime) / 1000); + + return { + _id: user._id, + username: user.username || 'No username', + email, + failedAttempts: user.services['accounts-lockout'].failedAttempts || 0, + unlockTime: user.services['accounts-lockout'].unlockTime, + remainingLockTime // in seconds + }; + }); + }, + + unlockUser(userId) { + // Check if user has admin rights + const adminId = Meteor.userId(); + if (!adminId) { + throw new Meteor.Error('error-invalid-user', 'Invalid user'); + } + const admin = ReactiveCache.getUser(adminId); + if (!admin || !admin.isAdmin) { + throw new Meteor.Error('error-not-allowed', 'Not allowed'); + } + + // Make sure the user to unlock exists + const userToUnlock = Meteor.users.findOne(userId); + if (!userToUnlock) { + throw new Meteor.Error('error-user-not-found', 'User not found'); + } + + // Unlock the user + Meteor.users.update( + { _id: userId }, + { + $unset: { + 'services.accounts-lockout': 1 + } + } + ); + + return true; + }, + + unlockAllUsers() { + // Check if user has admin rights + const adminId = Meteor.userId(); + if (!adminId) { + throw new Meteor.Error('error-invalid-user', 'Invalid user'); + } + const admin = ReactiveCache.getUser(adminId); + if (!admin || !admin.isAdmin) { + throw new Meteor.Error('error-not-allowed', 'Not allowed'); + } + + // Unlock all users + Meteor.users.update( + { 'services.accounts-lockout.unlockTime': { $exists: true } }, + { + $unset: { + 'services.accounts-lockout': 1 + } + }, + { multi: true } + ); + + return true; + } +}); diff --git a/server/methods/lockoutSettings.js b/server/methods/lockoutSettings.js new file mode 100644 index 000000000..047999bdc --- /dev/null +++ b/server/methods/lockoutSettings.js @@ -0,0 +1,46 @@ +import { AccountsLockout } from 'meteor/wekan-accounts-lockout'; +import { ReactiveCache } from '/imports/reactiveCache'; +import LockoutSettings from '/models/lockoutSettings'; + +Meteor.methods({ + reloadAccountsLockout() { + // Check if user has admin rights + const userId = Meteor.userId(); + if (!userId) { + throw new Meteor.Error('error-invalid-user', 'Invalid user'); + } + const user = ReactiveCache.getUser(userId); + if (!user || !user.isAdmin) { + throw new Meteor.Error('error-not-allowed', 'Not allowed'); + } + + try { + // Get configurations from database + const knownUsersConfig = { + failuresBeforeLockout: LockoutSettings.findOne('known-failuresBeforeLockout')?.value || 3, + lockoutPeriod: LockoutSettings.findOne('known-lockoutPeriod')?.value || 60, + failureWindow: LockoutSettings.findOne('known-failureWindow')?.value || 15 + }; + + const unknownUsersConfig = { + failuresBeforeLockout: LockoutSettings.findOne('unknown-failuresBeforeLockout')?.value || 3, + lockoutPeriod: LockoutSettings.findOne('unknown-lockoutPeriod')?.value || 60, + failureWindow: LockoutSettings.findOne('unknown-failureWindow')?.value || 15 + }; + + // Initialize the AccountsLockout with configuration + const accountsLockout = new AccountsLockout({ + knownUsers: knownUsersConfig, + unknownUsers: unknownUsersConfig, + }); + + // Start the accounts lockout mechanism + accountsLockout.startup(); + + return true; + } catch (error) { + console.error('Failed to reload accounts lockout:', error); + throw new Meteor.Error('error-reloading-settings', 'Error reloading settings'); + } + } +}); diff --git a/server/notifications/email.js b/server/notifications/email.js index c4ad1340b..7b1bf9a42 100644 --- a/server/notifications/email.js +++ b/server/notifications/email.js @@ -2,6 +2,8 @@ import { ReactiveCache } from '/imports/reactiveCache'; import { TAPi18n } from '/imports/i18n'; //var nodemailer = require('nodemailer'); +import EmailLocalization from '../lib/emailLocalization'; + // buffer each user's email text in a queue, then flush them in single email Meteor.startup(() => { Notifications.subscribe('email', (user, title, description, params) => { @@ -14,6 +16,7 @@ Meteor.startup(() => { quoteParams[key] = quoteParams[key] ? `${params[key]}` : ''; }); + // Get user's preferred language const lan = user.getLanguage(); const subject = TAPi18n.__(title, params, lan); // the original function has a fault, i believe the title should be used according to original author const existing = user.getEmailBuffer().length > 0; @@ -42,35 +45,14 @@ Meteor.startup(() => { const html = texts.join('<br/>\n\n'); user.clearEmailBuffer(); try { -/* - if (process.env.MAIL_SERVICE !== '') { - let transporter = nodemailer.createTransport({ - service: process.env.MAIL_SERVICE, - auth: { - user: process.env.MAIL_SERVICE_USER, - pass: process.env.MAIL_SERVICE_PASSWORD - }, - }) - let info = transporter.sendMail({ - to: user.emails[0].address.toLowerCase(), - from: Accounts.emailTemplates.from, - subject, - html, - }) - } else { - Email.send({ - to: user.emails[0].address.toLowerCase(), - from: Accounts.emailTemplates.from, - subject, - html, - }); - } -*/ - Email.send({ + // Use EmailLocalization utility to ensure the correct language is used + EmailLocalization.sendEmail({ to: user.emails[0].address.toLowerCase(), from: Accounts.emailTemplates.from, subject, html, + language: user.getLanguage(), + userId: user._id }); } catch (e) { return; diff --git a/server/publications/accessibilitySettings.js b/server/publications/accessibilitySettings.js new file mode 100644 index 000000000..8f634ce51 --- /dev/null +++ b/server/publications/accessibilitySettings.js @@ -0,0 +1,3 @@ +Meteor.publish('accessibilitySettings', function() { + return AccessibilitySettings.find({}); +}); diff --git a/server/publications/lockoutSettings.js b/server/publications/lockoutSettings.js new file mode 100644 index 000000000..c94309c33 --- /dev/null +++ b/server/publications/lockoutSettings.js @@ -0,0 +1,6 @@ +import LockoutSettings from '/models/lockoutSettings'; + +Meteor.publish('lockoutSettings', function() { + const ret = LockoutSettings.find(); + return ret; +}); diff --git a/server/rulesHelper.js b/server/rulesHelper.js index a2a10fba7..d5efe1d3f 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -125,22 +125,31 @@ RulesHelper = { const text = action.emailMsg || ''; const subject = action.emailSubject || ''; try { -/* - if (process.env.MAIL_SERVICE !== '') { - let transporter = nodemailer.createTransport({ - service: process.env.MAIL_SERVICE, - auth: { - user: process.env.MAIL_SERVICE_USER, - pass: process.env.MAIL_SERVICE_PASSWORD - }, - }) - let info = transporter.sendMail({ + // Try to detect the recipient's language preference if it's a Wekan user + // Otherwise, use the default language for the rule-triggered emails + let recipientUser = null; + let recipientLang = TAPi18n.getLanguage() || 'en'; + + // Check if recipient is a Wekan user to get their language + if (to && to.includes('@')) { + recipientUser = ReactiveCache.getUser({ 'emails.address': to.toLowerCase() }); + if (recipientUser && typeof recipientUser.getLanguage === 'function') { + recipientLang = recipientUser.getLanguage(); + } + } + + // Use EmailLocalization if available + if (typeof EmailLocalization !== 'undefined') { + EmailLocalization.sendEmail({ to, from: Accounts.emailTemplates.from, subject, text, - }) + language: recipientLang, + userId: recipientUser ? recipientUser._id : null + }); } else { + // Fallback to standard Email.send Email.send({ to, from: Accounts.emailTemplates.from, @@ -148,13 +157,6 @@ RulesHelper = { text, }); } -*/ - Email.send({ - to, - from: Accounts.emailTemplates.from, - subject, - text, - }); } catch (e) { // eslint-disable-next-line no-console console.error(e); diff --git a/snap-src/Caddyfile b/snap-src/Caddyfile index 2a9867d80..b27083552 100644 --- a/snap-src/Caddyfile +++ b/snap-src/Caddyfile @@ -1,18 +1,29 @@ -http://:8080 -proxy / localhost:3001 { - websocket - transparent +# Caddy 2 configuration for Wekan + +:8080 { + # Reverse proxy to Wekan + reverse_proxy localhost:3001 { + # Enable WebSocket support + header_up Connection {>Connection} + header_up Upgrade {>Upgrade} + } } -## SSL/TLS example. Firefox Inspect Console does not support http/2, so turning it off -## so that Firefox would not show wss websocket errors. Chrome console supports http/2. -# -#wekan.example.com { +# SSL/TLS example with HTTP/2 disabled for Firefox WebSocket compatibility +# Uncomment and customize for your domain +#{$DOMAIN:wekan.example.com} { +# # Enable TLS but use HTTP/1.1 protocol # tls { -# alpn http/1.1 +# protocols tls1.2 tls1.3 # } -# proxy / localhost:3001 { -# websocket -# transparent +# # Force HTTP/1.1 +# protocols h1 +# +# # Reverse proxy to Wekan +# reverse_proxy localhost:3001 { +# # Enable WebSocket support +# header_up Connection {>Connection} +# header_up Upgrade {>Upgrade} # } #} +#} diff --git a/snap-src/bin/caddy-control b/snap-src/bin/caddy-control index 1905603cc..17c696b65 100755 --- a/snap-src/bin/caddy-control +++ b/snap-src/bin/caddy-control @@ -1,10 +1,13 @@ #!/bin/bash -# get wekan/mongo settings +# Get wekan/mongo settings source $SNAP/bin/wekan-read-settings if [ "$CADDY_ENABLED" = "true" ]; then - env LC_ALL=C caddy -conf=$SNAP_COMMON/Caddyfile -host=localhost:${CADDY_PORT} -agree + # Use Caddy 2 command format + # The 'host' option is no longer needed in Caddy 2 + # The 'agree' option is no longer needed as Caddy 2 doesn't prompt for EULA + env LC_ALL=C caddy run --config $SNAP_COMMON/Caddyfile else echo "caddy is disabled. Stop service" snapctl stop --disable ${SNAP_NAME}.caddy diff --git a/snap-src/bin/mongodb-backup b/snap-src/bin/mongodb-backup index 210375e17..854000bb5 100755 --- a/snap-src/bin/mongodb-backup +++ b/snap-src/bin/mongodb-backup @@ -9,7 +9,12 @@ if [ -z "$LANG" ]; then fi export LC_ALL=C -export PATH=/snap/${SNAP_NAME}/current/usr/bin:/snap/${SNAP_NAME}/current/bin:$PATH + +# If CPU does not support AVX, use Qemu that supports AVX. +# Migratemongo is at https://github.com/wekan/migratemongo +# and at directory /snap/${SNAP_NAME}/current/migratemongo/avx +# is bash scripts like mongod, mongosh check avx support and use Qemu if needed. +export PATH=/snap/${SNAP_NAME}/current/migratemongo/avx:/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 if [ -z $1 ]; then diff --git a/snap-src/bin/mongodb-control b/snap-src/bin/mongodb-control index 88c8258ba..398597752 100755 --- a/snap-src/bin/mongodb-control +++ b/snap-src/bin/mongodb-control @@ -15,7 +15,11 @@ if [ -z "${LANG}" ]; then fi export LC_ALL=C -export PATH=/snap/${SNAP_NAME}/current/usr/bin:/snap/${SNAP_NAME}/current/bin:${PATH} +# If CPU does not support AVX, use Qemu that supports AVX. +# Migratemongo is at https://github.com/wekan/migratemongo +# and at directory /snap/${SNAP_NAME}/current/migratemongo/avx +# is bash scripts like mongod, mongosh check avx support and use Qemu if needed. +export PATH=/snap/${SNAP_NAME}/current/migratemongo/avx:/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} # If temporary settings log exists, delete it @@ -98,18 +102,18 @@ if [ -z "${MONGO_URL}" ]; then 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 ${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 ${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 ${BIND_OPTIONS} --quiet fi #echo "mongodb log destination: ${MONGO_LOG_DESTINATION}" >> "${SNAP_COMMON}/settings.log" @@ -134,17 +138,17 @@ else 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 ${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 + mongod --dbpath ${SNAP_COMMON} --logpath ${SNAP_COMMON}/mongodb.log --logappend ${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 ${MONGO_URL} --quiet fi # Disable MongoDB telemetry and free monitoring diff --git a/snap-src/bin/mongodb-restore b/snap-src/bin/mongodb-restore index d03ee19e1..b58ed37d6 100755 --- a/snap-src/bin/mongodb-restore +++ b/snap-src/bin/mongodb-restore @@ -9,7 +9,11 @@ if [ -z "$LANG" ]; then fi export LC_ALL=C -export PATH=/snap/${SNAP_NAME}/current/usr/bin:/snap/${SNAP_NAME}/current/bin:$PATH +# If CPU does not support AVX, use Qemu that supports AVX. +# Migratemongo is at https://github.com/wekan/migratemongo +# and at directory /snap/${SNAP_NAME}/current/migratemongo/avx +# is bash scripts like mongod, mongosh check avx support and use Qemu if needed. +export PATH=/snap/${SNAP_NAME}/current/migratemongo/avx:/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 # start mongodb backup diff --git a/snapcraft.yaml b/snapcraft.yaml index 02354285b..fd4495e79 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -1,11 +1,11 @@ name: wekan -version: '7.86' -base: core20 +version: '7.95' +base: core24 summary: Open Source kanban description: | WeKan ® is an Open Source and collaborative kanban board application. - 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. + 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. Depending on target environment, some configuration settings might need to be adjusted. For full list of configuration options call: $ wekan.help @@ -13,8 +13,11 @@ description: | confinement: strict grade: stable -architectures: - - amd64 +# Use platforms instead of architectures for core24 base +platforms: + amd64: + build-on: amd64 + build-for: amd64 plugs: mongodb-plug: @@ -65,63 +68,46 @@ apps: parts: mongodb: - source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.22.tgz + source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-7.0.24.tgz plugin: dump stage-packages: - - libssl1.1 + - libssl3 - libcurl4 - libstemmer0d - zlib1g - libsnappy1v5 - - libyaml-cpp0.6 + - libyaml-cpp0.8 - libpcre3 - libpcrecpp0v5 - - libboost-system1.71.0 - - libboost-iostreams1.71.0 - - libboost-filesystem1.71.0 - - libboost-program-options1.71.0 + - libboost-system1.74.0 + - libboost-iostreams1.74.0 + - libboost-filesystem1.74.0 + - libboost-program-options1.74.0 - libgoogle-perftools4 - filesets: - mongo: - - bin - - usr stage: - - $mongo + - bin + - usr prime: - - $mongo + - bin + - usr mongosh: - source: https://downloads.mongodb.com/compass/mongodb-mongosh_2.1.1_amd64.deb + source: https://downloads.mongodb.com/compass/mongosh-2.5.3-linux-x64.tgz plugin: dump mongotools: - source: https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2004-x86_64-100.9.4.tgz + source: https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2404-x86_64-100.12.2.tgz plugin: dump -# mongodb44: -# source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-4.4.18.tgz -# plugin: dump -# organize: -# bin: mongo44bin -# usr: mongo44usr -# stage: -# - -init - wekan: source: . plugin: npm npm-node-version: 14.21.3 - ## Node.js 14.21.4 from Meteor only exists URL below where it's downloaded and installed. - ## It does not exists in that npm-node-version above. - #npm-packages: - # - node-gyp - # - node-pre-gyp - # - fibers + npm-include-node: true build-packages: - build-essential - ca-certificates - apt-utils -# - python2 - python3 - g++ - capnproto @@ -131,7 +117,7 @@ parts: - execstack - nodejs - npm -# - p7zip-full + - git # Add git for cloning migratemongo stage-packages: - libfontconfig1 override-build: | @@ -170,9 +156,9 @@ parts: # Cleanup mkdir .build cd .build - wget https://github.com/wekan/wekan/releases/download/v7.86/wekan-7.86-amd64.zip - unzip wekan-7.86-amd64.zip - rm wekan-7.86-amd64.zip + wget https://github.com/wekan/wekan/releases/download/v7.95/wekan-7.95-amd64.zip + unzip wekan-7.95-amd64.zip + rm wekan-7.95-amd64.zip cd .. ##cd .build/bundle ##find . -type d -name '*-garbage*' | xargs rm -rf @@ -196,14 +182,14 @@ 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 + + # Migrate MongoDB 3 to 6 - clone directly from git instead of downloading zip + echo "Cloning migratemongo repository..." + git clone https://github.com/wekan/migratemongo.git + echo "Copy migratemongo files to install directory..." 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 # Delete temporary files @@ -228,21 +214,49 @@ parts: plugin: dump caddy: - plugin: dump - ## Caddy v1 is not developed anymore. TODO: Sometime migrate to Caddy v2. - ## https://caddy.community/t/caddyfile-v1-adapter/9129 - ## https://github.com/caddyserver/caddy/tree/v1 - #source: https://caddyserver.com/download/linux/amd64?license=personal&telemetry=off - #source-type: tar - # Using last working binary that was downloaded from above URL to Wekan Snap, - # and .txt files from https://github.com/caddyserver/caddy/tree/v1/dist - source: https://wekan.github.io/caddy-v1-linux-amd64.7z - 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 + plugin: nil + build-packages: + - debian-keyring + - debian-archive-keyring + - apt-transport-https + - gnupg + - curl + override-build: | + # Add Caddy repository + echo "Installing Caddy 2 from the official repository..." + curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /tmp/caddy-stable-archive-keyring.gpg + mkdir -p /etc/apt/keyrings + cp /tmp/caddy-stable-archive-keyring.gpg /etc/apt/keyrings/ + echo "deb [signed-by=/etc/apt/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main" > /etc/apt/sources.list.d/caddy-stable.list + apt update + apt -y install caddy + + # Display installed Caddy version for confirmation + echo "Installed Caddy version:" + /usr/bin/caddy version + + # Create directory structure in the snap + mkdir -p $SNAPCRAFT_PART_INSTALL/bin + + # Copy Caddy binary + cp /usr/bin/caddy $SNAPCRAFT_PART_INSTALL/bin/ + chmod +x $SNAPCRAFT_PART_INSTALL/bin/caddy + + # Create license files manually since they don't exist in the package + mkdir -p $SNAPCRAFT_PART_INSTALL/license + echo "Caddy is licensed under the Apache License 2.0. See https://github.com/caddyserver/caddy/blob/master/LICENSE" > $SNAPCRAFT_PART_INSTALL/license/CADDY_LICENSE + + # Create a basic default Caddyfile for the snap + mkdir -p $SNAPCRAFT_PART_INSTALL/etc + cat > $SNAPCRAFT_PART_INSTALL/etc/Caddyfile << 'EOF' + # Default Caddyfile for Wekan + # This is loaded by caddy-control script if no other config is provided + + :8080 { + reverse_proxy localhost:3000 + } + EOF stage: - - -init + - bin/caddy + - license/CADDY_LICENSE + - etc/Caddyfile diff --git a/start-wekan.bat b/start-wekan.bat index 81624601b..8a4543e08 100644 --- a/start-wekan.bat +++ b/start-wekan.bat @@ -14,7 +14,7 @@ SET MONGO_URL=mongodb://127.0.0.1:27017/wekan REM # If port is 80, must change ROOT_URL to: http://YOUR-WEKAN-SERVER-IPv4-ADDRESS , like http://192.168.0.100 REM # If port is not 80, must change ROOT_URL to: http://YOUR-WEKAN-SERVER-IPv4-ADDRESS:YOUR-PORT-NUMBER , like http://192.168.0.100:2000 REM # If ROOT_URL is not correct, these do not work: translations, uploading attachments. -SET ROOT_URL=http://192.168.0.21 +SET ROOT_URL=http://localhost REM # Must change to YOUR-PORT-NUMBER: SET PORT=80