mirror of
https://github.com/plankanban/planka.git
synced 2026-03-01 11:21:46 +03:00
Compare commits
40 Commits
planka-1.1
...
v2.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bda32e0247 | ||
|
|
168776aef8 | ||
|
|
d84b615815 | ||
|
|
16b228e54e | ||
|
|
0db1a5cf0e | ||
|
|
1d0b3e9af8 | ||
|
|
dabdedf6c4 | ||
|
|
a82ae49fe4 | ||
|
|
e7326303cd | ||
|
|
b2e3aac314 | ||
|
|
8c4859fed5 | ||
|
|
e219e5be42 | ||
|
|
7d613dc171 | ||
|
|
d63cc28f23 | ||
|
|
8898a0f0a2 | ||
|
|
538280d197 | ||
|
|
aa3ebd5add | ||
|
|
f8cd7474d1 | ||
|
|
450bd875c1 | ||
|
|
8df5a111bf | ||
|
|
3c33161df6 | ||
|
|
052edc9fb1 | ||
|
|
6335b3bd3c | ||
|
|
db99227f32 | ||
|
|
a5dc0a64ac | ||
|
|
b37ca68d61 | ||
|
|
31dd816e30 | ||
|
|
d688a64e36 | ||
|
|
2c4369159b | ||
|
|
b2da1a5e18 | ||
|
|
2b699f77f4 | ||
|
|
ee917c545c | ||
|
|
3b8ad26169 | ||
|
|
ffdb7254b3 | ||
|
|
b52604045d | ||
|
|
267fce0505 | ||
|
|
6ec0bafecb | ||
|
|
b2c4c530c6 | ||
|
|
59da747e75 | ||
|
|
1264fd5715 |
@@ -11,24 +11,9 @@ server/test
|
||||
server/.tmp
|
||||
server/.venv
|
||||
|
||||
server/views/*
|
||||
!server/views/.gitkeep
|
||||
server/views/index.ejs
|
||||
|
||||
server/public/*
|
||||
!server/public/preloaded-favicons
|
||||
!server/public/favicons
|
||||
server/public/favicons/*
|
||||
!server/public/favicons/.gitkeep
|
||||
!server/public/user-avatars
|
||||
server/public/user-avatars/*
|
||||
!server/public/user-avatars/.gitkeep
|
||||
!server/public/background-images
|
||||
server/public/background-images/*
|
||||
!server/public/background-images/.gitkeep
|
||||
|
||||
server/private/*
|
||||
!server/private/attachments
|
||||
server/private/attachments/*
|
||||
!server/private/attachments/.gitkeep
|
||||
server/data/*
|
||||
!server/data/.gitkeep
|
||||
|
||||
client/dist
|
||||
|
||||
@@ -12,6 +12,30 @@ jobs:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install client dependencies
|
||||
run: npm install --omit=dev
|
||||
working-directory: ./client
|
||||
|
||||
- name: Build client
|
||||
run: |
|
||||
DISABLE_ESLINT_PLUGIN=true npm run build
|
||||
mv dist build
|
||||
working-directory: ./client
|
||||
|
||||
- name: Update Dockerfile to use prebuilt client
|
||||
run: |
|
||||
sed -i '/^FROM node:22 AS client/,/^ && DISABLE_ESLINT_PLUGIN=true npm run build$/c\
|
||||
FROM node:22 AS client\n\
|
||||
WORKDIR /app\n\
|
||||
COPY client/build /app/dist' Dockerfile
|
||||
cat Dockerfile
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
@@ -40,6 +64,10 @@ jobs:
|
||||
name=ghcr.io/${{ github.repository }}
|
||||
tags: |
|
||||
type=raw,value=${{ steps.set-version.outputs.result }}
|
||||
type=raw,value=latest
|
||||
labels: |
|
||||
org.opencontainers.image.licenses=Fair Use License
|
||||
org.opencontainers.image.url=https://planka.app
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v4
|
||||
|
||||
@@ -17,6 +17,38 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Update version with build number
|
||||
run: |
|
||||
npm version "$(node -p "require('./package.json').version")-nightly.$(git rev-list --count HEAD)" --no-git-tag-version
|
||||
npx --yes genversion --source . --template server/version-template.ejs server/version.js
|
||||
npx --yes genversion --source . --template client/version-template.ejs client/src/version.js
|
||||
|
||||
- name: Install client dependencies
|
||||
run: npm install --omit=dev
|
||||
working-directory: ./client
|
||||
|
||||
- name: Build client
|
||||
run: |
|
||||
DISABLE_ESLINT_PLUGIN=true npm run build
|
||||
mv dist build
|
||||
working-directory: ./client
|
||||
|
||||
- name: Update Dockerfile to use prebuilt client
|
||||
run: |
|
||||
sed -i '/^FROM node:22 AS client/,/^ && DISABLE_ESLINT_PLUGIN=true npm run build$/c\
|
||||
FROM node:22 AS client\n\
|
||||
WORKDIR /app\n\
|
||||
COPY client/build /app/dist' Dockerfile
|
||||
cat Dockerfile
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
@@ -39,6 +71,9 @@ jobs:
|
||||
name=ghcr.io/${{ github.repository }}
|
||||
tags: |
|
||||
type=raw,value=nightly
|
||||
labels: |
|
||||
org.opencontainers.image.licenses=Fair Use License
|
||||
org.opencontainers.image.url=https://planka.app
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v4
|
||||
|
||||
2
.github/workflows/build-and-test.yml
vendored
2
.github/workflows/build-and-test.yml
vendored
@@ -69,7 +69,7 @@ jobs:
|
||||
|
||||
- name: Seed database with terms signature
|
||||
run: |
|
||||
TERMS_SIGNATURE=$(sha256sum terms/en-US/extended.md | awk '{print $1}')
|
||||
TERMS_SIGNATURE=$(sha256sum terms/self-hosted/en-US.md | awk '{print $1}')
|
||||
PGPASSWORD=$POSTGRES_PASSWORD psql -h localhost -U $POSTGRES_USERNAME -d $POSTGRES_DATABASE -c "UPDATE user_account SET terms_signature = '$TERMS_SIGNATURE';"
|
||||
working-directory: ./server
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ RUN npm install npm --global \
|
||||
FROM node:22-alpine
|
||||
|
||||
RUN apk -U upgrade \
|
||||
&& apk add bash python3 --no-cache \
|
||||
&& apk add bash python3 squid --no-cache \
|
||||
&& npm install npm --global
|
||||
|
||||
USER node
|
||||
@@ -44,15 +44,12 @@ COPY --from=client --chown=node:node /app/dist public
|
||||
COPY --from=client --chown=node:node /app/dist/index.html views
|
||||
|
||||
RUN python3 -m venv .venv \
|
||||
&& .venv/bin/pip3 install --upgrade pip \
|
||||
&& .venv/bin/pip3 install -r requirements.txt --no-cache-dir \
|
||||
&& mv .env.sample .env \
|
||||
&& npm config set update-notifier false
|
||||
|
||||
VOLUME /app/public/favicons
|
||||
VOLUME /app/public/user-avatars
|
||||
VOLUME /app/public/background-images
|
||||
VOLUME /app/private/attachments
|
||||
|
||||
VOLUME /app/data
|
||||
EXPOSE 1337
|
||||
|
||||
HEALTHCHECK --interval=10s --timeout=2s --start-period=15s \
|
||||
|
||||
10
README.md
10
README.md
@@ -25,6 +25,16 @@ PLANKA is easy to install using multiple methods - learn more in the [installati
|
||||
|
||||
For configuration and environment settings, see the [configuration section](https://docs.planka.cloud/docs/category/configuration/).
|
||||
|
||||
## Notes App Testing
|
||||
|
||||
The Notes app testing version is available across multiple platforms.
|
||||
|
||||
If you have an iOS device, you can join the TestFlight to try the app: [TestFlight](https://testflight.apple.com/join/5eJqTaJW).
|
||||
|
||||
For Windows and Android, you can find the app here: [PLANKA Notes](https://planka-notes.hillerdaniel.de).
|
||||
|
||||
> ⚠️ The Notes app has currently been tested only with PLANKA v2.
|
||||
|
||||
## Contact
|
||||
|
||||
Interested in a hosted version of PLANKA? Email us at [github@planka.group](mailto:github@planka.group).
|
||||
|
||||
@@ -15,13 +15,13 @@ type: application
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 1.1.2
|
||||
version: 2.0.0
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||
# It is recommended to use it with quotes.
|
||||
appVersion: "2.0.0-rc.4"
|
||||
appVersion: "2.0.0"
|
||||
|
||||
dependencies:
|
||||
- alias: postgresql
|
||||
|
||||
@@ -54,17 +54,8 @@ spec:
|
||||
path: /
|
||||
port: http
|
||||
volumeMounts:
|
||||
- mountPath: /app/public/favicons
|
||||
subPath: favicons
|
||||
name: planka
|
||||
- mountPath: /app/public/user-avatars
|
||||
subPath: user-avatars
|
||||
name: planka
|
||||
- mountPath: /app/public/background-images
|
||||
subPath: background-images
|
||||
name: planka
|
||||
- mountPath: /app/private/attachments
|
||||
subPath: attachments
|
||||
- mountPath: /app/data
|
||||
subPath: data
|
||||
name: planka
|
||||
{{- if .Values.securityContext.readOnlyRootFilesystem }}
|
||||
- mountPath: /app/logs
|
||||
|
||||
4735
client/package-lock.json
generated
4735
client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -78,18 +78,26 @@
|
||||
"^.+\\.(js|jsx)$": "babel-jest"
|
||||
}
|
||||
},
|
||||
"overrides": {
|
||||
"@diplodoc/transform": {
|
||||
"lodash": "^4.17.23"
|
||||
},
|
||||
"react-mentions": {
|
||||
"@babel/runtime": "^7.28.6"
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@ballerina/highlightjs-ballerina": "^1.0.1",
|
||||
"@diplodoc/cut-extension": "^0.7.4",
|
||||
"@diplodoc/cut-extension": "^1.1.1",
|
||||
"@diplodoc/transform": "^4.64.1",
|
||||
"@gravity-ui/components": "^4.17.0",
|
||||
"@gravity-ui/markdown-editor": "^15.27.2",
|
||||
"@gravity-ui/uikit": "^7.29.0",
|
||||
"@gravity-ui/components": "^4.18.0",
|
||||
"@gravity-ui/markdown-editor": "^15.31.0",
|
||||
"@gravity-ui/uikit": "^7.31.1",
|
||||
"@juggle/resize-observer": "^3.4.0",
|
||||
"@vitejs/plugin-react": "^4.7.0",
|
||||
"@vitejs/plugin-react": "^5.1.3",
|
||||
"browserslist-to-esbuild": "^2.1.1",
|
||||
"classnames": "^2.5.1",
|
||||
"date-fns": "^2.30.0",
|
||||
"date-fns": "^4.1.0",
|
||||
"dequal": "^2.0.3",
|
||||
"highlight.js": "^11.11.1",
|
||||
"highlightjs-4d": "^1.0.6",
|
||||
@@ -102,7 +110,7 @@
|
||||
"highlightjs-jolie": "^0.1.8",
|
||||
"highlightjs-lean": "^1.2.0",
|
||||
"highlightjs-lookml": "^1.0.2",
|
||||
"highlightjs-macaulay2": "^0.2.5",
|
||||
"highlightjs-macaulay2": "^0.5.0",
|
||||
"highlightjs-mlir": "^0.0.1",
|
||||
"highlightjs-qsharp": "^1.0.2",
|
||||
"highlightjs-redbol": "^2.1.2",
|
||||
@@ -115,10 +123,10 @@
|
||||
"highlightjs-zenscript": "^2.0.0",
|
||||
"hightlightjs-papyrus": "^0.0.4",
|
||||
"history": "^5.3.0",
|
||||
"i18next": "^25.7.4",
|
||||
"i18next": "^25.8.1",
|
||||
"i18next-browser-languagedetector": "^8.2.0",
|
||||
"initials": "^3.1.2",
|
||||
"javascript-time-ago": "^2.5.12",
|
||||
"javascript-time-ago": "^2.6.2",
|
||||
"js-cookie": "^3.0.5",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"linkify-react": "^4.3.2",
|
||||
@@ -133,54 +141,54 @@
|
||||
"prop-types": "^15.8.1",
|
||||
"react": "18.2.0",
|
||||
"react-beautiful-dnd": "^13.1.1",
|
||||
"react-datepicker": "^4.25.0",
|
||||
"react-datepicker": "^9.1.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-dropzone": "^14.3.8",
|
||||
"react-dropzone": "^14.4.0",
|
||||
"react-frame-component": "^5.2.7",
|
||||
"react-hot-toast": "^2.6.0",
|
||||
"react-i18next": "^15.7.4",
|
||||
"react-i18next": "^16.5.4",
|
||||
"react-input-mask": "^2.0.4",
|
||||
"react-intersection-observer": "^9.16.0",
|
||||
"react-intersection-observer": "^10.0.2",
|
||||
"react-mentions": "^4.4.10",
|
||||
"react-photoswipe-gallery": "^2.2.7",
|
||||
"react-redux": "^8.1.3",
|
||||
"react-router-dom": "^6.30.3",
|
||||
"react-photoswipe-gallery": "^4.0.0",
|
||||
"react-redux": "^9.2.0",
|
||||
"react-router": "^7.13.0",
|
||||
"react-textarea-autosize": "^8.5.9",
|
||||
"react-time-ago": "^7.3.5",
|
||||
"redux": "^4.2.1",
|
||||
"react-time-ago": "^7.4.1",
|
||||
"redux": "^5.0.1",
|
||||
"redux-logger": "^3.0.6",
|
||||
"redux-orm": "^0.16.2",
|
||||
"redux-saga": "^1.4.2",
|
||||
"reselect": "^4.1.8",
|
||||
"reselect": "^5.1.1",
|
||||
"sails.io.js": "^1.2.1",
|
||||
"sass-embedded": "^1.97.2",
|
||||
"sass-embedded": "^1.97.3",
|
||||
"semantic-ui-react": "^2.1.5",
|
||||
"socket.io-client": "^2.5.0",
|
||||
"socket.io-client": "^4.8.3",
|
||||
"validator": "^13.15.26",
|
||||
"vite": "^6.4.1",
|
||||
"vite": "^7.3.1",
|
||||
"vite-plugin-commonjs": "^0.10.4",
|
||||
"vite-plugin-node-polyfills": "^0.23.0",
|
||||
"vite-plugin-node-polyfills": "^0.25.0",
|
||||
"vite-plugin-svgr": "^4.5.0",
|
||||
"zxcvbn": "^4.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/eslint-parser": "^7.28.6",
|
||||
"@babel/preset-env": "^7.28.6",
|
||||
"@cucumber/cucumber": "^11.3.0",
|
||||
"@cucumber/pretty-formatter": "^1.0.1",
|
||||
"@playwright/test": "^1.57.0",
|
||||
"babel-jest": "^29.7.0",
|
||||
"@babel/preset-env": "^7.29.0",
|
||||
"@cucumber/cucumber": "^12.6.0",
|
||||
"@cucumber/pretty-formatter": "^3.0.0",
|
||||
"@playwright/test": "^1.58.1",
|
||||
"babel-jest": "^30.2.0",
|
||||
"babel-preset-airbnb": "^5.0.0",
|
||||
"eslint": "^8.57.1",
|
||||
"eslint-config-airbnb": "^19.0.4",
|
||||
"eslint-config-prettier": "^9.1.2",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
"eslint-plugin-prettier": "^5.5.5",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"eslint-plugin-react-hooks": "^4.6.2",
|
||||
"jest": "^29.7.0",
|
||||
"playwright": "^1.57.0",
|
||||
"prettier": "3.3.3"
|
||||
"jest": "^30.2.0",
|
||||
"playwright": "^1.58.0",
|
||||
"prettier": "3.8.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/node_modules/@gravity-ui/markdown-editor/build/esm/bundle/wysiwyg-preset.js b/node_modules/@gravity-ui/markdown-editor/build/esm/bundle/wysiwyg-preset.js
|
||||
index 288d462..8851e98 100644
|
||||
index dec01f0..a80b857 100644
|
||||
--- a/node_modules/@gravity-ui/markdown-editor/build/esm/bundle/wysiwyg-preset.js
|
||||
+++ b/node_modules/@gravity-ui/markdown-editor/build/esm/bundle/wysiwyg-preset.js
|
||||
@@ -102,7 +102,6 @@ export const BundlePreset = (builder, opts) => {
|
||||
@@ -1,13 +0,0 @@
|
||||
diff --git a/node_modules/react-photoswipe-gallery/dist/gallery.js b/node_modules/react-photoswipe-gallery/dist/gallery.js
|
||||
index 53cc02c..f4baccb 100644
|
||||
--- a/node_modules/react-photoswipe-gallery/dist/gallery.js
|
||||
+++ b/node_modules/react-photoswipe-gallery/dist/gallery.js
|
||||
@@ -181,7 +181,7 @@ export const Gallery = ({
|
||||
alt
|
||||
} = pswpInstance.currSlide.data;
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
- el.innerHTML = caption || alt || '';
|
||||
+ el.textContent = caption || alt || '';
|
||||
});
|
||||
}
|
||||
});
|
||||
87
client/patches/sails.io.js+1.2.1.patch
Normal file
87
client/patches/sails.io.js+1.2.1.patch
Normal file
@@ -0,0 +1,87 @@
|
||||
diff --git a/node_modules/sails.io.js/sails.io.js b/node_modules/sails.io.js/sails.io.js
|
||||
index 11694b5..bb5e594 100644
|
||||
--- a/node_modules/sails.io.js/sails.io.js
|
||||
+++ b/node_modules/sails.io.js/sails.io.js
|
||||
@@ -138,6 +138,15 @@
|
||||
CONNECTION_METADATA_PARAMS.platform + '=' + SDK_INFO.platform + '&' +
|
||||
CONNECTION_METADATA_PARAMS.language + '=' + SDK_INFO.language;
|
||||
|
||||
+ var MANAGER_EVENT_NAMES = new Set([
|
||||
+ 'error',
|
||||
+ 'reconnect',
|
||||
+ 'reconnect_attempt',
|
||||
+ 'reconnect_error',
|
||||
+ 'reconnect_failed',
|
||||
+ 'ping'
|
||||
+ ]);
|
||||
+
|
||||
|
||||
|
||||
|
||||
@@ -668,6 +677,7 @@
|
||||
// Okay to change global headers while socket is connected
|
||||
if (option == 'headers') {return;}
|
||||
Object.defineProperty(self, option, {
|
||||
+ enumerable: true,
|
||||
get: function() {
|
||||
if (option == 'url') {
|
||||
return _opts[option] || (self._raw && self._raw.io && self._raw.io.uri);
|
||||
@@ -986,7 +996,7 @@
|
||||
consolog('====================================');
|
||||
});
|
||||
|
||||
- self.on('reconnecting', function(numAttempts) {
|
||||
+ self.on('reconnect_attempt', function(numAttempts) {
|
||||
consolog(
|
||||
'\n'+
|
||||
' Socket is trying to reconnect to '+(self.url ? self.url : 'Sails')+'...\n'+
|
||||
@@ -1124,7 +1134,7 @@
|
||||
// off to the self._raw for consumption
|
||||
for (var evName in self.eventQueue) {
|
||||
for (var i in self.eventQueue[evName]) {
|
||||
- self._raw.on(evName, self.eventQueue[evName][i]);
|
||||
+ self._getEventTarget(evName).on(evName, self.eventQueue[evName][i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1150,10 +1160,11 @@
|
||||
* @return {SailsSocket}
|
||||
*/
|
||||
SailsSocket.prototype.on = function (evName, fn){
|
||||
+ var target = this._getEventTarget(evName);
|
||||
|
||||
// Bind the event to the raw underlying socket if possible.
|
||||
- if (this._raw) {
|
||||
- this._raw.on(evName, fn);
|
||||
+ if (target) {
|
||||
+ target.on(evName, fn);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -1176,10 +1187,11 @@
|
||||
* @return {SailsSocket}
|
||||
*/
|
||||
SailsSocket.prototype.off = function (evName, fn){
|
||||
+ var target = this._getEventTarget(evName);
|
||||
|
||||
// Bind the event to the raw underlying socket if possible.
|
||||
- if (this._raw) {
|
||||
- this._raw.off(evName, fn);
|
||||
+ if (target) {
|
||||
+ target.off(evName, fn);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -1491,6 +1503,12 @@
|
||||
throw new Error('`_request()` was a private API deprecated as of v0.11 of the sails.io.js client. Use `.request()` instead.');
|
||||
};
|
||||
|
||||
+ SailsSocket.prototype._getEventTarget = function (evName) {
|
||||
+ if (!this._raw) return null;
|
||||
+
|
||||
+ return MANAGER_EVENT_NAMES.has(evName) ? this._raw.io : this._raw;
|
||||
+ };
|
||||
+
|
||||
|
||||
|
||||
|
||||
17
client/src/actions/bootstrap.js
vendored
Normal file
17
client/src/actions/bootstrap.js
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import ActionTypes from '../constants/ActionTypes';
|
||||
|
||||
const handleBootstrapUpdate = (bootstrap) => ({
|
||||
type: ActionTypes.BOOTSTRAP_UPDATE_HANDLE,
|
||||
payload: {
|
||||
bootstrap,
|
||||
},
|
||||
});
|
||||
|
||||
export default {
|
||||
handleBootstrapUpdate,
|
||||
};
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
import router from './router';
|
||||
import socket from './socket';
|
||||
import bootstrap from './bootstrap';
|
||||
import login from './login';
|
||||
import core from './core';
|
||||
import modals from './modals';
|
||||
@@ -34,6 +35,7 @@ import notificationServices from './notification-services';
|
||||
export default {
|
||||
...router,
|
||||
...socket,
|
||||
...bootstrap,
|
||||
...login,
|
||||
...core,
|
||||
...modals,
|
||||
|
||||
@@ -54,6 +54,13 @@ authenticateWithOidc.failure = (error, terms) => ({
|
||||
},
|
||||
});
|
||||
|
||||
authenticateWithOidc.debug = (logs) => ({
|
||||
type: ActionTypes.WITH_OIDC_AUTHENTICATE__DEBUG,
|
||||
payload: {
|
||||
logs,
|
||||
},
|
||||
});
|
||||
|
||||
const clearAuthenticateError = () => ({
|
||||
type: ActionTypes.AUTHENTICATE_ERROR_CLEAR,
|
||||
payload: {},
|
||||
|
||||
@@ -5,6 +5,13 @@
|
||||
|
||||
import ActionTypes from '../constants/ActionTypes';
|
||||
|
||||
const handleUsersReset = (users) => ({
|
||||
type: ActionTypes.USERS_RESET_HANDLE,
|
||||
payload: {
|
||||
users,
|
||||
},
|
||||
});
|
||||
|
||||
const createUser = (data) => ({
|
||||
type: ActionTypes.USER_CREATE,
|
||||
payload: {
|
||||
@@ -399,6 +406,7 @@ const removeUserFromBoardFilter = (id, boardId, currentListId) => ({
|
||||
});
|
||||
|
||||
export default {
|
||||
handleUsersReset,
|
||||
createUser,
|
||||
handleUserCreate,
|
||||
clearUserCreateError,
|
||||
|
||||
@@ -13,6 +13,8 @@ const createAccessToken = (data, headers) =>
|
||||
const exchangeForAccessTokenWithOidc = (data, headers) =>
|
||||
http.post('/access-tokens/exchange-with-oidc?withHttpOnlyToken=true', data, headers);
|
||||
|
||||
const debugOidc = (data, headers) => http.post('/access-tokens/debug-oidc', data, headers);
|
||||
|
||||
// TODO: rename?
|
||||
const acceptTerms = (data, headers) => http.post('/access-tokens/accept-terms', data, headers);
|
||||
|
||||
@@ -24,6 +26,7 @@ const deleteCurrentAccessToken = (headers) => http.delete('/access-tokens/me', u
|
||||
export default {
|
||||
createAccessToken,
|
||||
exchangeForAccessTokenWithOidc,
|
||||
debugOidc,
|
||||
acceptTerms,
|
||||
revokePendingToken,
|
||||
deleteCurrentAccessToken,
|
||||
|
||||
@@ -7,8 +7,8 @@ import http from './http';
|
||||
|
||||
/* Actions */
|
||||
|
||||
const getTerms = (type, language, headers) =>
|
||||
http.get(`/terms/${type}${language ? `?language=${language}` : ''}`, undefined, headers);
|
||||
const getTerms = (language, headers) =>
|
||||
http.get(`/terms${language ? `?language=${language}` : ''}`, undefined, headers);
|
||||
|
||||
export default {
|
||||
getTerms,
|
||||
|
||||
@@ -1,84 +1,151 @@
|
||||
## [2.4.0] - 2025-03-22
|
||||
## [2.0.0] - 2026-02-11
|
||||
|
||||
### Added
|
||||
|
||||
* Lorem ipsum dolor sit amet consectetur adipiscing elit.
|
||||
* Sed do eiusmod tempor incididunt ut labore et dolore magna.
|
||||
* Ut enim ad minim veniam quis nostrud exercitation ullamco.
|
||||
* Mention users in comments
|
||||
* Add download button for file attachments
|
||||
* Enable strikethrough for cards in closed lists
|
||||
* Expand card descriptions
|
||||
* Enable copy-to-clipboard for custom fields
|
||||
* Include task assignees in member filters
|
||||
* Link tasks to cards
|
||||
* Open card actions menu on right-click
|
||||
* Hide completed tasks
|
||||
* Add dedicated button to make projects private
|
||||
* Track navigation paths when switching cards
|
||||
* Support OAuth callbacks for OIDC
|
||||
* Display legal requirements in the app
|
||||
* Track storage usage
|
||||
* Move lists between boards
|
||||
* Restore toggleable due dates
|
||||
* Add Gravatar support for avatars
|
||||
* Add board setting to expand task lists by default
|
||||
* Configure and test SMTP via UI
|
||||
* Add API key authentication
|
||||
* Add create-board button on the open-board screen
|
||||
* Support object-path mapping for OIDC attributes
|
||||
* Add basic keyboard shortcuts for cards
|
||||
* Enable copy/cut cards with keyboard shortcuts
|
||||
* Enhance card actions menu with separators and action bar
|
||||
* Display last updates in the About modal
|
||||
* Allow unlinking SSO from user accounts
|
||||
* Apply color to entire lists instead of only card bottoms
|
||||
|
||||
### Changed
|
||||
|
||||
* Duis aute irure dolor in reprehenderit in voluptate velit esse.
|
||||
* Excepteur sint occaecat cupidatat non proident sunt in culpa.
|
||||
* Move webhooks configuration to UI
|
||||
* Parse dates as UTC without relying on TZ environment variable
|
||||
* Move About and Terms into a separate modal
|
||||
* Move infrequent card actions to a more-actions menu
|
||||
* Improve error page display
|
||||
* Enable favorites panel by default
|
||||
* Improve login page appearance
|
||||
* Enhance Markdown editor (colors, quote borders, disable fuzzy links)
|
||||
* Improve PDF viewer compatibility across browsers
|
||||
* Update background color for own comments
|
||||
* Improve browser caching for public files and attachments
|
||||
* Optimize and parallelize image processing tasks
|
||||
* Re-stream static files from S3 with protected access
|
||||
* Unify file storage directory
|
||||
* Configure proxy for outgoing traffic to prevent SSRF
|
||||
|
||||
### Fixed
|
||||
|
||||
* Nulla pariatur consectetur adipiscing elit sed do eiusmod.
|
||||
* Tempor incididunt ut labore et dolore magna aliqua enim.
|
||||
* Prevent editors from deleting other comments
|
||||
* Handle escape actions in mentions input correctly
|
||||
* Prevent text overflow in activities
|
||||
* Prevent deactivated users from receiving notifications
|
||||
* Preserve newlines in markdown with mentions
|
||||
* Fix app crash when boards are added before their projects
|
||||
* Enable spellcheck on all textareas
|
||||
* Fix multiple UI, toolbar, and popup styling issues
|
||||
* Limit attachment gallery content to prevent layout issues
|
||||
* Correct translations for client, server, and Markdown editor
|
||||
* Fix minor UI issues
|
||||
|
||||
---
|
||||
|
||||
## [2.3.2] - 2025-02-18
|
||||
## [2.0.0-rc.4] - 2025-09-04
|
||||
|
||||
### Fixed
|
||||
|
||||
* Minim veniam quis nostrud exercitation ullamco laboris nisi.
|
||||
* Aliquip ex ea commodo consequat duis aute irure dolor.
|
||||
* Prevent vulnerability where maliciously renamed file attachments could execute JavaScript in the gallery UI
|
||||
|
||||
---
|
||||
|
||||
## [2.3.0] - 2025-01-29
|
||||
## [2.0.0-rc.3] - 2025-05-28
|
||||
|
||||
### Added
|
||||
|
||||
* Reprehenderit in voluptate velit esse cillum dolore eu fugiat.
|
||||
* Excepteur sint occaecat cupidatat non proident culpa qui officia.
|
||||
* Notify users when they are added to a card
|
||||
* Emphasize cards in colored and closed lists
|
||||
* Track board activity log changes
|
||||
* Display total number of comments on cards
|
||||
* Add CSV attachment viewer
|
||||
* Log actions when a user is removed from a card
|
||||
* Log actions when task completion status changes
|
||||
* Support Docker secrets
|
||||
|
||||
### Changed
|
||||
|
||||
* Deserunt mollit anim id est laborum sed ut perspiciatis.
|
||||
|
||||
### Deprecated
|
||||
|
||||
* Unde omnis iste natus error sit voluptatem accusantium doloremque.
|
||||
|
||||
---
|
||||
|
||||
## [2.2.0] - 2024-12-14
|
||||
|
||||
### Added
|
||||
|
||||
* Totam rem aperiam eaque ipsa quae ab illo inventore veritatis.
|
||||
* Quasi architecto beatae vitae dicta sunt explicabo nemo.
|
||||
|
||||
### Changed
|
||||
|
||||
* Enim ipsam voluptatem quia voluptas sit aspernatur aut odit.
|
||||
* Consequuntur magni dolores eos qui ratione voluptatem sequi.
|
||||
* Improve notifications popup appearance
|
||||
* Improve card content rendering and styling
|
||||
* Limit attachment content display for clarity
|
||||
* Increase maximum length of OIDC code challenge
|
||||
|
||||
### Fixed
|
||||
|
||||
* Neque porro quisquam est qui dolorem ipsum quia dolor.
|
||||
* Fix disabled cards display
|
||||
* Correct translations for client, server, and Markdown editor
|
||||
* Fix minor UI issues
|
||||
|
||||
---
|
||||
|
||||
## [2.1.0] - 2024-10-05
|
||||
## [2.0.0-rc.2] - 2025-05-10
|
||||
|
||||
### Added
|
||||
|
||||
* Adipisci velit sed quia non numquam eius modi tempora incidunt.
|
||||
* Ut labore et dolore magnam aliquam quaerat voluptatem neque.
|
||||
* Add global user roles and improve user management
|
||||
* Enable user deactivation
|
||||
* Support private and shared projects
|
||||
* Search projects by name and project groups
|
||||
* Add favorite projects with favorites panel
|
||||
* Add project descriptions and background image gallery
|
||||
* Add list types: Closed, Archive, Trash
|
||||
* Add board views: List and Grid
|
||||
* Add new Markdown editor
|
||||
* Link attachments (attach URLs)
|
||||
* Enable quick filter by current user
|
||||
* Add board settings modal
|
||||
* Subscribe to entire boards
|
||||
* Assign users to tasks
|
||||
* Support multiple task lists
|
||||
* Add more label colors
|
||||
* Always display card creator option
|
||||
* Show notification badge for board tabs
|
||||
* Display message about new version availability
|
||||
|
||||
---
|
||||
### Changed
|
||||
|
||||
## [2.0.0] - 2024-08-20
|
||||
* Restrict access to users based on global roles
|
||||
* Limit email visibility
|
||||
* Make projects page responsive
|
||||
* Redesign card appearance
|
||||
* Show edit buttons only when needed
|
||||
* Use time-ago format for dates
|
||||
* Highlight recent cards
|
||||
* Improve attachment viewers and syntax highlighting
|
||||
* Restyle comments
|
||||
* Restyle login page
|
||||
* Enable user auto-subscription when commenting
|
||||
* Navigate to adjacent cards using arrow keys
|
||||
* Open same-site links in current tab
|
||||
* Improve card deletion workflow
|
||||
* Archive all cards in a closed list with one button
|
||||
* Confirm deletion actions
|
||||
* Close only active elements when clicking outside
|
||||
|
||||
### Added
|
||||
### Fixed
|
||||
|
||||
* Porro quisquam est qui dolorem ipsum quia dolor sit amet.
|
||||
* Consectetur adipisci velit sed quia non numquam eius modi.
|
||||
* Tempora incidunt ut labore et dolore magnam aliquam quaerat.
|
||||
|
||||
### Removed
|
||||
|
||||
* Voluptatem neque porro quisquam est qui dolorem ipsum quia.
|
||||
* Prevent deleting the last project manager
|
||||
* Prevent deleting projects with existing boards
|
||||
|
||||
@@ -7,7 +7,7 @@ import React, { useMemo } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useTranslation, Trans } from 'react-i18next';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Link } from 'react-router';
|
||||
import { Comment } from 'semantic-ui-react';
|
||||
|
||||
import selectors from '../../../selectors';
|
||||
|
||||
@@ -7,7 +7,7 @@ import React, { useCallback, useMemo } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Link } from 'react-router';
|
||||
import { Draggable } from 'react-beautiful-dnd';
|
||||
import { Button, Icon } from 'semantic-ui-react';
|
||||
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import upperFirst from 'lodash/upperFirst';
|
||||
import camelCase from 'lodash/camelCase';
|
||||
import React, { useCallback, useContext, useMemo, useRef, useState } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
@@ -25,15 +23,12 @@ import EditName from './EditName';
|
||||
import CardActionsStep from '../CardActionsStep';
|
||||
|
||||
import styles from './Card.module.scss';
|
||||
import globalStyles from '../../../styles.module.scss';
|
||||
|
||||
const Card = React.memo(({ id, isInline }) => {
|
||||
const selectCardById = useMemo(() => selectors.makeSelectCardById(), []);
|
||||
const selectIsCardWithIdRecent = useMemo(() => selectors.makeSelectIsCardWithIdRecent(), []);
|
||||
const selectListById = useMemo(() => selectors.makeSelectListById(), []);
|
||||
|
||||
const card = useSelector((state) => selectCardById(state, id));
|
||||
const list = useSelector((state) => selectListById(state, card.listId));
|
||||
|
||||
const isHighlightedAsRecent = useSelector((state) => {
|
||||
const { turnOffRecentCardHighlighting } = selectors.selectCurrentUser(state);
|
||||
@@ -133,15 +128,6 @@ const Card = React.memo(({ id, isInline }) => {
|
||||
}
|
||||
}
|
||||
|
||||
const colorLineNode = list.color && (
|
||||
<div
|
||||
className={classNames(
|
||||
styles.colorLine,
|
||||
globalStyles[`background${upperFirst(camelCase(list.color))}`],
|
||||
)}
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
<div
|
||||
className={classNames(styles.wrapper, isHighlightedAsRecent && styles.wrapperRecent, 'card')}
|
||||
@@ -162,7 +148,6 @@ const Card = React.memo(({ id, isInline }) => {
|
||||
onContextMenu={handleContextMenu}
|
||||
>
|
||||
<Content cardId={id} />
|
||||
{colorLineNode}
|
||||
</div>
|
||||
{canUseActions && (
|
||||
<CardActionsPopup ref={actionsPopupRef} cardId={id} onNameEdit={handleNameEdit}>
|
||||
@@ -175,7 +160,6 @@ const Card = React.memo(({ id, isInline }) => {
|
||||
) : (
|
||||
<span className={classNames(styles.content, card.isClosed && styles.contentDisabled)}>
|
||||
<Content cardId={id} />
|
||||
{colorLineNode}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -29,11 +29,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.colorLine {
|
||||
border-radius: 0 0 3px 3px;
|
||||
height: 4px;
|
||||
}
|
||||
|
||||
.content {
|
||||
cursor: pointer;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import React, { useCallback, useMemo } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Link } from 'react-router';
|
||||
import { Icon } from 'semantic-ui-react';
|
||||
|
||||
import selectors from '../../../../selectors';
|
||||
|
||||
@@ -40,7 +40,7 @@ const AboutPane = React.memo(() => {
|
||||
<a href="https://github.com/plankanban/planka" target="_blank" rel="noreferrer">
|
||||
<Image centered src={aboutLogo} size="large" />
|
||||
</a>
|
||||
<div className={styles.version}>{version}</div>
|
||||
<div className={styles.version}>Community v{version}</div>
|
||||
<Divider horizontal>
|
||||
<Header as="h4">
|
||||
{t('common.whatsNew', {
|
||||
|
||||
@@ -4,19 +4,15 @@
|
||||
*/
|
||||
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Loader, Tab } from 'semantic-ui-react';
|
||||
|
||||
import selectors from '../../../selectors';
|
||||
import api from '../../../api';
|
||||
import Markdown from '../Markdown';
|
||||
|
||||
import styles from './TermsPane.module.scss';
|
||||
|
||||
const TermsPane = React.memo(() => {
|
||||
const type = useSelector((state) => selectors.selectCurrentUser(state).termsType);
|
||||
|
||||
const { i18n } = useTranslation();
|
||||
const [content, setContent] = useState(null);
|
||||
|
||||
@@ -24,7 +20,7 @@ const TermsPane = React.memo(() => {
|
||||
async function fetchTerms() {
|
||||
let terms;
|
||||
try {
|
||||
({ item: terms } = await api.getTerms(type, i18n.resolvedLanguage));
|
||||
({ item: terms } = await api.getTerms(i18n.resolvedLanguage));
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
@@ -33,7 +29,7 @@ const TermsPane = React.memo(() => {
|
||||
}
|
||||
|
||||
fetchTerms();
|
||||
}, [type, i18n.resolvedLanguage]);
|
||||
}, [i18n.resolvedLanguage]);
|
||||
|
||||
return (
|
||||
<Tab.Pane attached={false} className={styles.wrapper}>
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
*/
|
||||
|
||||
import { dequal } from 'dequal';
|
||||
import React, { useCallback, useMemo } from 'react';
|
||||
import omit from 'lodash/omit';
|
||||
import React, { useCallback, useMemo, useRef } from 'react';
|
||||
import classNames from 'classnames';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
@@ -26,6 +27,7 @@ const SmtpPane = React.memo(() => {
|
||||
const [t] = useTranslation();
|
||||
|
||||
const [passwordFieldRef, handlePasswordFieldRef] = useNestedRef('inputRef');
|
||||
const isPasswordTouchedRef = useRef(false);
|
||||
|
||||
const defaultData = useMemo(
|
||||
() => ({
|
||||
@@ -68,7 +70,15 @@ const SmtpPane = React.memo(() => {
|
||||
[data, isPasswordSet],
|
||||
);
|
||||
|
||||
const isModified = useMemo(() => {
|
||||
const cleanDataToCheck = omit(cleanData, 'smtpPassword');
|
||||
const defaultDataToCheck = omit(defaultData, 'smtpPassword');
|
||||
|
||||
return !dequal(cleanDataToCheck, defaultDataToCheck) || isPasswordTouchedRef.current;
|
||||
}, [defaultData, cleanData]);
|
||||
|
||||
const handleSubmit = useCallback(() => {
|
||||
isPasswordTouchedRef.current = false;
|
||||
dispatch(entryActions.updateConfig(cleanData));
|
||||
}, [dispatch, cleanData]);
|
||||
|
||||
@@ -86,7 +96,13 @@ const SmtpPane = React.memo(() => {
|
||||
dispatch(entryActions.testSmtpConfig());
|
||||
}, [dispatch]);
|
||||
|
||||
const isModified = !dequal(cleanData, defaultData);
|
||||
const handlePasswordChange = useCallback(
|
||||
(event, { value, ...props }) => {
|
||||
isPasswordTouchedRef.current = value !== '';
|
||||
handleFieldChange(event, { value, ...props });
|
||||
},
|
||||
[handleFieldChange],
|
||||
);
|
||||
|
||||
return (
|
||||
<Tab.Pane attached={false} className={styles.wrapper}>
|
||||
@@ -173,7 +189,7 @@ const SmtpPane = React.memo(() => {
|
||||
maxLength={256}
|
||||
className={styles.field}
|
||||
onClear={!data.smtpPassword && isPasswordSet ? handlePasswordClear : undefined}
|
||||
onChange={handleFieldChange}
|
||||
onChange={handlePasswordChange}
|
||||
/>
|
||||
<div className={styles.text}>
|
||||
{t('common.defaultFrom')} (
|
||||
|
||||
@@ -30,6 +30,7 @@ const StepTypes = {
|
||||
EDIT_PASSWORD: 'EDIT_PASSWORD',
|
||||
EDIT_ROLE: 'EDIT_ROLE',
|
||||
API_KEY: 'API_KEY',
|
||||
UNLINK_SSO: 'UNLINK_SSO',
|
||||
ACTIVATE: 'ACTIVATE',
|
||||
DEACTIVATE: 'DEACTIVATE',
|
||||
DELETE: 'DELETE',
|
||||
@@ -38,8 +39,8 @@ const StepTypes = {
|
||||
const ActionsStep = React.memo(({ userId, onClose }) => {
|
||||
const selectUserById = useMemo(() => selectors.makeSelectUserById(), []);
|
||||
|
||||
const activeUserLimit = useSelector(selectors.selectActiveUserLimit);
|
||||
const activeUserTotal = useSelector(selectors.selectActiveUserTotal);
|
||||
const activeUsersLimit = useSelector(selectors.selectActiveUsersLimit);
|
||||
const activeUsersTotal = useSelector(selectors.selectActiveUsersTotal);
|
||||
const user = useSelector((state) => selectUserById(state, userId));
|
||||
const isCurrentUser = useSelector((state) => user.id === selectors.selectCurrentUserId(state));
|
||||
|
||||
@@ -58,6 +59,16 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
|
||||
[userId, dispatch],
|
||||
);
|
||||
|
||||
const handleUnlinkSsoConfirm = useCallback(() => {
|
||||
dispatch(
|
||||
entryActions.updateUser(userId, {
|
||||
isSsoUser: false,
|
||||
}),
|
||||
);
|
||||
|
||||
onClose();
|
||||
}, [userId, onClose, dispatch]);
|
||||
|
||||
const handleActivateConfirm = useCallback(() => {
|
||||
dispatch(
|
||||
entryActions.updateUser(userId, {
|
||||
@@ -106,6 +117,10 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
|
||||
openStep(StepTypes.API_KEY);
|
||||
}, [openStep]);
|
||||
|
||||
const handleUnlinkSsoClick = useCallback(() => {
|
||||
openStep(StepTypes.UNLINK_SSO);
|
||||
}, [openStep]);
|
||||
|
||||
const handleActivateClick = useCallback(() => {
|
||||
openStep(StepTypes.ACTIVATE);
|
||||
}, [openStep]);
|
||||
@@ -142,6 +157,16 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
|
||||
);
|
||||
case StepTypes.API_KEY:
|
||||
return <ApiKeyStep userId={userId} onBack={handleBack} onClose={onClose} />;
|
||||
case StepTypes.UNLINK_SSO:
|
||||
return (
|
||||
<ConfirmationStep
|
||||
title="common.unlinkSso"
|
||||
content="common.areYouSureYouWantToUnlinkSsoFromThisUser"
|
||||
buttonContent="action.unlinkSso"
|
||||
onConfirm={handleUnlinkSsoConfirm}
|
||||
onBack={handleBack}
|
||||
/>
|
||||
);
|
||||
case StepTypes.ACTIVATE:
|
||||
return (
|
||||
<ConfirmationStep
|
||||
@@ -232,13 +257,21 @@ const ActionsStep = React.memo(({ userId, onClose }) => {
|
||||
context: 'title',
|
||||
})}
|
||||
</Menu.Item>
|
||||
{user.isSsoUser && !user.lockedFieldNames.includes('isSsoUser') && !isCurrentUser && (
|
||||
<Menu.Item className={styles.menuItem} onClick={handleUnlinkSsoClick}>
|
||||
<Icon name="unlink" className={styles.menuItemIcon} />
|
||||
{t('action.unlinkSso', {
|
||||
context: 'title',
|
||||
})}
|
||||
</Menu.Item>
|
||||
)}
|
||||
{!isCurrentUser && (
|
||||
<>
|
||||
<Menu.Item
|
||||
disabled={
|
||||
user.isDeactivated &&
|
||||
activeUserLimit !== null &&
|
||||
activeUserTotal >= activeUserLimit
|
||||
activeUsersLimit !== null &&
|
||||
activeUsersTotal >= activeUsersLimit
|
||||
}
|
||||
className={styles.menuItem}
|
||||
onClick={user.isDeactivated ? handleActivateClick : handleDeactivateClick}
|
||||
|
||||
@@ -17,8 +17,8 @@ import AddStep from './AddStep';
|
||||
import styles from './UsersPane.module.scss';
|
||||
|
||||
const UsersPane = React.memo(() => {
|
||||
const activeUserTotal = useSelector(selectors.selectActiveUserTotal);
|
||||
const activeUserLimit = useSelector(selectors.selectActiveUserLimit);
|
||||
const activeUsersLimit = useSelector(selectors.selectActiveUsersLimit);
|
||||
const activeUsersTotal = useSelector(selectors.selectActiveUsersTotal);
|
||||
const users = useSelector(selectors.selectUsers);
|
||||
|
||||
const canAdd = useSelector((state) => {
|
||||
@@ -106,13 +106,13 @@ const UsersPane = React.memo(() => {
|
||||
<AddPopup>
|
||||
<Button
|
||||
positive
|
||||
disabled={activeUserLimit !== null && activeUserTotal >= activeUserLimit}
|
||||
disabled={activeUsersLimit !== null && activeUsersTotal >= activeUsersLimit}
|
||||
className={styles.addButton}
|
||||
>
|
||||
{t('action.addUser')}
|
||||
{activeUserLimit !== null && (
|
||||
{activeUsersLimit !== null && (
|
||||
<span className={styles.addButtonCounter}>
|
||||
{activeUserTotal}/{activeUserLimit}
|
||||
{activeUsersTotal}/{activeUsersLimit}
|
||||
</span>
|
||||
)}
|
||||
</Button>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import React, { useCallback } from 'react';
|
||||
import classNames from 'classnames';
|
||||
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Link } from 'react-router';
|
||||
import { Button, Icon, Menu } from 'semantic-ui-react';
|
||||
import { usePopup } from '../../../lib/popup';
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@ import React, { useCallback, useEffect, useMemo } from 'react';
|
||||
import classNames from 'classnames';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { useTranslation, Trans } from 'react-i18next';
|
||||
import { Button, Divider, Form, Grid, Header, Message } from 'semantic-ui-react';
|
||||
import TextareaAutosize from 'react-textarea-autosize';
|
||||
import { Button, Divider, Form, Grid, Header, Message, TextArea } from 'semantic-ui-react';
|
||||
import { useDidUpdate, usePrevious, useToggle } from '../../../lib/hooks';
|
||||
import { Input } from '../../../lib/custom-ui';
|
||||
|
||||
@@ -23,7 +24,7 @@ import logo from '../../../assets/images/logo.png';
|
||||
|
||||
import styles from './Content.module.scss';
|
||||
|
||||
const createMessage = (error) => {
|
||||
const createMessage = (error, isDebug) => {
|
||||
if (!error) {
|
||||
return error;
|
||||
}
|
||||
@@ -64,10 +65,10 @@ const createMessage = (error) => {
|
||||
type: 'error',
|
||||
content: 'common.usernameAlreadyInUse',
|
||||
};
|
||||
case 'Active user limit reached':
|
||||
case 'Active users limit reached':
|
||||
return {
|
||||
type: 'error',
|
||||
content: 'common.activeUserLimitReached',
|
||||
content: 'common.activeUsersLimitReached',
|
||||
};
|
||||
case 'Failed to fetch':
|
||||
return {
|
||||
@@ -82,7 +83,7 @@ const createMessage = (error) => {
|
||||
default:
|
||||
return {
|
||||
type: 'warning',
|
||||
content: 'common.unknownError',
|
||||
content: isDebug ? error.message : 'common.unknownError',
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -95,6 +96,7 @@ const Content = React.memo(() => {
|
||||
isSubmitting,
|
||||
isSubmittingWithOidc,
|
||||
error,
|
||||
debugLogs,
|
||||
step,
|
||||
} = useSelector(selectors.selectAuthenticateForm);
|
||||
|
||||
@@ -102,13 +104,33 @@ const Content = React.memo(() => {
|
||||
const [t] = useTranslation();
|
||||
const wasSubmitting = usePrevious(isSubmitting);
|
||||
|
||||
const [data, handleFieldChange, setData] = useForm(() => ({
|
||||
emailOrUsername: '',
|
||||
password: '',
|
||||
...defaultData,
|
||||
}));
|
||||
const [data, handleFieldChange, setData] = useForm(() => {
|
||||
const initialData = {
|
||||
emailOrUsername: '',
|
||||
password: '',
|
||||
...defaultData,
|
||||
};
|
||||
|
||||
const message = useMemo(() => createMessage(error), [error]);
|
||||
if (bootstrap.isDemoMode) {
|
||||
const params = new URLSearchParams(window.location.hash.slice(1));
|
||||
|
||||
Object.keys(initialData).forEach((fieldName) => {
|
||||
const value = params.get(fieldName);
|
||||
|
||||
if (value !== null) {
|
||||
initialData[fieldName] = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return initialData;
|
||||
});
|
||||
|
||||
const withOidc = !!bootstrap.oidc;
|
||||
const isOidcEnforced = withOidc && bootstrap.oidc.isEnforced;
|
||||
const isOidcDebug = withOidc && bootstrap.oidc.debug;
|
||||
|
||||
const message = useMemo(() => createMessage(error, isOidcDebug), [error, isOidcDebug]);
|
||||
const [focusPasswordFieldState, focusPasswordField] = useToggle();
|
||||
|
||||
const [emailOrUsernameFieldRef, handleEmailOrUsernameFieldRef] = useNestedRef('inputRef');
|
||||
@@ -141,14 +163,11 @@ const Content = React.memo(() => {
|
||||
dispatch(entryActions.clearAuthenticateError());
|
||||
}, [dispatch]);
|
||||
|
||||
const withOidc = !!bootstrap.oidc;
|
||||
const isOidcEnforced = withOidc && bootstrap.oidc.isEnforced;
|
||||
|
||||
useEffect(() => {
|
||||
if (!isOidcEnforced) {
|
||||
emailOrUsernameFieldRef.current.focus();
|
||||
}
|
||||
}, [emailOrUsernameFieldRef, isOidcEnforced]);
|
||||
}, [isOidcEnforced, emailOrUsernameFieldRef]);
|
||||
|
||||
useDidUpdate(() => {
|
||||
if (wasSubmitting && !isSubmitting && error) {
|
||||
@@ -253,16 +272,27 @@ const Content = React.memo(() => {
|
||||
</>
|
||||
)}
|
||||
{withOidc && (
|
||||
<Button
|
||||
fluid
|
||||
primary={isOidcEnforced}
|
||||
icon={isOidcEnforced ? 'right arrow' : undefined}
|
||||
labelPosition={isOidcEnforced ? 'right' : undefined}
|
||||
content={t('action.logInWithSso')}
|
||||
loading={isSubmittingWithOidc}
|
||||
disabled={isSubmitting || isSubmittingWithOidc}
|
||||
onClick={handleAuthenticateWithOidcClick}
|
||||
/>
|
||||
<>
|
||||
<Button
|
||||
fluid
|
||||
primary={isOidcDebug ? undefined : isOidcEnforced}
|
||||
color={isOidcDebug ? 'orange' : undefined}
|
||||
icon={isOidcEnforced ? 'right arrow' : undefined}
|
||||
labelPosition={isOidcEnforced ? 'right' : undefined}
|
||||
content={isOidcDebug ? t('action.debugSso') : t('action.logInWithSso')}
|
||||
loading={isSubmittingWithOidc}
|
||||
disabled={isSubmitting || isSubmittingWithOidc}
|
||||
onClick={handleAuthenticateWithOidcClick}
|
||||
/>
|
||||
{debugLogs && (
|
||||
<TextArea
|
||||
readOnly
|
||||
as={TextareaAutosize}
|
||||
value={debugLogs.join('\n')}
|
||||
className={styles.debugLog}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
<div className={styles.poweredBy}>
|
||||
|
||||
@@ -19,6 +19,16 @@
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.debugLog {
|
||||
border: 1px solid rgba(9, 30, 66, 0.13);
|
||||
border-radius: 3px;
|
||||
color: #333;
|
||||
line-height: 1.4;
|
||||
margin-top: 16px;
|
||||
padding: 8px 12px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.divider {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import React, { useCallback, useState } from 'react';
|
||||
import React, { useCallback, useMemo, useState } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Button, Checkbox, Dropdown, Modal } from 'semantic-ui-react';
|
||||
import { Button, Checkbox, Dropdown, Modal, Segment } from 'semantic-ui-react';
|
||||
|
||||
import selectors from '../../../selectors';
|
||||
import entryActions from '../../../entry-actions';
|
||||
@@ -18,6 +18,25 @@ import styles from './TermsModal.module.scss';
|
||||
|
||||
const LOCALES = TERMS_LANGUAGES.map((language) => localeByLanguage[language]);
|
||||
|
||||
const splitTermsAndConfirmations = (content) => {
|
||||
const separator = '\n---\n';
|
||||
const index = content.lastIndexOf(separator);
|
||||
|
||||
if (index === -1) {
|
||||
return [content.trim(), []];
|
||||
}
|
||||
|
||||
const terms = content.slice(0, index).trim();
|
||||
|
||||
const confirmations = content
|
||||
.slice(index + separator.length)
|
||||
.split('\n')
|
||||
.map((confirmation) => confirmation.replace(/^✔️\s*/, '').replace(/\*\*(.*?)\*\*/, '$1'))
|
||||
.filter(Boolean);
|
||||
|
||||
return [terms, confirmations];
|
||||
};
|
||||
|
||||
const TermsModal = React.memo(() => {
|
||||
const {
|
||||
termsForm: { payload: terms, isSubmitting, isCancelling, isLanguageUpdating },
|
||||
@@ -25,7 +44,12 @@ const TermsModal = React.memo(() => {
|
||||
|
||||
const dispatch = useDispatch();
|
||||
const [t] = useTranslation();
|
||||
const [isTermsAccepted, setIsTermsAccepted] = useState(false);
|
||||
const [acceptedConfirmationsSet, setAcceptedConfirmationsSet] = useState(new Set());
|
||||
|
||||
const [content, confirmations] = useMemo(
|
||||
() => splitTermsAndConfirmations(terms.content),
|
||||
[terms.content],
|
||||
);
|
||||
|
||||
const handleContinueClick = useCallback(() => {
|
||||
dispatch(entryActions.acceptTerms(terms.signature));
|
||||
@@ -42,10 +66,22 @@ const TermsModal = React.memo(() => {
|
||||
[dispatch],
|
||||
);
|
||||
|
||||
const handleToggleAcceptClick = useCallback((_, { checked }) => {
|
||||
setIsTermsAccepted(checked);
|
||||
const handleToggleConfirmationAccept = useCallback((index) => {
|
||||
setAcceptedConfirmationsSet((prevAcceptedConfirmationsSet) => {
|
||||
const nextAcceptedConfirmationsSet = new Set(prevAcceptedConfirmationsSet);
|
||||
|
||||
if (nextAcceptedConfirmationsSet.has(index)) {
|
||||
nextAcceptedConfirmationsSet.delete(index);
|
||||
} else {
|
||||
nextAcceptedConfirmationsSet.add(index);
|
||||
}
|
||||
|
||||
return nextAcceptedConfirmationsSet;
|
||||
});
|
||||
}, []);
|
||||
|
||||
const isAllConfirmationsAccepted = acceptedConfirmationsSet.size === confirmations.length;
|
||||
|
||||
return (
|
||||
<Modal open centered={false}>
|
||||
<Modal.Content>
|
||||
@@ -63,7 +99,20 @@ const TermsModal = React.memo(() => {
|
||||
className={styles.language}
|
||||
onChange={handleLanguageChange}
|
||||
/>
|
||||
<Markdown>{terms.content}</Markdown>
|
||||
<Markdown>{content}</Markdown>
|
||||
{confirmations.length > 0 && (
|
||||
<Segment size="massive" className={styles.confirmations}>
|
||||
{confirmations.map((confirmation, index) => (
|
||||
<Checkbox
|
||||
key={confirmation}
|
||||
checked={acceptedConfirmationsSet.has(index)}
|
||||
label={confirmation}
|
||||
className={styles.confirmationCheckbox}
|
||||
onChange={() => handleToggleConfirmationAccept(index)}
|
||||
/>
|
||||
))}
|
||||
</Segment>
|
||||
)}
|
||||
</Modal.Content>
|
||||
<Modal.Actions>
|
||||
<Button
|
||||
@@ -74,15 +123,11 @@ const TermsModal = React.memo(() => {
|
||||
className={styles.cancelButton}
|
||||
onClick={handleCancelClick}
|
||||
/>
|
||||
<Checkbox
|
||||
label={t('common.iHaveReadAndAgreeToTheseTerms')}
|
||||
onChange={handleToggleAcceptClick}
|
||||
/>
|
||||
<Button
|
||||
positive
|
||||
content={t('action.continue')}
|
||||
loading={isSubmitting}
|
||||
disabled={!isTermsAccepted || isSubmitting || isCancelling}
|
||||
disabled={!isAllConfirmationsAccepted || isSubmitting || isCancelling}
|
||||
onClick={handleContinueClick}
|
||||
/>
|
||||
</Modal.Actions>
|
||||
|
||||
@@ -8,6 +8,19 @@
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.confirmations {
|
||||
border-color: #5aac44;
|
||||
border-width: 2px;
|
||||
box-shadow: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
row-gap: 12px;
|
||||
}
|
||||
|
||||
.confirmationCheckbox {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.language {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Provider } from 'react-redux';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { Route, Routes } from 'react-router';
|
||||
import { ThemeProvider, ToasterProvider } from '@gravity-ui/uikit';
|
||||
// eslint-disable-next-line import/no-unresolved
|
||||
import { toaster } from '@gravity-ui/uikit/toaster-singleton';
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
font-size: 13px;
|
||||
line-height: 1;
|
||||
margin-bottom: 6px;
|
||||
padding: 1px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
@@ -201,6 +201,7 @@ const List = React.memo(({ id, index }) => {
|
||||
className={classNames(
|
||||
styles.outerWrapper,
|
||||
isFavoritesActive && styles.outerWrapperWithFavorites,
|
||||
list.color && globalStyles[`background${upperFirst(camelCase(list.color))}Soft`],
|
||||
)}
|
||||
onTransitionEnd={handleWrapperTransitionEnd}
|
||||
>
|
||||
@@ -261,7 +262,11 @@ const List = React.memo(({ id, index }) => {
|
||||
<button
|
||||
type="button"
|
||||
disabled={!list.isPersisted}
|
||||
className={styles.addCardButton}
|
||||
className={classNames(
|
||||
styles.addCardButton,
|
||||
list.color &&
|
||||
globalStyles[`background${upperFirst(camelCase(list.color))}Soft`],
|
||||
)}
|
||||
onClick={handleAddCardClick}
|
||||
>
|
||||
<PlusMathIcon className={styles.addCardButtonIcon} />
|
||||
|
||||
@@ -8,7 +8,7 @@ import React, { useCallback, useMemo } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { useTranslation, Trans } from 'react-i18next';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Link } from 'react-router';
|
||||
import { Button } from 'semantic-ui-react';
|
||||
|
||||
import selectors from '../../../selectors';
|
||||
|
||||
@@ -9,7 +9,7 @@ import React, { useCallback, useMemo } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Link } from 'react-router';
|
||||
import { Button, Icon } from 'semantic-ui-react';
|
||||
|
||||
import selectors from '../../../selectors';
|
||||
|
||||
@@ -8,7 +8,7 @@ import ReactDOM from 'react-dom';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { Link } from 'react-router';
|
||||
import { Draggable } from 'react-beautiful-dnd';
|
||||
import { Button, Checkbox, Icon } from 'semantic-ui-react';
|
||||
import { useDidUpdate } from '../../../../lib/hooks';
|
||||
|
||||
@@ -16,6 +16,10 @@ export default {
|
||||
SOCKET_RECONNECT_HANDLE: 'SOCKET_RECONNECT_HANDLE',
|
||||
SOCKET_RECONNECT_HANDLE__CORE_FETCH: 'SOCKET_RECONNECT_HANDLE__CORE_FETCH',
|
||||
|
||||
/* Bootstrap */
|
||||
|
||||
BOOTSTRAP_UPDATE_HANDLE: 'BOOTSTRAP_UPDATE_HANDLE',
|
||||
|
||||
/* Login */
|
||||
|
||||
LOGIN_INITIALIZE: 'LOGIN_INITIALIZE',
|
||||
@@ -25,6 +29,7 @@ export default {
|
||||
WITH_OIDC_AUTHENTICATE: 'WITH_OIDC_AUTHENTICATE',
|
||||
WITH_OIDC_AUTHENTICATE__SUCCESS: 'WITH_OIDC_AUTHENTICATE__SUCCESS',
|
||||
WITH_OIDC_AUTHENTICATE__FAILURE: 'WITH_OIDC_AUTHENTICATE__FAILURE',
|
||||
WITH_OIDC_AUTHENTICATE__DEBUG: 'WITH_OIDC_AUTHENTICATE__DEBUG',
|
||||
AUTHENTICATE_ERROR_CLEAR: 'AUTHENTICATE_ERROR_CLEAR',
|
||||
TERMS_ACCEPT: 'TERMS_ACCEPT',
|
||||
TERMS_ACCEPT__SUCCESS: 'TERMS_ACCEPT__SUCCESS',
|
||||
@@ -78,6 +83,7 @@ export default {
|
||||
|
||||
/* Users */
|
||||
|
||||
USERS_RESET_HANDLE: 'USERS_RESET_HANDLE',
|
||||
USER_CREATE: 'USER_CREATE',
|
||||
USER_CREATE__SUCCESS: 'USER_CREATE__SUCCESS',
|
||||
USER_CREATE__FAILURE: 'USER_CREATE__FAILURE',
|
||||
|
||||
@@ -13,6 +13,10 @@ export default {
|
||||
SOCKET_DISCONNECT_HANDLE: `${PREFIX}/SOCKET_DISCONNECT_HANDLE`,
|
||||
SOCKET_RECONNECT_HANDLE: `${PREFIX}/SOCKET_RECONNECT_HANDLE`,
|
||||
|
||||
/* Bootstrap */
|
||||
|
||||
BOOTSTRAP_UPDATE_HANDLE: `${PREFIX}/BOOTSTRAP_UPDATE_HANDLE`,
|
||||
|
||||
/* Login */
|
||||
|
||||
AUTHENTICATE: `${PREFIX}/AUTHENTICATE`,
|
||||
@@ -51,6 +55,7 @@ export default {
|
||||
|
||||
/* Users */
|
||||
|
||||
USERS_RESET_HANDLE: `${PREFIX}/USERS_RESET_HANDLE`,
|
||||
USER_CREATE: `${PREFIX}/USER_CREATE`,
|
||||
USER_CREATE_HANDLE: `${PREFIX}/USER_CREATE_HANDLE`,
|
||||
USER_CREATE_ERROR_CLEAR: `${PREFIX}/USER_CREATE_ERROR_CLEAR`,
|
||||
|
||||
17
client/src/entry-actions/bootstrap.js
vendored
Normal file
17
client/src/entry-actions/bootstrap.js
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
import EntryActionTypes from '../constants/EntryActionTypes';
|
||||
|
||||
const handleBootstrapUpdate = (bootstrap) => ({
|
||||
type: EntryActionTypes.BOOTSTRAP_UPDATE_HANDLE,
|
||||
payload: {
|
||||
bootstrap,
|
||||
},
|
||||
});
|
||||
|
||||
export default {
|
||||
handleBootstrapUpdate,
|
||||
};
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
import socket from './socket';
|
||||
import bootstrap from './bootstrap';
|
||||
import login from './login';
|
||||
import core from './core';
|
||||
import modals from './modals';
|
||||
@@ -32,6 +33,7 @@ import notificationServices from './notification-services';
|
||||
|
||||
export default {
|
||||
...socket,
|
||||
...bootstrap,
|
||||
...login,
|
||||
...core,
|
||||
...modals,
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
|
||||
import EntryActionTypes from '../constants/EntryActionTypes';
|
||||
|
||||
const handleUsersReset = () => ({
|
||||
type: EntryActionTypes.USERS_RESET_HANDLE,
|
||||
payload: {},
|
||||
});
|
||||
|
||||
const createUser = (data) => ({
|
||||
type: EntryActionTypes.USER_CREATE,
|
||||
payload: {
|
||||
@@ -246,6 +251,7 @@ const removeUserFromFilterInCurrentBoard = (id) => ({
|
||||
});
|
||||
|
||||
export default {
|
||||
handleUsersReset,
|
||||
createUser,
|
||||
handleUserCreate,
|
||||
clearUserCreateError,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import React, { useLayoutEffect } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { Router } from 'react-router-dom';
|
||||
import { Router } from 'react-router';
|
||||
|
||||
import { handleLocationChange } from './actions';
|
||||
|
||||
|
||||
@@ -83,6 +83,8 @@ export default {
|
||||
'هل أنت متأكد أنك تريد إزالة هذا المدير من المشروع؟',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'هل أنت متأكد أنك تريد إزالة هذا العضو من اللوحة؟',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'هل أنت متأكد أنك تريد إلغاء ربط تسجيل الدخول الموحد من هذا المستخدم؟ سيسمح هذا للمستخدم بتسجيل الدخول باستخدام كلمة المرور.',
|
||||
assignAsOwner_title: 'تعيين كمالك',
|
||||
atLeastOneListMustBePresent: 'يجب وجود قائمة واحدة على الأقل',
|
||||
attachment: 'مرفق',
|
||||
@@ -320,6 +322,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'إيقاف تمييز البطاقات الحديثة',
|
||||
typeNameToConfirm: 'اكتب الاسم للتأكيد.',
|
||||
typeTitleToConfirm: 'اكتب العنوان للتأكيد.',
|
||||
unlinkSso_title: 'إلغاء ربط تسجيل الدخول الموحد',
|
||||
unsavedChanges: 'تغييرات غير محفوظة',
|
||||
uploadFailedFileIsTooBig: 'فشل الرفع: الملف كبير جداً.',
|
||||
uploadFailedNotEnoughStorageSpace: 'فشل الرفع: مساحة التخزين غير كافية.',
|
||||
@@ -485,6 +488,8 @@ export default {
|
||||
start: 'ابدأ',
|
||||
stop: 'توقف',
|
||||
subscribe: 'اشترك',
|
||||
unlinkSso: 'إلغاء ربط تسجيل الدخول الموحد',
|
||||
unlinkSso_title: 'إلغاء ربط تسجيل الدخول الموحد',
|
||||
unsubscribe: 'إلغاء الاشتراك',
|
||||
uploadNewAvatar: 'رفع صورة رمزية جديدة',
|
||||
uploadNewImage: 'رفع صورة جديدة',
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'تم الوصول إلى حد المستخدمين النشطين',
|
||||
activeUsersLimitReached: 'تم الوصول إلى حد المستخدمين النشطين',
|
||||
adminLoginRequiredToInitializeInstance: 'مطلوب تسجيل دخول المدير لتهيئة المثيل',
|
||||
emailAlreadyInUse: 'البريد الإلكتروني مستخدم بالفعل',
|
||||
emailOrUsername: 'البريد الإلكتروني أو اسم المستخدم',
|
||||
iHaveReadAndAgreeToTheseTerms: 'لقد قرأت ووافقت على هذه الشروط',
|
||||
invalidCredentials: 'بيانات الاعتماد غير صالحة',
|
||||
invalidEmailOrUsername: 'البريد الإلكتروني أو اسم المستخدم غير صالح',
|
||||
invalidPassword: 'كلمة المرور غير صالحة',
|
||||
@@ -25,6 +24,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'إلغاء وإغلاق',
|
||||
continue: 'متابعة',
|
||||
debugSso: 'تصحيح أخطاء تسجيل الدخول الموحد',
|
||||
goBack: 'العودة',
|
||||
goHome: 'الذهاب للرئيسية',
|
||||
logIn: 'تسجيل الدخول',
|
||||
|
||||
@@ -92,6 +92,8 @@ export default {
|
||||
'Сигурни ли сте, че искате да премахнете този мениджър от проекта?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Сигурни ли сте, че искате да премахнете този член от таблото?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Сигурни ли сте, че искате да премахнете SSO връзката от този потребител? Това ще позволи на потребителя да влиза с парола.',
|
||||
assignAsOwner_title: 'Назначаване като собственик',
|
||||
atLeastOneListMustBePresent: 'Трябва да присъства поне един списък',
|
||||
attachment: 'Прикачен файл',
|
||||
@@ -333,6 +335,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Изключване на подчертаването на скорошни карти',
|
||||
typeNameToConfirm: 'Въведете име за потвърждение.',
|
||||
typeTitleToConfirm: 'Въведете заглавие за потвърждение.',
|
||||
unlinkSso_title: 'Премахване на SSO връзка',
|
||||
unsavedChanges: 'Незапазени промени',
|
||||
uploadFailedFileIsTooBig: 'Качването неуспешно: файлът е твърде голям.',
|
||||
uploadFailedNotEnoughStorageSpace:
|
||||
@@ -500,6 +503,8 @@ export default {
|
||||
start: 'Старт',
|
||||
stop: 'Стоп',
|
||||
subscribe: 'Абонирайте се',
|
||||
unlinkSso: 'Премахни SSO връзка',
|
||||
unlinkSso_title: 'Премахни SSO връзка',
|
||||
unsubscribe: 'Отписване',
|
||||
uploadNewAvatar: 'Качване на нов аватар',
|
||||
uploadNewImage: 'Качване на ново изображение',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Достигнат е лимитът на активни потребители',
|
||||
activeUsersLimitReached: 'Достигнат е лимитът на активни потребители',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Необходимо е влизане на администратор за инициализиране на инстанцията',
|
||||
emailAlreadyInUse: 'Имейлът вече се използва',
|
||||
emailOrUsername: 'Имейл или потребителско име',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Прочетох и се съгласявам с тези условия',
|
||||
invalidCredentials: 'Невалидни данни за вход',
|
||||
invalidEmailOrUsername: 'Невалиден имейл или потребителско име',
|
||||
invalidPassword: 'Невалидна парола',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Отказ и затваряне',
|
||||
continue: 'Продължи',
|
||||
debugSso: 'Дебъгване на SSO',
|
||||
goBack: 'Назад',
|
||||
goHome: 'Към началото',
|
||||
logIn: 'Вход',
|
||||
|
||||
@@ -90,6 +90,8 @@ export default {
|
||||
'Estàs segur que vols eliminar aquest gestor del projecte?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Estàs segur que vols eliminar aquest membre del tauler?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
"Estàs segur que vols desvincular SSO d'aquest usuari? Això permetrà que l'usuari iniciï sessió amb una contrasenya.",
|
||||
assignAsOwner_title: 'Assignar com a propietari',
|
||||
atLeastOneListMustBePresent: "Hi ha d'haver com a mínim una llista",
|
||||
attachment: 'Fitxer adjunt',
|
||||
@@ -334,6 +336,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Desactivar ressaltat de targetes recents',
|
||||
typeNameToConfirm: 'Escriu el nom per confirmar.',
|
||||
typeTitleToConfirm: 'Escriu el títol per confirmar.',
|
||||
unlinkSso_title: 'Desvinculació de SSO',
|
||||
unsavedChanges: 'Canvis sense desar',
|
||||
uploadFailedFileIsTooBig: 'Error en pujar: El fitxer és massa gran.',
|
||||
uploadFailedNotEnoughStorageSpace: "Error en pujar: No hi ha prou espai d'emmagatzematge.",
|
||||
@@ -502,6 +505,8 @@ export default {
|
||||
start: 'Iniciar',
|
||||
stop: 'Aturar',
|
||||
subscribe: "Subscriure's",
|
||||
unlinkSso: 'Desvincular SSO',
|
||||
unlinkSso_title: 'Desvincular SSO',
|
||||
unsubscribe: 'Cancel·lar subscripció',
|
||||
uploadNewAvatar: 'Pujar nou avatar',
|
||||
uploadNewImage: 'Pujar nova imatge',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: "S'ha assolit el límit d'usuaris actius",
|
||||
activeUsersLimitReached: "S'ha assolit el límit d'usuaris actius",
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
"Es requereix inici de sessió d'administrador per inicialitzar la instància",
|
||||
emailAlreadyInUse: 'Correu electrònic ja en ús',
|
||||
emailOrUsername: "Correu electrònic o nom d'usuari",
|
||||
iHaveReadAndAgreeToTheseTerms: 'He llegit i accepto aquests termes',
|
||||
invalidCredentials: 'Credencials no vàlides',
|
||||
invalidEmailOrUsername: "Correu electrònic o nom d'usuari no vàlid",
|
||||
invalidPassword: 'Contrasenya no vàlida',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Cancel·lar i tancar',
|
||||
continue: 'Continuar',
|
||||
debugSso: 'Depurar SSO',
|
||||
goBack: 'Tornar',
|
||||
goHome: "Anar a l'inici",
|
||||
logIn: 'Iniciar sessió',
|
||||
|
||||
@@ -85,6 +85,8 @@ export default {
|
||||
'Opravdu chcete tohoto správce z projektu odebrat?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Opravdu chcete tohoto člena odebrat z nástěnky?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Opravdu chcete odpojit SSO od tohoto uživatele? Tím umožníte uživateli přihlásit se pomocí hesla.',
|
||||
assignAsOwner_title: 'Přiřadit jako vlastníka',
|
||||
atLeastOneListMustBePresent: 'Musí být k dispozici alespoň jeden seznam',
|
||||
attachment: 'Příloha',
|
||||
@@ -324,6 +326,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Vypnout zvýraznění posledních karet',
|
||||
typeNameToConfirm: 'Zadejte název pro potvrzení.',
|
||||
typeTitleToConfirm: 'Zadejte titulek pro potvrzení.',
|
||||
unlinkSso_title: 'Odpojení SSO',
|
||||
unsavedChanges: 'Neuložené změny',
|
||||
uploadFailedFileIsTooBig: 'Nahrávání se nezdařilo: Soubor je příliš velký.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Nahrávání se nezdařilo: Nedostatek úložného prostoru.',
|
||||
@@ -490,6 +493,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stop',
|
||||
subscribe: 'Odebírat',
|
||||
unlinkSso: 'Odpojit SSO',
|
||||
unlinkSso_title: 'Odpojit SSO',
|
||||
unsubscribe: 'Neodebírat',
|
||||
uploadNewAvatar: 'Nahrát nový avatar',
|
||||
uploadNewImage: 'Nahrát nový obrázek',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Dosažený limit aktivních uživatelů',
|
||||
activeUsersLimitReached: 'Dosažený limit aktivních uživatelů',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'K inicializaci instance je nutné přihlášení správce.',
|
||||
emailAlreadyInUse: 'E-mail se již používá',
|
||||
emailOrUsername: 'E-mail nebo uživatelské jméno',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Přečetl jsem si tyto podmínky a souhlasím s nimi.',
|
||||
invalidCredentials: 'Neplatné přihlašovací údaje',
|
||||
invalidEmailOrUsername: 'Nesprávný e-mail nebo uživatelské jméno',
|
||||
invalidPassword: 'Nesprávné heslo',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Zrušit a zavřít',
|
||||
continue: 'Pokračovat',
|
||||
debugSso: 'Ladit SSO',
|
||||
goBack: 'Zpět',
|
||||
goHome: 'Domů',
|
||||
logIn: 'Přihlásit se',
|
||||
|
||||
@@ -88,6 +88,8 @@ export default {
|
||||
'Er du sikker på at du vil fjerne denne projektleder fra projektet?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Er du sikker på at du vil fjerne dette medlem fra tavlen?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Er du sikker på, at du vil fjerne SSO-forbindelsen fra denne bruger? Dette vil tillade brugeren at logge ind med en adgangskode.',
|
||||
assignAsOwner_title: 'Sæt som ejer',
|
||||
atLeastOneListMustBePresent: 'Mindst én liste skal være til stede',
|
||||
attachment: 'Vedhæft fil',
|
||||
@@ -330,6 +332,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Slå fremhævelse af nylige kort fra',
|
||||
typeNameToConfirm: 'Skriv navnet for at bekræfte.',
|
||||
typeTitleToConfirm: 'Skriv overskriften for at bekræfte.',
|
||||
unlinkSso_title: 'Fjernelse af SSO-forbindelse',
|
||||
unsavedChanges: 'Ikke-gemte ændringer',
|
||||
uploadFailedFileIsTooBig: 'Upload mislykkedes: Filen er for stor.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Upload mislykkedes: Ikke nok lagerplads.',
|
||||
@@ -496,6 +499,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stop',
|
||||
subscribe: 'Abonnér',
|
||||
unlinkSso: 'Fjern SSO-forbindelse',
|
||||
unlinkSso_title: 'Fjern SSO-forbindelse',
|
||||
unsubscribe: 'Opsig abonnement',
|
||||
uploadNewAvatar: 'Tilføj nyt profilbillede',
|
||||
uploadNewImage: 'Tilføj nyt billede',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Grænsen for aktive brugere er nået',
|
||||
activeUsersLimitReached: 'Grænsen for aktive brugere er nået',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Administrator login påkrævet for at initialisere instans',
|
||||
emailAlreadyInUse: 'E-mail allerede i brug',
|
||||
emailOrUsername: 'E-mail eller brugernavn',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Jeg har læst og accepterer disse vilkår',
|
||||
invalidCredentials: 'Forkerte loginoplysninger',
|
||||
invalidEmailOrUsername: 'Ugyldig e-mail eller brugernavn',
|
||||
invalidPassword: 'Ugyldig adgangskode',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Annuller og luk',
|
||||
continue: 'Fortsæt',
|
||||
debugSso: 'Fejlfind SSO',
|
||||
goBack: 'Gå tilbage',
|
||||
goHome: 'Gå hjem',
|
||||
logIn: 'Log på',
|
||||
|
||||
@@ -101,6 +101,8 @@ export default {
|
||||
'Sind Sie sicher, dass Sie diesen Projektleiter aus dem Projekt entfernen möchten?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Sind Sie sicher, dass Sie dieses Mitglied aus dem Arbeitsbereich entfernen möchten?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Sind Sie sicher, dass Sie die SSO-Verknüpfung von diesem Benutzer aufheben möchten? Dies ermöglicht dem Benutzer die Anmeldung mit einem Passwort.',
|
||||
assignAsOwner_title: 'Als Eigentümer zuweisen',
|
||||
atLeastOneListMustBePresent: 'Mindestens eine Liste muss vorhanden sein',
|
||||
attachment: 'Anhang',
|
||||
@@ -344,6 +346,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Hervorhebung neuer Karten ausschalten',
|
||||
typeNameToConfirm: 'Namen zur Bestätigung eingeben.',
|
||||
typeTitleToConfirm: 'Titel zur Bestätigung eingeben.',
|
||||
unlinkSso_title: 'SSO-Verknüpfung aufheben',
|
||||
unsavedChanges: 'Ungespeicherte Änderungen',
|
||||
uploadFailedFileIsTooBig: 'Upload fehlgeschlagen: Datei ist zu groß.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Upload fehlgeschlagen: Nicht genügend Speicherplatz.',
|
||||
@@ -512,6 +515,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stopp',
|
||||
subscribe: 'Abonnieren',
|
||||
unlinkSso: 'SSO-Verknüpfung aufheben',
|
||||
unlinkSso_title: 'SSO-Verknüpfung aufheben',
|
||||
unsubscribe: 'De-abonnieren',
|
||||
uploadNewAvatar: 'Neuen Avatar hochladen',
|
||||
uploadNewImage: 'Neues Bild hochladen',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Maximale Anzahl aktiver Benutzer erreicht',
|
||||
activeUsersLimitReached: 'Maximale Anzahl aktiver Benutzer erreicht',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Admin-Anmeldung erforderlich zur Initialisierung der Instanz',
|
||||
emailAlreadyInUse: 'E-mail Adresse wird bereits benutzt',
|
||||
emailOrUsername: 'E-Mail-Adresse oder Benutzername',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Ich habe diese Bedingungen gelesen und stimme ihnen zu',
|
||||
invalidCredentials: 'Ungültige Anmeldeinformationen',
|
||||
invalidEmailOrUsername: 'Ungültige E-Mail-Adresse oder Benutzername',
|
||||
invalidPassword: 'Ungültiges Passwort',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Abbrechen und schließen',
|
||||
continue: 'Fortfahren',
|
||||
debugSso: 'SSO debuggen',
|
||||
goBack: 'Zurück gehen',
|
||||
goHome: 'Zur Startseite',
|
||||
logIn: 'Einloggen',
|
||||
|
||||
@@ -100,6 +100,8 @@ export default {
|
||||
'Είστε σίγουροι ότι θέλετε να αφαιρέσετε αυτόν τον διαχειριστή από το έργο;',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Είστε σίγουροι ότι θέλετε να αφαιρέσετε αυτό το μέλος από τον πίνακα;',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Είστε σίγουροι ότι θέλετε να αποσυνδέσετε το SSO από αυτόν τον χρήστη; Αυτό θα επιτρέψει στον χρήστη να συνδεθεί με κωδικό πρόσβασης.',
|
||||
assignAsOwner_title: 'Ορισμός ως ιδιοκτήτης',
|
||||
atLeastOneListMustBePresent: 'Πρέπει να υπάρχει τουλάχιστον μία λίστα',
|
||||
attachment: 'Συνημμένο',
|
||||
@@ -343,6 +345,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Απενεργοποίηση επισήμανσης πρόσφατων καρτών',
|
||||
typeNameToConfirm: 'Πληκτρολογήστε το όνομα για επιβεβαίωση.',
|
||||
typeTitleToConfirm: 'Πληκτρολογήστε τον τίτλο για επιβεβαίωση.',
|
||||
unlinkSso_title: 'Αποσύνδεση SSO',
|
||||
unsavedChanges: 'Μη αποθηκευμένες αλλαγές',
|
||||
uploadFailedFileIsTooBig: 'Η μεταφόρτωση απέτυχε: το αρχείο είναι πολύ μεγάλο.',
|
||||
uploadFailedNotEnoughStorageSpace:
|
||||
@@ -516,6 +519,8 @@ export default {
|
||||
start: 'Έναρξη',
|
||||
stop: 'Διακοπή',
|
||||
subscribe: 'Εγγραφή',
|
||||
unlinkSso: 'Αποσύνδεση SSO',
|
||||
unlinkSso_title: 'Αποσύνδεση SSO',
|
||||
unsubscribe: 'Απεγγραφή',
|
||||
uploadNewAvatar: 'Μεταφόρτωση νέου avatar',
|
||||
uploadNewImage: 'Μεταφόρτωση νέας εικόνας',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Έχει επιτευχθεί το όριο ενεργών χρηστών',
|
||||
activeUsersLimitReached: 'Έχει επιτευχθεί το όριο ενεργών χρηστών',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Απαιτείται σύνδεση διαχειριστή για την αρχικοποίηση της εφαρμογής',
|
||||
emailAlreadyInUse: 'Το e-mail χρησιμοποιείται ήδη',
|
||||
emailOrUsername: 'E-mail ή όνομα χρήστη',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Έχω διαβάσει και συμφωνώ με αυτούς τους όρους',
|
||||
invalidCredentials: 'Μη έγκυρα στοιχεία σύνδεσης',
|
||||
invalidEmailOrUsername: 'Μη έγκυρο e-mail ή όνομα χρήστη',
|
||||
invalidPassword: 'Μη έγκυρος κωδικός',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Ακύρωση και κλείσιμο',
|
||||
continue: 'Συνέχεια',
|
||||
debugSso: 'Αποσφαλμάτωση SSO',
|
||||
goBack: 'Επιστροφή',
|
||||
goHome: 'Αρχική σελίδα',
|
||||
logIn: 'Σύνδεση',
|
||||
|
||||
@@ -88,6 +88,8 @@ export default {
|
||||
'Are you sure you want to remove this manager from the project?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Are you sure you want to remove this member from the board?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Are you sure you want to unlink SSO from this user? This will allow the user to log in with a password.',
|
||||
assignAsOwner_title: 'Assign As Owner',
|
||||
atLeastOneListMustBePresent: 'At least one list must be present',
|
||||
attachment: 'Attachment',
|
||||
@@ -327,6 +329,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Turn off recent card highlighting',
|
||||
typeNameToConfirm: 'Type the name to confirm.',
|
||||
typeTitleToConfirm: 'Type the title to confirm.',
|
||||
unlinkSso_title: 'Unlink SSO',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
uploadFailedFileIsTooBig: 'Upload failed: File is too big.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Upload failed: Not enough storage space.',
|
||||
@@ -492,6 +495,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stop',
|
||||
subscribe: 'Subscribe',
|
||||
unlinkSso: 'Unlink SSO',
|
||||
unlinkSso_title: 'Unlink SSO',
|
||||
unsubscribe: 'Unsubscribe',
|
||||
uploadNewAvatar: 'Upload new avatar',
|
||||
uploadNewImage: 'Upload new image',
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Active user limit reached',
|
||||
activeUsersLimitReached: 'Active users limit reached',
|
||||
adminLoginRequiredToInitializeInstance: 'Admin login required to initialize instance',
|
||||
emailAlreadyInUse: 'E-mail already in use',
|
||||
emailOrUsername: 'E-mail or username',
|
||||
iHaveReadAndAgreeToTheseTerms: 'I have read and agree to these Terms',
|
||||
invalidCredentials: 'Invalid credentials',
|
||||
invalidEmailOrUsername: 'Invalid e-mail or username',
|
||||
invalidPassword: 'Invalid password',
|
||||
@@ -25,6 +24,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Cancel and close',
|
||||
continue: 'Continue',
|
||||
debugSso: 'Debug SSO',
|
||||
goBack: 'Go back',
|
||||
goHome: 'Go home',
|
||||
logIn: 'Log in',
|
||||
|
||||
@@ -83,6 +83,8 @@ export default {
|
||||
'Are you sure you want to remove this manager from the project?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Are you sure you want to remove this member from the board?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Are you sure you want to unlink SSO from this user? This will allow the user to log in with a password.',
|
||||
assignAsOwner_title: 'Assign As Owner',
|
||||
atLeastOneListMustBePresent: 'At least one list must be present',
|
||||
attachment: 'Attachment',
|
||||
@@ -322,6 +324,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Turn off recent card highlighting',
|
||||
typeNameToConfirm: 'Type the name to confirm.',
|
||||
typeTitleToConfirm: 'Type the title to confirm.',
|
||||
unlinkSso_title: 'Inlink SSO',
|
||||
unsavedChanges: 'Unsaved changes',
|
||||
uploadFailedFileIsTooBig: 'Upload failed: File is too big.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Upload failed: Not enough storage space.',
|
||||
@@ -487,6 +490,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stop',
|
||||
subscribe: 'Subscribe',
|
||||
unlinkSso: 'Unlink SSO',
|
||||
unlinkSso_title: 'Unlink SSO',
|
||||
unsubscribe: 'Unsubscribe',
|
||||
uploadNewAvatar: 'Upload new avatar',
|
||||
uploadNewImage: 'Upload new image',
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Active user limit reached',
|
||||
activeUsersLimitReached: 'Active users limit reached',
|
||||
adminLoginRequiredToInitializeInstance: 'Admin login required to initialize instance',
|
||||
emailAlreadyInUse: 'E-mail already in use',
|
||||
emailOrUsername: 'E-mail or username',
|
||||
iHaveReadAndAgreeToTheseTerms: 'I have read and agree to these Terms',
|
||||
invalidCredentials: 'Invalid credentials',
|
||||
invalidEmailOrUsername: 'Invalid e-mail or username',
|
||||
invalidPassword: 'Invalid password',
|
||||
@@ -25,6 +24,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Cancel and close',
|
||||
continue: 'Continue',
|
||||
debugSso: 'Debug SSO',
|
||||
goBack: 'Go back',
|
||||
goHome: 'Go home',
|
||||
logIn: 'Log in',
|
||||
|
||||
@@ -92,6 +92,8 @@ export default {
|
||||
'¿Estás seguro de que quieres eliminar este gestor del proyecto?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'¿Estás seguro de que quieres eliminar este miembro del tablero?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'¿Estás seguro de que quieres desvincular SSO de este usuario? Esto permitirá que el usuario inicie sesión con una contraseña.',
|
||||
assignAsOwner_title: 'Asignar como propietario',
|
||||
atLeastOneListMustBePresent: 'Debe existir al menos una lista',
|
||||
attachment: 'Archivo adjunto',
|
||||
@@ -335,6 +337,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Desactivar resaltado de tarjetas recientes',
|
||||
typeNameToConfirm: 'Escribe el nombre para confirmar.',
|
||||
typeTitleToConfirm: 'Escribe el título para confirmar.',
|
||||
unlinkSso_title: 'Desvinculación de SSO',
|
||||
unsavedChanges: 'Cambios sin guardar',
|
||||
uploadFailedFileIsTooBig: 'Error al subir: El archivo es demasiado grande.',
|
||||
uploadFailedNotEnoughStorageSpace:
|
||||
@@ -502,6 +505,8 @@ export default {
|
||||
start: 'Iniciar',
|
||||
stop: 'Detener',
|
||||
subscribe: 'Suscribirse',
|
||||
unlinkSso: 'Desvincular SSO',
|
||||
unlinkSso_title: 'Desvincular SSO',
|
||||
unsubscribe: 'Cancelar suscripción',
|
||||
uploadNewAvatar: 'Subir nuevo avatar',
|
||||
uploadNewImage: 'Subir nueva imagen',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Se ha alcanzado el límite de usuarios activos',
|
||||
activeUsersLimitReached: 'Se ha alcanzado el límite de usuarios activos',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Se requiere inicio de sesión de administrador para inicializar la instancia',
|
||||
emailAlreadyInUse: 'Correo electrónico ya en uso',
|
||||
emailOrUsername: 'Correo electrónico o nombre de usuario',
|
||||
iHaveReadAndAgreeToTheseTerms: 'He leído y acepto estos términos',
|
||||
invalidCredentials: 'Credenciales no válidas',
|
||||
invalidEmailOrUsername: 'Correo electrónico o nombre de usuario no válido',
|
||||
invalidPassword: 'Contraseña no válida',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Cancelar y cerrar',
|
||||
continue: 'Continuar',
|
||||
debugSso: 'Depurar SSO',
|
||||
goBack: 'Volver',
|
||||
goHome: 'Ir al inicio',
|
||||
logIn: 'Iniciar sesión',
|
||||
|
||||
@@ -89,6 +89,8 @@ export default {
|
||||
'Oled kindel, et soovid seda haldurit projektist eemaldada?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Oled kindel, et soovid seda liiget tahvlilt eemaldada?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Kas olete kindel, et soovite selle kasutaja SSO sidet eemaldada? See võimaldab kasutajal sisse logida parooliga.',
|
||||
assignAsOwner_title: 'Määra omanikuks',
|
||||
atLeastOneListMustBePresent: 'Vähemalt üks nimekiri peab olemas olema',
|
||||
attachment: 'Manus',
|
||||
@@ -327,6 +329,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Lülita välja hiljuti kuvatud kaardi üleminek',
|
||||
typeNameToConfirm: 'Sisestage nimi, et kinnitada.',
|
||||
typeTitleToConfirm: 'Sisestage pealkiri, et kinnitada.',
|
||||
unlinkSso_title: 'SSO sidemete eemaldamine',
|
||||
unsavedChanges: 'Muudetud andmed',
|
||||
uploadFailedFileIsTooBig: 'Üleslaadimine ebaõnnestus: fail on liiga suur.',
|
||||
uploadFailedNotEnoughStorageSpace:
|
||||
@@ -494,6 +497,8 @@ export default {
|
||||
start: 'Alusta',
|
||||
stop: 'Peata',
|
||||
subscribe: 'Telli',
|
||||
unlinkSso: 'Eemalda SSO side',
|
||||
unlinkSso_title: 'Eemalda SSO side',
|
||||
unsubscribe: 'Tühista tellimus',
|
||||
uploadNewAvatar: 'Laadi üles uus avatar',
|
||||
uploadNewImage: 'Laadi üles uus pilt',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Aktiivsete kasutajate limiit on täis',
|
||||
activeUsersLimitReached: 'Aktiivsete kasutajate limiit on täis',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Administraatori sisselogimine on vajalik rakenduse käivitamiseks',
|
||||
emailAlreadyInUse: 'E-post on juba kasutusel',
|
||||
emailOrUsername: 'E-post või kasutajanimi',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Olen lugenud ja nõustun nende tingimustega',
|
||||
invalidCredentials: 'Vale kasutajanimi või parool',
|
||||
invalidEmailOrUsername: 'Vale e-post või kasutajanimi',
|
||||
invalidPassword: 'Vale parool',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Tühista ja sulge',
|
||||
continue: 'Jätka',
|
||||
debugSso: 'Siluda SSO',
|
||||
goBack: 'Tagasi',
|
||||
goHome: 'Koju',
|
||||
logIn: 'Logi sisse',
|
||||
|
||||
@@ -91,6 +91,8 @@ export default {
|
||||
'آیا مطمئن هستید که میخواهید این مدیر را از پروژه حذف کنید؟',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'آیا مطمئن هستید که میخواهید این عضو را از برد حذف کنید؟',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'آیا مطمئن هستید که میخواهید پیوند SSO را از این کاربر لغو کنید؟ این به کاربر اجازه میدهد با رمز عبور وارد شود.',
|
||||
assignAsOwner_title: 'تعیین به عنوان مالک',
|
||||
atLeastOneListMustBePresent: 'حداقل یک لیست باید وجود داشته باشد',
|
||||
attachment: 'پیوست',
|
||||
@@ -330,6 +332,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'خاموش کردن برجستهسازی کارتهای اخیر',
|
||||
typeNameToConfirm: 'نام را برای تأیید تایپ کنید.',
|
||||
typeTitleToConfirm: 'عنوان را برای تأیید تایپ کنید.',
|
||||
unlinkSso_title: 'لغو پیوند SSO',
|
||||
unsavedChanges: 'تغییرات ذخیره نشده',
|
||||
uploadFailedFileIsTooBig: 'آپلود ناموفق: فایل خیلی بزرگ است.',
|
||||
uploadFailedNotEnoughStorageSpace: 'آپلود ناموفق: فضای ذخیرهسازی کافی نیست.',
|
||||
@@ -496,6 +499,8 @@ export default {
|
||||
start: 'شروع',
|
||||
stop: 'توقف',
|
||||
subscribe: 'مشترک شدن',
|
||||
unlinkSso: 'لغو پیوند SSO',
|
||||
unlinkSso_title: 'لغو پیوند SSO',
|
||||
unsubscribe: 'لغو اشتراک',
|
||||
uploadNewAvatar: 'آپلود آواتار جدید',
|
||||
uploadNewImage: 'آپلود تصویر جدید',
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'حد کاربران فعال به پایان رسیده است',
|
||||
activeUsersLimitReached: 'حد کاربران فعال به پایان رسیده است',
|
||||
adminLoginRequiredToInitializeInstance: 'ورود مدیر برای راهاندازی نمونه مورد نیاز است',
|
||||
emailAlreadyInUse: 'ایمیل قبلا استفاده شده است',
|
||||
emailOrUsername: 'ایمیل یا نام کاربری',
|
||||
iHaveReadAndAgreeToTheseTerms: 'این شرایط را خواندهام و با آن موافقم',
|
||||
invalidCredentials: 'اطلاعات ورود نامعتبر',
|
||||
invalidEmailOrUsername: 'ایمیل یا نام کاربری نامعتبر است',
|
||||
invalidPassword: 'رمز عبور نامعتبر است',
|
||||
@@ -25,6 +24,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'لغو و بستن',
|
||||
continue: 'ادامه',
|
||||
debugSso: 'اشکالزدایی SSO',
|
||||
goBack: 'بازگشت',
|
||||
goHome: 'رفتن به خانه',
|
||||
logIn: 'ورود',
|
||||
|
||||
@@ -85,6 +85,8 @@ export default {
|
||||
'Haluatko varmasti poistaa tämän ylläpitäjän projektista?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Haluatko varmasti poistaa tämän jäsenen taululta?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Haluatko varmasti poistaa SSO-yhteyden tältä käyttäjältä? Tämä sallii käyttäjän kirjautua sisään salasanalla.',
|
||||
assignAsOwner_title: 'Aseta omistajaksi',
|
||||
atLeastOneListMustBePresent: 'Vähintään yksi lista vaaditaan',
|
||||
attachment: 'Liite',
|
||||
@@ -325,6 +327,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Poista uusien korttien korostus',
|
||||
typeNameToConfirm: 'Kirjoita nimi vahvistaaksesi.',
|
||||
typeTitleToConfirm: 'Kirjoita otsikko vahvistaaksesi.',
|
||||
unlinkSso_title: 'SSO-yhteyden poistaminen',
|
||||
unsavedChanges: 'Tallentamattomat muutokset',
|
||||
uploadFailedFileIsTooBig: 'Lataus epäonnistui: tiedosto on liian suuri.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Lataus epäonnistui: tallennustilaa ei ole tarpeeksi.',
|
||||
@@ -495,6 +498,8 @@ export default {
|
||||
start: 'Aloita',
|
||||
stop: 'Lopeta',
|
||||
subscribe: 'Tilaa',
|
||||
unlinkSso: 'Poista SSO-yhteys',
|
||||
unlinkSso_title: 'Poista SSO-yhteys',
|
||||
unsubscribe: 'Peru tilaus',
|
||||
uploadNewAvatar: 'Lataa uusi avatar',
|
||||
uploadNewImage: 'Lataa uusi kuva',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Aktiivisten käyttäjien raja saavutettu',
|
||||
activeUsersLimitReached: 'Aktiivisten käyttäjien raja saavutettu',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Järjestelmänvalvojan kirjautuminen vaaditaan instanssin alustamiseksi',
|
||||
emailAlreadyInUse: 'Sähköposti on jo käytössä',
|
||||
emailOrUsername: 'Sähköposti tai käyttäjänimi',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Olen lukenut ja hyväksyn nämä ehdot',
|
||||
invalidCredentials: 'Virheelliset tunnistetiedot',
|
||||
invalidEmailOrUsername: 'Virheellinen sähköposti tai käyttäjänimi',
|
||||
invalidPassword: 'Virheellinen salasana',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Peruuta ja sulje',
|
||||
continue: 'Jatka',
|
||||
debugSso: 'Korjaa SSO-virheitä',
|
||||
goBack: 'Takaisin',
|
||||
goHome: 'Kotiin',
|
||||
logIn: 'Kirjaudu sisään',
|
||||
|
||||
@@ -91,6 +91,8 @@ export default {
|
||||
'Êtes-vous sûr de vouloir supprimer ce responsable du projet ?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Êtes-vous sûr de vouloir supprimer ce membre du tableau ?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
"Êtes-vous sûr de vouloir dissocier le SSO de cet utilisateur ? Cela permettra à l'utilisateur de se connecter avec un mot de passe.",
|
||||
assignAsOwner_title: 'Assigner comme propriétaire',
|
||||
atLeastOneListMustBePresent: 'Au moins une liste doit être présente',
|
||||
attachment: 'Pièce jointe',
|
||||
@@ -334,6 +336,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Désactiver la mise en évidence des cartes récentes',
|
||||
typeNameToConfirm: 'Saissir le nom pour confirmer.',
|
||||
typeTitleToConfirm: 'Saisir le titre pour confirmer.',
|
||||
unlinkSso_title: 'Dissociation du SSO',
|
||||
unsavedChanges: 'Modifications non enregistrées',
|
||||
uploadFailedFileIsTooBig: 'Échec du téléchargement : fichier trop volumineux.',
|
||||
uploadFailedNotEnoughStorageSpace:
|
||||
@@ -500,6 +503,8 @@ export default {
|
||||
start: 'Commencer',
|
||||
stop: 'Arrêter',
|
||||
subscribe: "S'abonner",
|
||||
unlinkSso: 'Dissocier le SSO',
|
||||
unlinkSso_title: 'Dissocier le SSO',
|
||||
unsubscribe: 'Se désabonner',
|
||||
uploadNewAvatar: 'Télécharger un nouvel avatar',
|
||||
uploadNewImage: 'Télécharger une nouvelle image',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'La limite d’utilisateurs actifs a été atteinte',
|
||||
activeUsersLimitReached: 'La limite d’utilisateurs actifs a été atteinte',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
"Connexion administrateur requise pour initialiser l'instance",
|
||||
emailAlreadyInUse: 'E-mail déjà utilisé',
|
||||
emailOrUsername: "E-mail ou nom d'utilisateur",
|
||||
iHaveReadAndAgreeToTheseTerms: "J'ai lu et j'accepte ces conditions",
|
||||
invalidCredentials: 'Identifiants invalides',
|
||||
invalidEmailOrUsername: "E-mail ou nom d'utilisateur invalide",
|
||||
invalidPassword: 'Mot de passe invalide',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Annuler et fermer',
|
||||
continue: 'Continuer',
|
||||
debugSso: 'Déboguer le SSO',
|
||||
goBack: 'Retour',
|
||||
goHome: "Aller à l'accueil",
|
||||
logIn: 'Se connecter',
|
||||
|
||||
@@ -81,6 +81,8 @@ export default {
|
||||
areYouSureYouWantToRemoveThisManagerFromProject:
|
||||
'Biztosan eltávolítja ezt a menedzsert a projektből?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard: 'Biztosan eltávolítja ezt a tagot a tábláról?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Biztosan le szeretné választani az SSO-t ettől a felhasználótól? Ez lehetővé teszi a felhasználó számára, hogy jelszóval jelentkezzen be.',
|
||||
assignAsOwner_title: 'Hozzárendelés tulajdonosnak',
|
||||
atLeastOneListMustBePresent: 'Legalább egy lista szükséges.',
|
||||
attachment: 'Melléklet',
|
||||
@@ -321,6 +323,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Legutóbb módosítótt kártyák kiemelésének kikapcsolása',
|
||||
typeNameToConfirm: 'Írja be a nevet a megerősítéshez.',
|
||||
typeTitleToConfirm: 'Írja be a címet a megerősítéshez.',
|
||||
unlinkSso_title: 'SSO leválasztása',
|
||||
unsavedChanges: 'Mentetlen változtatások',
|
||||
uploadFailedFileIsTooBig: 'Feltöltési hiba: a fájl túl nagy.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Feltöltési hiba: nincs elég szabad tárhely.',
|
||||
@@ -494,6 +497,8 @@ export default {
|
||||
start: 'Indítás',
|
||||
stop: 'Megállítás',
|
||||
subscribe: 'Feliratkozás',
|
||||
unlinkSso: 'SSO leválasztása',
|
||||
unlinkSso_title: 'SSO leválasztása',
|
||||
unsubscribe: 'Leiratkozás',
|
||||
uploadNewAvatar: 'Új avatar feltöltése',
|
||||
uploadNewImage: 'Új kép feltöltése',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Aktív felhasználók korlátja elérve',
|
||||
activeUsersLimitReached: 'Aktív felhasználók korlátja elérve',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Rendszergazdai bejelentkezés szükséges a példány inicializálásához',
|
||||
emailAlreadyInUse: 'Az e-mail cím már használatban van',
|
||||
emailOrUsername: 'E-mail vagy felhasználó',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Elolvastam és elfogadom ezeket a feltételeket',
|
||||
invalidCredentials: 'Érvénytelen hitelesítő adatok',
|
||||
invalidEmailOrUsername: 'Érvénytelen e-mail vagy felhasználó',
|
||||
invalidPassword: 'Érvénytelen jelszó',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Mégse és bezárás',
|
||||
continue: 'Folytatás',
|
||||
debugSso: 'SSO hibakeresése',
|
||||
goBack: 'Vissza',
|
||||
goHome: 'Kezdőlapra',
|
||||
logIn: 'Belépés',
|
||||
|
||||
@@ -88,6 +88,8 @@ export default {
|
||||
'Apakah anda ingin menghapus manajer ini dari papan ini?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Apakah anda ingin menghapus anggota ini dari papan ini?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Apakah Anda yakin ingin memutuskan tautan SSO dari pengguna ini? Ini akan memungkinkan pengguna untuk masuk dengan kata sandi.',
|
||||
assignAsOwner_title: 'Tetapkan sebagai pemilik',
|
||||
atLeastOneListMustBePresent: 'Setidaknya satu daftar harus ada',
|
||||
attachment: 'Lampiran',
|
||||
@@ -329,6 +331,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Matikan penyorotan kartu terbaru',
|
||||
typeNameToConfirm: 'Ketik nama untuk mengonfirmasi.',
|
||||
typeTitleToConfirm: 'Ketik judul untuk mengonfirmasi.',
|
||||
unlinkSso_title: 'Pemutusan tautan SSO',
|
||||
unsavedChanges: 'Perubahan yang belum disimpan',
|
||||
uploadFailedFileIsTooBig: 'Unggahan gagal - file terlalu besar.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Unggahan gagal - ruang penyimpanan tidak cukup.',
|
||||
@@ -495,6 +498,8 @@ export default {
|
||||
start: 'Mulai',
|
||||
stop: 'Berhenti',
|
||||
subscribe: 'Berlanggan',
|
||||
unlinkSso: 'Putuskan tautan SSO',
|
||||
unlinkSso_title: 'Putuskan tautan SSO',
|
||||
unsubscribe: 'Berhenti berlangganan',
|
||||
uploadNewAvatar: 'Unggah avatar baru',
|
||||
uploadNewImage: 'Unggah gambar baru',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Batas pengguna aktif tercapai',
|
||||
activeUsersLimitReached: 'Batas pengguna aktif tercapai',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Login admin diperlukan untuk menginisialisasi instance',
|
||||
emailAlreadyInUse: 'E-mail telah digunakan',
|
||||
emailOrUsername: 'E-mail atau username',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Saya telah membaca dan menyetujui syarat-syarat ini',
|
||||
invalidCredentials: 'Kredensial tidak valid',
|
||||
invalidEmailOrUsername: 'E-mail atau username salah',
|
||||
invalidPassword: 'Kata sandi salah',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Batal dan tutup',
|
||||
continue: 'Lanjutkan',
|
||||
debugSso: 'Debug SSO',
|
||||
goBack: 'Kembali',
|
||||
goHome: 'Ke beranda',
|
||||
logIn: 'Masuk',
|
||||
|
||||
@@ -88,6 +88,8 @@ export default {
|
||||
'Sei sicuro di voler rimuovere questo amministratore dal progetto?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Sei sicuro di voler rimuovere questo membro dalla bacheca?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
"Sei sicuro di voler scollegare SSO da questo utente? Questo permetterà all'utente di accedere con una password.",
|
||||
assignAsOwner_title: 'Assegna come proprietario',
|
||||
atLeastOneListMustBePresent: 'Deve essere presente almeno una lista',
|
||||
attachment: 'Allegato',
|
||||
@@ -331,6 +333,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: "Disattiva l'evidenziazione delle scheda recenti",
|
||||
typeNameToConfirm: 'Digita il nome per confermare.',
|
||||
typeTitleToConfirm: 'Digita il titolo per confermare.',
|
||||
unlinkSso_title: 'Scollegamento SSO',
|
||||
unsavedChanges: 'Modifiche non salvate',
|
||||
uploadFailedFileIsTooBig: 'Caricamento fallito: il file è troppo grande.',
|
||||
uploadFailedNotEnoughStorageSpace:
|
||||
@@ -498,6 +501,8 @@ export default {
|
||||
start: 'Inizio',
|
||||
stop: 'Interrompi',
|
||||
subscribe: 'Iscriviti',
|
||||
unlinkSso: 'Scollega SSO',
|
||||
unlinkSso_title: 'Scollega SSO',
|
||||
unsubscribe: 'Annulla iscrizione',
|
||||
uploadNewAvatar: 'Carica nuovo avatar',
|
||||
uploadNewImage: 'Carica nuova immagine',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Limite utenti attivi raggiunto',
|
||||
activeUsersLimitReached: 'Limite utenti attivi raggiunto',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
"Login amministratore richiesto per inizializzare l'istanza",
|
||||
emailAlreadyInUse: 'E-mail già in uso',
|
||||
emailOrUsername: 'E-mail o username',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Ho letto e accetto questi termini',
|
||||
invalidCredentials: 'Credenziali non valide',
|
||||
invalidEmailOrUsername: 'E-mail o username non valido',
|
||||
invalidPassword: 'Password non valida',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Annulla e chiudi',
|
||||
continue: 'Continua',
|
||||
debugSso: 'Debug SSO',
|
||||
goBack: 'Torna indietro',
|
||||
goHome: 'Vai alla home',
|
||||
logIn: 'Accedi',
|
||||
|
||||
@@ -85,6 +85,8 @@ export default {
|
||||
'このマネージャーをプロジェクトから外してもよろしいですか?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'このメンバーをボードから外してもよろしいですか?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'このユーザーからSSOのリンクを解除してもよろしいですか?これにより、ユーザーはパスワードでログインできるようになります。',
|
||||
assignAsOwner_title: 'オーナーとして割り当て',
|
||||
atLeastOneListMustBePresent: '少なくとも1つのリストが必要です',
|
||||
attachment: '添付ファイル',
|
||||
@@ -324,6 +326,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: '最近のカードのハイライトをオフにする',
|
||||
typeNameToConfirm: '確認のため名前を入力してください。',
|
||||
typeTitleToConfirm: '確認のためタイトルを入力してください。',
|
||||
unlinkSso_title: 'SSOのリンク解除',
|
||||
unsavedChanges: '未保存の変更',
|
||||
uploadFailedFileIsTooBig: 'アップロード失敗 - ファイルが大きすぎます。',
|
||||
uploadFailedNotEnoughStorageSpace: 'アップロード失敗 - ストレージ容量が不足しています。',
|
||||
@@ -492,6 +495,8 @@ export default {
|
||||
start: 'スタート',
|
||||
stop: 'ストップ',
|
||||
subscribe: '購読',
|
||||
unlinkSso: 'SSOのリンクを解除',
|
||||
unlinkSso_title: 'SSOのリンクを解除',
|
||||
unsubscribe: '購読解除',
|
||||
uploadNewAvatar: '新しいアバターをアップロード',
|
||||
uploadNewImage: '新しい画像をアップロード',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'アクティブユーザーの上限に達しました',
|
||||
activeUsersLimitReached: 'アクティブユーザーの上限に達しました',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'インスタンスを初期化するには管理者ログインが必要です',
|
||||
emailAlreadyInUse: 'Eメールは既に使われています',
|
||||
emailOrUsername: 'Eメールまたはユーザー名',
|
||||
iHaveReadAndAgreeToTheseTerms: 'これらの利用規約を読み、同意します',
|
||||
invalidCredentials: '認証情報が無効です',
|
||||
invalidEmailOrUsername: 'Eメールまたはユーザー名が無効',
|
||||
invalidPassword: 'パスワードが無効',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'キャンセルして閉じる',
|
||||
continue: '続行',
|
||||
debugSso: 'SSOをデバッグ',
|
||||
goBack: '戻る',
|
||||
goHome: 'ホームへ',
|
||||
logIn: 'ログイン',
|
||||
|
||||
@@ -79,6 +79,8 @@ export default {
|
||||
'이 API 키를 재생성하시겠습니까? 이전 키는 더 이상 작동하지 않습니다.',
|
||||
areYouSureYouWantToRemoveThisManagerFromProject: '이 관리자를 프로젝트에서 제거하시겠습니까?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard: '이 멤버를 보드에서 제거하시겠습니까?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'이 사용자로부터 SSO 연결을 해제하시겠습니까? 이렇게 하면 사용자가 비밀번호로 로그인할 수 있습니다.',
|
||||
assignAsOwner_title: '소유자로 지정',
|
||||
atLeastOneListMustBePresent: '최소 하나의 목록이 있어야 합니다',
|
||||
attachment: '첨부 파일',
|
||||
@@ -319,6 +321,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: '최근 카드 강조 표시 끄기',
|
||||
typeNameToConfirm: '확인하려면 이름을 입력하세요.',
|
||||
typeTitleToConfirm: '확인하려면 제목을 입력하세요.',
|
||||
unlinkSso_title: 'SSO 연결 해제',
|
||||
unsavedChanges: '저장되지 않은 변경사항',
|
||||
uploadFailedFileIsTooBig: '업로드 실패: 파일이 너무 큽니다.',
|
||||
uploadFailedNotEnoughStorageSpace: '업로드 실패: 저장 공간이 부족합니다.',
|
||||
@@ -489,6 +492,8 @@ export default {
|
||||
start: '시작',
|
||||
stop: '중지',
|
||||
subscribe: '구독',
|
||||
unlinkSso: 'SSO 연결 해제',
|
||||
unlinkSso_title: 'SSO 연결 해제',
|
||||
unsubscribe: '구독 취소',
|
||||
uploadNewAvatar: '새 아바타 업로드',
|
||||
uploadNewImage: '새 이미지 업로드',
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: '활성 사용자 한도에 도달했습니다',
|
||||
activeUsersLimitReached: '활성 사용자 한도에 도달했습니다',
|
||||
adminLoginRequiredToInitializeInstance: '인스턴스 초기화를 위해 관리자 로그인이 필요합니다',
|
||||
emailAlreadyInUse: '이미 사용 중인 이메일',
|
||||
emailOrUsername: '이메일 또는 사용자 이름',
|
||||
iHaveReadAndAgreeToTheseTerms: '이 약관을 읽고 동의합니다',
|
||||
invalidCredentials: '잘못된 자격 증명',
|
||||
invalidEmailOrUsername: '잘못된 이메일 또는 사용자 이름',
|
||||
invalidPassword: '잘못된 비밀번호',
|
||||
@@ -25,6 +24,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: '취소 후 닫기',
|
||||
continue: '계속',
|
||||
debugSso: 'SSO 디버그',
|
||||
goBack: '뒤로 가기',
|
||||
goHome: '홈으로 가기',
|
||||
logIn: '로그인',
|
||||
|
||||
@@ -88,6 +88,8 @@ export default {
|
||||
'Weet u zeker dat u deze manager uit het project wilt verwijderen?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Weet u zeker dat u dit lid uit het bord wilt verwijderen?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Weet je zeker dat je SSO wilt ontkoppelen van deze gebruiker? Dit stelt de gebruiker in staat om in te loggen met een wachtwoord.',
|
||||
assignAsOwner_title: 'Toewijzen als eigenaar',
|
||||
atLeastOneListMustBePresent: 'Er moet ten minste één lijst aanwezig zijn',
|
||||
attachment: 'Bijlage',
|
||||
@@ -329,6 +331,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Recente kaartmarkering uitschakelen',
|
||||
typeNameToConfirm: 'Typ naam om te bevestigen.',
|
||||
typeTitleToConfirm: 'Typ titel om te bevestigen.',
|
||||
unlinkSso_title: 'SSO ontkoppelen',
|
||||
unsavedChanges: 'Niet-opgeslagen wijzigingen',
|
||||
uploadFailedFileIsTooBig: 'Upload mislukt: bestand is te groot.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Upload mislukt: niet genoeg opslagruimte.',
|
||||
@@ -498,6 +501,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stop',
|
||||
subscribe: 'Abonneren',
|
||||
unlinkSso: 'SSO ontkoppelen',
|
||||
unlinkSso_title: 'SSO ontkoppelen',
|
||||
unsubscribe: 'Afmelden',
|
||||
uploadNewAvatar: 'Nieuwe avatar uploaden',
|
||||
uploadNewImage: 'Nieuwe afbeelding uploaden',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Limiet voor actieve gebruikers bereikt',
|
||||
activeUsersLimitReached: 'Limiet voor actieve gebruikers bereikt',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Beheerder login vereist om instantie te initialiseren',
|
||||
emailAlreadyInUse: 'E-mail is al in gebruik',
|
||||
emailOrUsername: 'E-mail of gebruikersnaam',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Ik heb deze voorwaarden gelezen en ga ermee akkoord',
|
||||
invalidCredentials: 'Ongeldige inloggegevens',
|
||||
invalidEmailOrUsername: 'Ongeldig e-mailadres of gebruikersnaam',
|
||||
invalidPassword: 'Ongeldig wachtwoord',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Annuleren en sluiten',
|
||||
continue: 'Doorgaan',
|
||||
debugSso: 'SSO debuggen',
|
||||
goBack: 'Terug gaan',
|
||||
goHome: 'Naar startpagina',
|
||||
logIn: 'Inloggen',
|
||||
|
||||
@@ -87,6 +87,8 @@ export default {
|
||||
'Jesteś pewien że chcesz usunąć tego zarządcę z projektu?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Jesteś pewien że chcesz usunąć tego członka z tablicy?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Czy na pewno chcesz odłączyć SSO od tego użytkownika? Pozwoli to użytkownikowi zalogować się przy użyciu hasła.',
|
||||
assignAsOwner_title: 'Przypisz jako właściciela',
|
||||
atLeastOneListMustBePresent: 'Przynajmniej jedna lista musi istnieć',
|
||||
attachment: 'Załącznik',
|
||||
@@ -328,6 +330,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Wyłącz podświetlanie nowych kart',
|
||||
typeNameToConfirm: 'Wpisz nazwę aby potwierdzić.',
|
||||
typeTitleToConfirm: 'Wpisz tytuł aby potwierdzić.',
|
||||
unlinkSso_title: 'Odłączanie SSO',
|
||||
unsavedChanges: 'Niezapisane zmiany',
|
||||
uploadFailedFileIsTooBig: 'Przesyłanie nie powiodło się: plik jest za duży.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Przesyłanie nie powiodło się: za mało miejsca na dysku.',
|
||||
@@ -495,6 +498,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stop',
|
||||
subscribe: 'Subskrybuj',
|
||||
unlinkSso: 'Odłącz SSO',
|
||||
unlinkSso_title: 'Odłącz SSO',
|
||||
unsubscribe: 'Odsubskrybuj',
|
||||
uploadNewAvatar: 'Wgraj nowy awatar',
|
||||
uploadNewImage: 'Wgraj nowy obraz',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Osiągnięto limit aktywnych użytkowników',
|
||||
activeUsersLimitReached: 'Osiągnięto limit aktywnych użytkowników',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Wymagane logowanie administratora do inicjalizacji instancji',
|
||||
emailAlreadyInUse: 'E-mail jest już używany',
|
||||
emailOrUsername: 'E-mail lub nazwa użytkownika',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Przeczytałem i zgadzam się z tymi warunkami',
|
||||
invalidCredentials: 'Błędne dane logowania',
|
||||
invalidEmailOrUsername: 'Błędny e-mail lub nazwa użytkownika',
|
||||
invalidPassword: 'Błędne hasło',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Anuluj i zamknij',
|
||||
continue: 'Kontynuuj',
|
||||
debugSso: 'Debuguj SSO',
|
||||
goBack: 'Wróć',
|
||||
goHome: 'Idź do domu',
|
||||
logIn: 'Zaloguj',
|
||||
|
||||
@@ -89,6 +89,8 @@ export default {
|
||||
'Tem certeza de que deseja remover este gerente do projeto?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Tem certeza de que deseja remover este membro do quadro?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Tem certeza de que deseja desvincular o SSO deste usuário? Isso permitirá que o usuário faça login com uma senha.',
|
||||
assignAsOwner_title: 'Atribuir como proprietário',
|
||||
atLeastOneListMustBePresent: 'Pelo menos uma lista deve estar presente',
|
||||
attachment: 'Anexo',
|
||||
@@ -332,6 +334,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Desativar destaque de cartões recentes',
|
||||
typeNameToConfirm: 'Digite o nome para confirmar.',
|
||||
typeTitleToConfirm: 'Digite o título para confirmar.',
|
||||
unlinkSso_title: 'Desvinculação de SSO',
|
||||
unsavedChanges: 'Alterações não salvas',
|
||||
uploadFailedFileIsTooBig: 'Falha no upload: arquivo muito grande.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Falha no upload: espaço de armazenamento insuficiente.',
|
||||
@@ -498,6 +501,8 @@ export default {
|
||||
start: 'Iniciar',
|
||||
stop: 'Parar',
|
||||
subscribe: 'Inscrever-se',
|
||||
unlinkSso: 'Desvincular SSO',
|
||||
unlinkSso_title: 'Desvincular SSO',
|
||||
unsubscribe: 'Cancelar inscrição',
|
||||
uploadNewAvatar: 'Enviar novo avatar',
|
||||
uploadNewImage: 'Enviar nova imagem',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Limite de usuários ativos atingido',
|
||||
activeUsersLimitReached: 'Limite de usuários ativos atingido',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Login de administrador necessário para inicializar a instância',
|
||||
emailAlreadyInUse: 'E-mail já está em uso',
|
||||
emailOrUsername: 'E-mail ou nome de usuário',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Li e concordo com estes termos',
|
||||
invalidCredentials: 'Credenciais inválidas',
|
||||
invalidEmailOrUsername: 'E-mail ou nome de usuário inválido',
|
||||
invalidPassword: 'Senha inválida',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Cancelar e fechar',
|
||||
continue: 'Continuar',
|
||||
debugSso: 'Depurar SSO',
|
||||
goBack: 'Voltar',
|
||||
goHome: 'Ir para início',
|
||||
logIn: 'Entrar',
|
||||
|
||||
@@ -91,6 +91,8 @@ export default {
|
||||
'Tem a certeza de que pretende remover este gestor do projeto?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Tem a certeza de que pretende remover este membro do quadro?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Tem a certeza de que pretende desvincular o SSO deste utilizador? Isto permitirá que o utilizador inicie sessão com uma palavra-passe.',
|
||||
assignAsOwner_title: 'Atribuir como proprietário',
|
||||
atLeastOneListMustBePresent: 'Pelo menos uma lista deve estar presente',
|
||||
attachment: 'Anexo',
|
||||
@@ -334,6 +336,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Desativar destaque de cartões recentes',
|
||||
typeNameToConfirm: 'Digite o nome para confirmar.',
|
||||
typeTitleToConfirm: 'Digite o título para confirmar.',
|
||||
unlinkSso_title: 'Desvinculação de SSO',
|
||||
unsavedChanges: 'Alterações não guardadas',
|
||||
uploadFailedFileIsTooBig: 'Carregamento falhado - ficheiro demasiado grande.',
|
||||
uploadFailedNotEnoughStorageSpace:
|
||||
@@ -501,6 +504,8 @@ export default {
|
||||
start: 'Iniciar',
|
||||
stop: 'Parar',
|
||||
subscribe: 'Subscrever',
|
||||
unlinkSso: 'Desvincular SSO',
|
||||
unlinkSso_title: 'Desvincular SSO',
|
||||
unsubscribe: 'Cancelar subscrição',
|
||||
uploadNewAvatar: 'Carregar novo avatar',
|
||||
uploadNewImage: 'Carregar nova imagem',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Limite de utilizadores activos atingido',
|
||||
activeUsersLimitReached: 'Limite de utilizadores activos atingido',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Início de sessão de administrador necessário para inicializar a instância',
|
||||
emailAlreadyInUse: 'E-mail já está em uso',
|
||||
emailOrUsername: 'E-mail ou nome de utilizador',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Li e concordo com estes termos',
|
||||
invalidCredentials: 'Credenciais inválidas',
|
||||
invalidEmailOrUsername: 'E-mail ou nome de utilizador inválido',
|
||||
invalidPassword: 'Palavra-passe inválida',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Cancelar e fechar',
|
||||
continue: 'Continuar',
|
||||
debugSso: 'Depurar SSO',
|
||||
goBack: 'Voltar',
|
||||
goHome: 'Ir para início',
|
||||
logIn: 'Iniciar sessão',
|
||||
|
||||
@@ -85,6 +85,8 @@ export default {
|
||||
'Sigur doriți să eliminați acest manager din proiect?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Sigur doriți să eliminați acest membru din consiliu?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Sigur doriți să deconectați SSO de la acest utilizator? Acest lucru va permite utilizatorului să se conecteze cu o parolă.',
|
||||
assignAsOwner_title: 'Atribuie ca proprietar',
|
||||
atLeastOneListMustBePresent: 'Cel puțin o listă trebuie să fie prezentă',
|
||||
attachment: 'Atașament',
|
||||
@@ -327,6 +329,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Oprește evidențierea cardurilor recente',
|
||||
typeNameToConfirm: 'Tastează numele pentru confirmare.',
|
||||
typeTitleToConfirm: 'Tastează titlul pentru confirmare.',
|
||||
unlinkSso_title: 'Deconectarea SSO',
|
||||
unsavedChanges: 'Modificări nesalvate',
|
||||
uploadFailedFileIsTooBig: 'Încărcarea a eșuat: fișierul este prea mare.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Încărcarea a eșuat: spațiu de stocare insuficient.',
|
||||
@@ -495,6 +498,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stop',
|
||||
subscribe: 'Abonati-va',
|
||||
unlinkSso: 'Deconectează SSO',
|
||||
unlinkSso_title: 'Deconectează SSO',
|
||||
unsubscribe: 'Dezabonați-vă',
|
||||
uploadNewAvatar: 'Încărcați un avatar nou',
|
||||
uploadNewImage: 'Încărcați o nouă imagine',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Limita utilizatorilor activi a fost atinsă',
|
||||
activeUsersLimitReached: 'Limita utilizatorilor activi a fost atinsă',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Este necesară autentificarea administratorului pentru a inițializa instanța',
|
||||
emailAlreadyInUse: 'E-mail deja utilizat',
|
||||
emailOrUsername: 'E-mail sau nume de utilizator',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Am citit și sunt de acord cu acești termeni',
|
||||
invalidCredentials: 'Credențiale nevalide',
|
||||
invalidEmailOrUsername: 'E-mail sau nume de utilizator introduse greșit',
|
||||
invalidPassword: 'Parola greșita',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Anulează și închide',
|
||||
continue: 'Continuă',
|
||||
debugSso: 'Depanează SSO',
|
||||
goBack: 'Înapoi',
|
||||
goHome: 'Acasă',
|
||||
logIn: 'Autentificarea',
|
||||
|
||||
@@ -89,6 +89,8 @@ export default {
|
||||
'Вы уверены, что хотите удалить этого менеджера из проекта?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Вы уверены, что хотите удалить этого участника из доски?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Вы уверены, что хотите отвязать SSO от этого пользователя? Это позволит пользователю входить с помощью пароля.',
|
||||
assignAsOwner_title: 'Назначить владельцем',
|
||||
atLeastOneListMustBePresent: 'Должен быть хотя бы один список',
|
||||
attachment: 'Вложение',
|
||||
@@ -330,6 +332,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Выключить подсветку последних карточек',
|
||||
typeNameToConfirm: 'Введите имя для подтверждения.',
|
||||
typeTitleToConfirm: 'Введите название для подтверждения.',
|
||||
unlinkSso_title: 'Отвязка SSO',
|
||||
unsavedChanges: 'Несохранённые изменения',
|
||||
uploadFailedFileIsTooBig: 'Загрузка не удалась: файл слишком большой.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Загрузка не удалась: недостаточно места для хранения.',
|
||||
@@ -497,6 +500,8 @@ export default {
|
||||
start: 'Начать',
|
||||
stop: 'Остановить',
|
||||
subscribe: 'Подписаться',
|
||||
unlinkSso: 'Отвязать SSO',
|
||||
unlinkSso_title: 'Отвязать SSO',
|
||||
unsubscribe: 'Отписаться',
|
||||
uploadNewAvatar: 'Загрузить новый аватар',
|
||||
uploadNewImage: 'Загрузить новое изображение',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Достигнут лимит активных пользователей',
|
||||
activeUsersLimitReached: 'Достигнут лимит активных пользователей',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Требуется вход администратора для инициализации экземпляра',
|
||||
emailAlreadyInUse: 'E-mail уже занят',
|
||||
emailOrUsername: 'E-mail или имя пользователя',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Я прочитал и согласен с этими условиями',
|
||||
invalidCredentials: 'Недействительные учетные данные',
|
||||
invalidEmailOrUsername: 'Неверный e-mail или имя пользователя',
|
||||
invalidPassword: 'Неверный пароль',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Отменить и закрыть',
|
||||
continue: 'Продолжить',
|
||||
debugSso: 'Отладить SSO',
|
||||
goBack: 'Назад',
|
||||
goHome: 'На главную',
|
||||
logIn: 'Войти',
|
||||
|
||||
@@ -83,6 +83,8 @@ export default {
|
||||
'Naozaj chcete zmazať daného správcu tohto projektu?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Naozaj chcete odstrániť tohoto člena z tabule?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Naozaj chcete odpojiť SSO od tohto používateľa? Tým umožníte používateľovi prihlásiť sa pomocou hesla.',
|
||||
assignAsOwner_title: 'Prideliť ako vlastníka',
|
||||
atLeastOneListMustBePresent: 'Musí byť prítomný aspoň jeden zoznam',
|
||||
attachment: 'Príloha',
|
||||
@@ -322,6 +324,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Vypnúť zvýrazňovanie nedávnych kariet',
|
||||
typeNameToConfirm: 'Zadajte meno na potvrdenie.',
|
||||
typeTitleToConfirm: 'Zadajte názov na potvrdenie.',
|
||||
unlinkSso_title: 'Odpojenie SSO',
|
||||
unsavedChanges: 'Neuložené zmeny',
|
||||
uploadFailedFileIsTooBig: 'Nahrávanie zlyhalo: súbor je príliš veľký.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Nahrávanie zlyhalo: nedostatok úložného priestoru.',
|
||||
@@ -488,6 +491,8 @@ export default {
|
||||
start: 'Start',
|
||||
stop: 'Stop',
|
||||
subscribe: 'Odoberať',
|
||||
unlinkSso: 'Odpojiť SSO',
|
||||
unlinkSso_title: 'Odpojiť SSO',
|
||||
unsubscribe: 'Neodoberať',
|
||||
uploadNewAvatar: 'Nahrať nový avatar',
|
||||
uploadNewImage: 'Nahrať nový obrázok',
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
export default {
|
||||
translation: {
|
||||
common: {
|
||||
activeUserLimitReached: 'Limit aktívnych používateľov bol dosiahnutý',
|
||||
activeUsersLimitReached: 'Limit aktívnych používateľov bol dosiahnutý',
|
||||
adminLoginRequiredToInitializeInstance:
|
||||
'Na inicializáciu inštancie je potrebné prihlásenie správcu',
|
||||
emailAlreadyInUse: 'E-mail je už použitý',
|
||||
emailOrUsername: 'E-mail alebo používateľské meno',
|
||||
iHaveReadAndAgreeToTheseTerms: 'Prečítal som si a súhlasím s týmito podmienkami',
|
||||
invalidCredentials: 'Neplatné prihlasovacie údaje',
|
||||
invalidEmailOrUsername: 'Nesprávny e-mail alebo používateľské meno',
|
||||
invalidPassword: 'Nesprávne heslo',
|
||||
@@ -26,6 +25,7 @@ export default {
|
||||
action: {
|
||||
cancelAndClose: 'Zrušiť a zavrieť',
|
||||
continue: 'Pokračovať',
|
||||
debugSso: 'Ladiť SSO',
|
||||
goBack: 'Ísť späť',
|
||||
goHome: 'Ísť domov',
|
||||
logIn: 'Prihlásiť sa',
|
||||
|
||||
@@ -87,6 +87,8 @@ export default {
|
||||
'Да ли заиста желите да уклоните овог руководиоца из овог пројекта?',
|
||||
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||
'Да ли заиста желите да уклоните овог члана из ове табле?',
|
||||
areYouSureYouWantToUnlinkSsoFromThisUser:
|
||||
'Да ли сте сигурни да желите да одвојите SSO са овог корисника? Ово ће омогућити кориснику да се пријави помоћу лозинке.',
|
||||
assignAsOwner_title: 'Додели као власника',
|
||||
atLeastOneListMustBePresent: 'Мора постојати најмање једна листа',
|
||||
attachment: 'Прилог',
|
||||
@@ -325,6 +327,7 @@ export default {
|
||||
turnOffRecentCardHighlighting: 'Искључи истицање скорашњих картица',
|
||||
typeNameToConfirm: 'Укуцај име за потврду.',
|
||||
typeTitleToConfirm: 'Укуцај наслов за потврду.',
|
||||
unlinkSso_title: 'Одвајање SSO',
|
||||
unsavedChanges: 'Несачуване промене',
|
||||
uploadFailedFileIsTooBig: 'Слање неуспешно: датотека је превелика.',
|
||||
uploadFailedNotEnoughStorageSpace: 'Слање неуспешно: нема довољно простора за складиштење.',
|
||||
@@ -491,6 +494,8 @@ export default {
|
||||
start: 'Почни',
|
||||
stop: 'Заустави',
|
||||
subscribe: 'Претплати се',
|
||||
unlinkSso: 'Одвоји SSO',
|
||||
unlinkSso_title: 'Одвоји SSO',
|
||||
unsubscribe: 'Укини претплату',
|
||||
uploadNewAvatar: 'Постави нови аватар',
|
||||
uploadNewImage: 'Постави нову слику',
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user