mirror of
https://github.com/wekan/wekan.git
synced 2025-12-18 00:10:13 +01:00
Compare commits
78 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e07e461e48 | ||
|
|
451e9f7870 | ||
|
|
3c57840340 | ||
|
|
2cbf64da33 | ||
|
|
3ef0a3e685 | ||
|
|
9ebdc82d46 | ||
|
|
fe4b36b85d | ||
|
|
b7ff370561 | ||
|
|
5686c92e05 | ||
|
|
784c5c6b0c | ||
|
|
30541260f0 | ||
|
|
59fc756a0b | ||
|
|
4e346c0ab7 | ||
|
|
19fa12bb26 | ||
|
|
e669b1b9c7 | ||
|
|
f24e4a4ce3 | ||
|
|
8b5430acb8 | ||
|
|
614cb44b55 | ||
|
|
0ce8e8b74d | ||
|
|
4ea53af76e | ||
|
|
016f17d663 | ||
|
|
07f69950a7 | ||
|
|
cec625607d | ||
|
|
a290c7b34b | ||
|
|
5b77ac1b44 | ||
|
|
41c635afb5 | ||
|
|
adbf729cb2 | ||
|
|
88ea716d63 | ||
|
|
003a07ebce | ||
|
|
d3c237bc66 | ||
|
|
bac0fa81fc | ||
|
|
a42915614a | ||
|
|
5ff9bf331f | ||
|
|
36d7b0f8a7 | ||
|
|
67c8a98f20 | ||
|
|
a81a603031 | ||
|
|
e30ce78053 | ||
|
|
3d70de94c6 | ||
|
|
70975c2944 | ||
|
|
960e2126b4 | ||
|
|
3db1305e58 | ||
|
|
f16780b5e3 | ||
|
|
37a3065f3c | ||
|
|
7ff1649d89 | ||
|
|
a39ae31b45 | ||
|
|
6302a48221 | ||
|
|
c277bee9d2 | ||
|
|
c5f5ce126d | ||
|
|
0004ae716b | ||
|
|
7f53dfac3c | ||
|
|
18003900c2 | ||
|
|
fe104791b5 | ||
|
|
6244657ca5 | ||
|
|
46866dac85 | ||
|
|
c829c073cf | ||
|
|
0772ca4036 | ||
|
|
581733d605 | ||
|
|
b02af27ac3 | ||
|
|
20af0a2ef5 | ||
|
|
c58ab5b07d | ||
|
|
e5e711c938 | ||
|
|
42594abe4e | ||
|
|
0afbdc95b4 | ||
|
|
16a74bb748 | ||
|
|
8711b476be | ||
|
|
df9fba4765 | ||
|
|
7d27139aa9 | ||
|
|
e4638d5fbc | ||
|
|
bc5854dd29 | ||
|
|
ba49d4d140 | ||
|
|
71b7dcffb5 | ||
|
|
7713e613b4 | ||
|
|
91a0aa7387 | ||
|
|
fbd6b920ef | ||
|
|
1b25d1d572 | ||
|
|
e93e72234c | ||
|
|
15d9b0ae3a | ||
|
|
550d87ac6c |
194 changed files with 15977 additions and 2396 deletions
2
.github/workflows/depsreview.yaml
vendored
2
.github/workflows/depsreview.yaml
vendored
|
|
@ -9,6 +9,6 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Checkout Repository'
|
- name: 'Checkout Repository'
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
- name: 'Dependency Review'
|
- name: 'Dependency Review'
|
||||||
uses: actions/dependency-review-action@v4
|
uses: actions/dependency-review-action@v4
|
||||||
|
|
|
||||||
4
.github/workflows/docker-publish.yml
vendored
4
.github/workflows/docker-publish.yml
vendored
|
|
@ -32,7 +32,7 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
# Login against a Docker registry except on PR
|
# Login against a Docker registry except on PR
|
||||||
# https://github.com/docker/login-action
|
# https://github.com/docker/login-action
|
||||||
|
|
@ -48,7 +48,7 @@ jobs:
|
||||||
# https://github.com/docker/metadata-action
|
# https://github.com/docker/metadata-action
|
||||||
- name: Extract Docker metadata
|
- name: Extract Docker metadata
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@c1e51972afc2121e065aed6d45c65596fe445f3f
|
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051
|
||||||
with:
|
with:
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
|
|
||||||
|
|
|
||||||
2
.github/workflows/dockerimage.yml
vendored
2
.github/workflows/dockerimage.yml
vendored
|
|
@ -15,6 +15,6 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Build the Docker image
|
- name: Build the Docker image
|
||||||
run: docker build . --file Dockerfile --tag wekan:$(date +%s)
|
run: docker build . --file Dockerfile --tag wekan:$(date +%s)
|
||||||
|
|
|
||||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
|
|
@ -15,7 +15,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|
|
||||||
20
.github/workflows/test_suite.yml
vendored
20
.github/workflows/test_suite.yml
vendored
|
|
@ -18,7 +18,7 @@ jobs:
|
||||||
# runs-on: ubuntu-latest
|
# runs-on: ubuntu-latest
|
||||||
# steps:
|
# steps:
|
||||||
# - name: checkout
|
# - name: checkout
|
||||||
# uses: actions/checkout@v5
|
# uses: actions/checkout@v6
|
||||||
#
|
#
|
||||||
# - name: setup node
|
# - name: setup node
|
||||||
# uses: actions/setup-node@v1
|
# uses: actions/setup-node@v1
|
||||||
|
|
@ -42,7 +42,7 @@ jobs:
|
||||||
# needs: [lintcode]
|
# needs: [lintcode]
|
||||||
# steps:
|
# steps:
|
||||||
# - name: checkout
|
# - name: checkout
|
||||||
# uses: actions/checkout@v5
|
# uses: actions/checkout@v6
|
||||||
#
|
#
|
||||||
# - name: setup node
|
# - name: setup node
|
||||||
# uses: actions/setup-node@v1
|
# uses: actions/setup-node@v1
|
||||||
|
|
@ -65,7 +65,7 @@ jobs:
|
||||||
# needs: [lintcode,lintstyle]
|
# needs: [lintcode,lintstyle]
|
||||||
# steps:
|
# steps:
|
||||||
# - name: checkout
|
# - name: checkout
|
||||||
# uses: actions/checkout@v5
|
# uses: actions/checkout@v6
|
||||||
#
|
#
|
||||||
# - name: setup node
|
# - name: setup node
|
||||||
# uses: actions/setup-node@v1
|
# uses: actions/setup-node@v1
|
||||||
|
|
@ -90,12 +90,12 @@ jobs:
|
||||||
|
|
||||||
# CHECKOUTS
|
# CHECKOUTS
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
# CACHING
|
# CACHING
|
||||||
- name: Install Meteor
|
- name: Install Meteor
|
||||||
id: cache-meteor-install
|
id: cache-meteor-install
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.meteor
|
path: ~/.meteor
|
||||||
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
|
key: v1-meteor-${{ hashFiles('.meteor/versions') }}
|
||||||
|
|
@ -104,7 +104,7 @@ jobs:
|
||||||
|
|
||||||
- name: Cache NPM dependencies
|
- name: Cache NPM dependencies
|
||||||
id: cache-meteor-npm
|
id: cache-meteor-npm
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.npm
|
path: ~/.npm
|
||||||
key: v1-npm-${{ hashFiles('package-lock.json') }}
|
key: v1-npm-${{ hashFiles('package-lock.json') }}
|
||||||
|
|
@ -113,7 +113,7 @@ jobs:
|
||||||
|
|
||||||
- name: Cache Meteor build
|
- name: Cache Meteor build
|
||||||
id: cache-meteor-build
|
id: cache-meteor-build
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
.meteor/local/resolver-result-cache.json
|
.meteor/local/resolver-result-cache.json
|
||||||
|
|
@ -136,7 +136,7 @@ jobs:
|
||||||
run: sh ./test-wekan.sh -cv
|
run: sh ./test-wekan.sh -cv
|
||||||
|
|
||||||
- name: Upload coverage
|
- name: Upload coverage
|
||||||
uses: actions/upload-artifact@v5
|
uses: actions/upload-artifact@v6
|
||||||
with:
|
with:
|
||||||
name: coverage-folder
|
name: coverage-folder
|
||||||
path: .coverage/
|
path: .coverage/
|
||||||
|
|
@ -147,10 +147,10 @@ jobs:
|
||||||
needs: [tests]
|
needs: [tests]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Download coverage
|
- name: Download coverage
|
||||||
uses: actions/download-artifact@v6
|
uses: actions/download-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: coverage-folder
|
name: coverage-folder
|
||||||
path: .coverage/
|
path: .coverage/
|
||||||
|
|
|
||||||
54
CHANGELOG.md
54
CHANGELOG.md
|
|
@ -22,6 +22,60 @@ Fixing other platforms In Progress.
|
||||||
WeKan 8.00-8.06 had wrong raw database directory setting /var/snap/wekan/common/wekan and some cards were not visible.
|
WeKan 8.00-8.06 had wrong raw database directory setting /var/snap/wekan/common/wekan and some cards were not visible.
|
||||||
Those are fixed at WeKan 8.07 where database directory is back to /var/snap/wekan/common and all cards are visible.
|
Those are fixed at WeKan 8.07 where database directory is back to /var/snap/wekan/common and all cards are visible.
|
||||||
|
|
||||||
|
# Upcoming WeKan ® release
|
||||||
|
|
||||||
|
This release adds the following updates:
|
||||||
|
|
||||||
|
- [Update GitHub docker/metadata-action from 5.8.0 to 5.9.0](https://github.com/wekan/wekan/pull/6012).
|
||||||
|
Thanks to dependabot.
|
||||||
|
- [Updated security.md](https://github.com/wekan/wekan/commit/7ff1649d8909917cae590c68def6eecac0442f91).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Updated build script for Linux arm64 bundle](https://github.com/wekan/wekan/commit/3db1305e58168f7417023ccd8d54995026844b18).
|
||||||
|
Thanks to xet7.
|
||||||
|
|
||||||
|
and fixes the following bugs:
|
||||||
|
|
||||||
|
- [Fix Broken Strikethroughs in Markdown to HTML conversion](https://github.com/wekan/wekan/pull/6009).
|
||||||
|
Thanks to brlin-tw.
|
||||||
|
|
||||||
|
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||||
|
|
||||||
|
# v8.17 2025-11-06 WeKan ® release
|
||||||
|
|
||||||
|
This release adds the following new feature:
|
||||||
|
|
||||||
|
- [Feature: Workspaces, at All Boards page](https://github.com/wekan/wekan/commit/0afbdc95b49537e06b4f9cf98f51a669ef249384).
|
||||||
|
Thanks to xet7.
|
||||||
|
|
||||||
|
and fixes the following bugs:
|
||||||
|
|
||||||
|
- [Fix 8.16: Switching Board View fails with 403 error](https://github.com/wekan/wekan/commit/550d87ac6cb3ec946600616485afdbd242983ab4).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Moved migrations from opening board to right sidebar / Migrations](https://github.com/wekan/wekan/commit/1b25d1d5720d4f486a10d2acce37e315cf9b6057).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Fix 8.16 Lists with no items are deleted every time when board is opened. Moved migrations to right sidebar](https://github.com/wekan/wekan/commit/7713e613b431e44dc13cee72e7a1e5f031473fa6).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Remove old translations and code not in use anymore](https://github.com/wekan/wekan/commit/ba49d4d140bc0d4cfb5a96db9ab077bc85db58f1).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Fixed sidebar migrations to be per-board, not global. Clarified translations](https://github.com/wekan/wekan/commit/e4638d5fbcbe004ac393462331805cac3ba25097).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Fix star board](https://github.com/wekan/wekan/commit/8711b476be30496b96b845529b5717bb6e685c27).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Fix Card emoji issues](https://github.com/wekan/wekan/commit/e5e711c938edcca23c974c3eec97296898bcf24e).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Try to fix Edit Custom Fields button not working. Removed duplicate option from Boards Settings](https://github.com/wekan/wekan/commit/20af0a2ef55b11e7205845859ee92a929616ce91).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Fix Regression - calendar popup to set due date has gone](https://github.com/wekan/wekan/commit/581733d605b7e0494e72229c45947cff134f6dd6).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Remove not working Bookmark menu option](https://github.com/wekan/wekan/commit/c829c073cf822e48b7cd84bbfb79d42867412517).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Fix Workspaces at All Boards to have correct count of remaining etc, while starred also at Starred/Favorites](https://github.com/wekan/wekan/commit/6244657ca53a54646ec01e702851a51d89bd0d55).
|
||||||
|
Thanks to xet7.
|
||||||
|
- [Fix Worker Permissions does not allow for cards to be moved. - v8.15. Removed buttons Worker should not use](https://github.com/wekan/wekan/commit/18003900c2d497c129793d1653d4d9872a2f19da).
|
||||||
|
Thanks to xet7.
|
||||||
|
|
||||||
|
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||||
|
|
||||||
# v8.16 2025-11-02 WeKan ® release
|
# v8.16 2025-11-02 WeKan ® release
|
||||||
|
|
||||||
This release fixes SpaceBleed that is the following CRITICAL SECURITY ISSUES:
|
This release fixes SpaceBleed that is the following CRITICAL SECURITY ISSUES:
|
||||||
|
|
|
||||||
|
|
@ -249,9 +249,9 @@ cd /home/wekan/app
|
||||||
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
|
# Remove legacy webbroser bundle, so that Wekan works also at Android Firefox, iOS Safari, etc.
|
||||||
#rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy
|
#rm -rf /home/wekan/app_build/bundle/programs/web.browser.legacy
|
||||||
#mv /home/wekan/app_build/bundle /build
|
#mv /home/wekan/app_build/bundle /build
|
||||||
wget "https://github.com/wekan/wekan/releases/download/v8.16/wekan-8.16-amd64.zip"
|
wget "https://github.com/wekan/wekan/releases/download/v8.17/wekan-8.17-amd64.zip"
|
||||||
unzip wekan-8.16-amd64.zip
|
unzip wekan-8.17-amd64.zip
|
||||||
rm wekan-8.16-amd64.zip
|
rm wekan-8.17-amd64.zip
|
||||||
mv /home/wekan/app/bundle /build
|
mv /home/wekan/app/bundle /build
|
||||||
|
|
||||||
# Put back the original tar
|
# Put back the original tar
|
||||||
|
|
|
||||||
36
SECURITY.md
36
SECURITY.md
|
|
@ -1,12 +1,20 @@
|
||||||
About money, see [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
||||||
|
|
||||||
Security is very important to us. If you discover any issue regarding security, please disclose
|
## Responsible Security Disclosure
|
||||||
the information responsibly by sending an email from Protonmail to security@wekan.fi
|
|
||||||
that is Protomail email address, or by using this PGP key
|
|
||||||
[security-at-wekan.fi.asc](security-at-wekan.fi.asc) to security@wekan.fi
|
|
||||||
and not by creating a GitHub issue. We will respond swiftly to fix verifiable security issues.
|
|
||||||
|
|
||||||
We thank you with a place at our hall of fame page, that is at https://wekan.fi/hall-of-fame
|
- To send email, use [ProtonMail](https://proton.me) email address or use PGP key [security-at-wekan.fi.asc](security-at-wekan.fi.asc)
|
||||||
|
- Send info about security issue ONLY to security@wekan.fi (that is Protomail email address). NOT TO ANYWHERE ELSE. NO CC, NO BCC.
|
||||||
|
- Wait for new WeKan release that fixes security issue
|
||||||
|
- If you approve, we thank you by adding you to Hall of Fame: https://wekan.fi/hall-of-fame/
|
||||||
|
|
||||||
|
## Bonus Points
|
||||||
|
|
||||||
|
- If you include code for fixing security issue
|
||||||
|
|
||||||
|
## Losing Points
|
||||||
|
|
||||||
|
- If you ask about [bounty](CONTRIBUTING.md). There is no bounty. WeKan is NOT Big Tech. WeKan is FLOSS.
|
||||||
|
- If you forget to include vulnerability details.
|
||||||
|
- If you send info about security issue to somewhere else than security@wekan.fi
|
||||||
|
|
||||||
## How should reports be formatted?
|
## How should reports be formatted?
|
||||||
|
|
||||||
|
|
@ -26,7 +34,7 @@ CWSS (optional): %cwss
|
||||||
|
|
||||||
Anyone who reports a unique security issue in scope and does not disclose it to
|
Anyone who reports a unique security issue in scope and does not disclose it to
|
||||||
a third party before we have patched and updated may be upon their approval
|
a third party before we have patched and updated may be upon their approval
|
||||||
added to the Wekan Hall of Fame.
|
added to the WeKan Hall of Fame https://wekan.fi/hall-of-fame/
|
||||||
|
|
||||||
## Which domains are in scope?
|
## Which domains are in scope?
|
||||||
|
|
||||||
|
|
@ -63,11 +71,6 @@ and by by companies that have 30k users.
|
||||||
- If you are thinking about TLS MITM, look at https://github.com/caddyserver/caddy/issues/2530
|
- If you are thinking about TLS MITM, look at https://github.com/caddyserver/caddy/issues/2530
|
||||||
- Let's Encrypt TLS requires publicly accessible webserver, that Let's Encrypt TLS validation servers check.
|
- Let's Encrypt TLS requires publicly accessible webserver, that Let's Encrypt TLS validation servers check.
|
||||||
- If firewall limits to only allowed IP addresses, you may need non-Let's Encrypt TLS cert.
|
- If firewall limits to only allowed IP addresses, you may need non-Let's Encrypt TLS cert.
|
||||||
- For On Premise:
|
|
||||||
- https://caddyserver.com/docs/automatic-https#local-https
|
|
||||||
- https://github.com/wekan/wekan/wiki/Caddy-Webserver-Config
|
|
||||||
- https://github.com/wekan/wekan/wiki/Azure
|
|
||||||
- https://github.com/wekan/wekan/wiki/Traefik-and-self-signed-SSL-certs
|
|
||||||
|
|
||||||
## XSS
|
## XSS
|
||||||
|
|
||||||
|
|
@ -269,9 +272,4 @@ Typical already known or "no impact" bugs such as:
|
||||||
- Email spoofing, SPF, DMARC & DKIM. Wekan does not include email server.
|
- Email spoofing, SPF, DMARC & DKIM. Wekan does not include email server.
|
||||||
|
|
||||||
Wekan is Open Source with MIT license, and free to use also for commercial use.
|
Wekan is Open Source with MIT license, and free to use also for commercial use.
|
||||||
We welcome all fixes to improve security by email to security@wekan.team
|
We welcome all fixes to improve security by email to security@wekan.fi
|
||||||
|
|
||||||
## Bonus Points
|
|
||||||
|
|
||||||
If your Responsible Security Disclosure includes code for fixing security issue,
|
|
||||||
you get bonus points, as seen on [Hall of Fame](https://wekan.github.io/hall-of-fame).
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||||
appVersion: "v8.16.0"
|
appVersion: "v8.17.0"
|
||||||
files:
|
files:
|
||||||
userUploads:
|
userUploads:
|
||||||
- README.md
|
- README.md
|
||||||
|
|
|
||||||
|
|
@ -99,24 +99,9 @@ BlazeComponent.extendComponent({
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if board needs comprehensive migration
|
// Automatic migration disabled - migrations must be run manually from sidebar
|
||||||
const needsMigration = await this.checkComprehensiveMigration(boardId);
|
// Board admins can run migrations from the sidebar Migrations menu
|
||||||
|
this.isBoardReady.set(true);
|
||||||
if (needsMigration) {
|
|
||||||
// Start comprehensive migration
|
|
||||||
this.isMigrating.set(true);
|
|
||||||
const success = await this.executeComprehensiveMigration(boardId);
|
|
||||||
this.isMigrating.set(false);
|
|
||||||
|
|
||||||
if (success) {
|
|
||||||
this.isBoardReady.set(true);
|
|
||||||
} else {
|
|
||||||
console.error('Comprehensive migration failed, setting ready to true anyway');
|
|
||||||
this.isBoardReady.set(true); // Still show board even if migration failed
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.isBoardReady.set(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error during board conversion check:', error);
|
console.error('Error during board conversion check:', error);
|
||||||
|
|
@ -161,7 +146,6 @@ BlazeComponent.extendComponent({
|
||||||
{ step: 'fix_orphaned_cards', name: 'Fix Orphaned Cards', duration: 2000 },
|
{ step: 'fix_orphaned_cards', name: 'Fix Orphaned Cards', duration: 2000 },
|
||||||
{ step: 'convert_shared_lists', name: 'Convert Shared Lists', duration: 3000 },
|
{ step: 'convert_shared_lists', name: 'Convert Shared Lists', duration: 3000 },
|
||||||
{ step: 'ensure_per_swimlane_lists', name: 'Ensure Per-Swimlane Lists', duration: 1500 },
|
{ step: 'ensure_per_swimlane_lists', name: 'Ensure Per-Swimlane Lists', duration: 1500 },
|
||||||
{ step: 'cleanup_empty_lists', name: 'Cleanup Empty Lists', duration: 1000 },
|
|
||||||
{ step: 'validate_migration', name: 'Validate Migration', duration: 1000 },
|
{ step: 'validate_migration', name: 'Validate Migration', duration: 1000 },
|
||||||
{ step: 'fix_avatar_urls', name: 'Fix Avatar URLs', duration: 1000 },
|
{ step: 'fix_avatar_urls', name: 'Fix Avatar URLs', duration: 1000 },
|
||||||
{ step: 'fix_attachment_urls', name: 'Fix Attachment URLs', duration: 1000 }
|
{ step: 'fix_attachment_urls', name: 'Fix Attachment URLs', duration: 1000 }
|
||||||
|
|
|
||||||
|
|
@ -16,13 +16,6 @@ template(name="boardHeaderBar")
|
||||||
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
|
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
|
||||||
| ✏️
|
| ✏️
|
||||||
|
|
||||||
a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
|
|
||||||
title="{{#if isStarred}}{{_ 'star-board-short-unstar'}}{{else}}{{_ 'star-board-short-star'}}{{/if}}" aria-label="{{#if isStarred}}{{_ 'star-board-short-unstar'}}{{else}}{{_ 'star-board-short-star'}}{{/if}}")
|
|
||||||
| {{#if isStarred}}⭐{{else}}☆{{/if}}
|
|
||||||
if showStarCounter
|
|
||||||
span
|
|
||||||
= currentBoard.stars
|
|
||||||
|
|
||||||
a.board-header-btn(
|
a.board-header-btn(
|
||||||
class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
|
class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
|
||||||
title="{{_ currentBoard.permission}}")
|
title="{{_ currentBoard.permission}}")
|
||||||
|
|
@ -38,6 +31,13 @@ template(name="boardHeaderBar")
|
||||||
if $eq watchLevel "muted"
|
if $eq watchLevel "muted"
|
||||||
| 🔕
|
| 🔕
|
||||||
span {{_ watchLevel}}
|
span {{_ watchLevel}}
|
||||||
|
a.board-header-btn.js-star-board(title="{{_ 'star-board'}}")
|
||||||
|
if isStarred
|
||||||
|
| ⭐
|
||||||
|
else
|
||||||
|
| ☆
|
||||||
|
if showStarCounter
|
||||||
|
span.board-star-counter {{currentBoard.stars}}
|
||||||
a.board-header-btn(title="{{_ 'sort-cards'}}" class="{{#if isSortActive }}emphasis{{else}} js-sort-cards {{/if}}")
|
a.board-header-btn(title="{{_ 'sort-cards'}}" class="{{#if isSortActive }}emphasis{{else}} js-sort-cards {{/if}}")
|
||||||
| {{sortCardsIcon}}
|
| {{sortCardsIcon}}
|
||||||
span {{#if isSortActive }}{{_ 'sort-is-on'}}{{else}}{{_ 'sort-cards'}}{{/if}}
|
span {{#if isSortActive }}{{_ 'sort-is-on'}}{{else}}{{_ 'sort-cards'}}{{/if}}
|
||||||
|
|
@ -61,10 +61,6 @@ template(name="boardHeaderBar")
|
||||||
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
|
a.board-header-btn(class="{{#if currentUser.isBoardAdmin}}js-edit-board-title{{else}}is-disabled{{/if}}" title="{{_ 'edit'}}" value=title)
|
||||||
| ✏️
|
| ✏️
|
||||||
|
|
||||||
a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
|
|
||||||
title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
|
|
||||||
| {{#if isStarred}}⭐{{else}}☆{{/if}}
|
|
||||||
|
|
||||||
a.board-header-btn(
|
a.board-header-btn(
|
||||||
class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
|
class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
|
||||||
title="{{_ currentBoard.permission}}")
|
title="{{_ currentBoard.permission}}")
|
||||||
|
|
@ -78,6 +74,11 @@ template(name="boardHeaderBar")
|
||||||
| 🔔
|
| 🔔
|
||||||
if $eq watchLevel "muted"
|
if $eq watchLevel "muted"
|
||||||
| 🔕
|
| 🔕
|
||||||
|
a.board-header-btn.js-star-board(title="{{_ 'star-board'}}")
|
||||||
|
if isStarred
|
||||||
|
| ⭐
|
||||||
|
else
|
||||||
|
| ☆
|
||||||
a.board-header-btn(title="{{_ 'sort-cards'}}" class="{{#if isSortActive }}emphasis{{else}} js-sort-cards {{/if}}")
|
a.board-header-btn(title="{{_ 'sort-cards'}}" class="{{#if isSortActive }}emphasis{{else}} js-sort-cards {{/if}}")
|
||||||
| {{sortCardsIcon}}
|
| {{sortCardsIcon}}
|
||||||
if isSortActive
|
if isSortActive
|
||||||
|
|
@ -266,6 +267,36 @@ template(name="createBoardPopup")
|
||||||
| /
|
| /
|
||||||
a.js-board-template {{_ 'template'}}
|
a.js-board-template {{_ 'template'}}
|
||||||
|
|
||||||
|
// New popup for Template Container creation; shares the same form content
|
||||||
|
template(name="createTemplateContainerPopup")
|
||||||
|
form
|
||||||
|
label
|
||||||
|
| {{_ 'title'}}
|
||||||
|
input.js-new-board-title(type="text" placeholder="{{_ 'bucket-example'}}" autofocus required)
|
||||||
|
if visibilityMenuIsOpen.get
|
||||||
|
+boardVisibilityList
|
||||||
|
else
|
||||||
|
p.quiet
|
||||||
|
if $eq visibility.get 'public'
|
||||||
|
span 🌐
|
||||||
|
= " "
|
||||||
|
| {{{_ 'board-public-info'}}}
|
||||||
|
else
|
||||||
|
span 🔒
|
||||||
|
= " "
|
||||||
|
| {{{_ 'board-private-info'}}}
|
||||||
|
a.js-change-visibility {{_ 'change'}}.
|
||||||
|
a.flex.js-toggle-add-template-container
|
||||||
|
.materialCheckBox#add-template-container
|
||||||
|
span {{_ 'add-template-container'}}
|
||||||
|
input.primary.wide(type="submit" value="{{_ 'create'}}")
|
||||||
|
span.quiet
|
||||||
|
| {{_ 'or'}}
|
||||||
|
a.js-import-board {{_ 'import'}}
|
||||||
|
span.quiet
|
||||||
|
| /
|
||||||
|
a.js-board-template {{_ 'template'}}
|
||||||
|
|
||||||
//template(name="listsortPopup")
|
//template(name="listsortPopup")
|
||||||
// h2
|
// h2
|
||||||
// | {{_ 'list-sort-by'}}
|
// | {{_ 'list-sort-by'}}
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,10 @@ BlazeComponent.extendComponent({
|
||||||
{
|
{
|
||||||
'click .js-edit-board-title': Popup.open('boardChangeTitle'),
|
'click .js-edit-board-title': Popup.open('boardChangeTitle'),
|
||||||
'click .js-star-board'() {
|
'click .js-star-board'() {
|
||||||
ReactiveCache.getCurrentUser().toggleBoardStar(Session.get('currentBoard'));
|
const boardId = Session.get('currentBoard');
|
||||||
|
if (boardId) {
|
||||||
|
Meteor.call('toggleBoardStar', boardId);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
'click .js-open-board-menu': Popup.open('boardMenu'),
|
'click .js-open-board-menu': Popup.open('boardMenu'),
|
||||||
'click .js-change-visibility': Popup.open('boardChangeVisibility'),
|
'click .js-change-visibility': Popup.open('boardChangeVisibility'),
|
||||||
|
|
@ -291,6 +294,15 @@ const CreateBoard = BlazeComponent.extendComponent({
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Assign to space if one was selected
|
||||||
|
const spaceId = Session.get('createBoardInWorkspace');
|
||||||
|
if (spaceId) {
|
||||||
|
Meteor.call('assignBoardToWorkspace', this.boardId.get(), spaceId, (err) => {
|
||||||
|
if (err) console.error('Error assigning board to space:', err);
|
||||||
|
});
|
||||||
|
Session.set('createBoardInWorkspace', null); // Clear after use
|
||||||
|
}
|
||||||
|
|
||||||
Utils.goBoardId(this.boardId.get());
|
Utils.goBoardId(this.boardId.get());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -309,6 +321,15 @@ const CreateBoard = BlazeComponent.extendComponent({
|
||||||
boardId: this.boardId.get(),
|
boardId: this.boardId.get(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Assign to space if one was selected
|
||||||
|
const spaceId = Session.get('createBoardInWorkspace');
|
||||||
|
if (spaceId) {
|
||||||
|
Meteor.call('assignBoardToWorkspace', this.boardId.get(), spaceId, (err) => {
|
||||||
|
if (err) console.error('Error assigning board to space:', err);
|
||||||
|
});
|
||||||
|
Session.set('createBoardInWorkspace', null); // Clear after use
|
||||||
|
}
|
||||||
|
|
||||||
Utils.goBoardId(this.boardId.get());
|
Utils.goBoardId(this.boardId.get());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -330,6 +351,13 @@ const CreateBoard = BlazeComponent.extendComponent({
|
||||||
},
|
},
|
||||||
}).register('createBoardPopup');
|
}).register('createBoardPopup');
|
||||||
|
|
||||||
|
(class CreateTemplateContainerPopup extends CreateBoard {
|
||||||
|
onRendered() {
|
||||||
|
// Always pre-check the template container checkbox for this popup
|
||||||
|
$('#add-template-container').addClass('is-checked');
|
||||||
|
}
|
||||||
|
}).register('createTemplateContainerPopup');
|
||||||
|
|
||||||
(class HeaderBarCreateBoard extends CreateBoard {
|
(class HeaderBarCreateBoard extends CreateBoard {
|
||||||
onSubmit(event) {
|
onSubmit(event) {
|
||||||
super.onSubmit(event);
|
super.onSubmit(event);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,273 @@
|
||||||
padding: 1vh 0;
|
padding: 1vh 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Two-column layout for All Boards */
|
||||||
|
.boards-layout {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 260px 1fr;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-left-menu {
|
||||||
|
border-right: 1px solid #e0e0e0;
|
||||||
|
padding-right: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-left-menu ul.menu {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 12px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-left-menu .menu-item {
|
||||||
|
margin: 4px 0;
|
||||||
|
}
|
||||||
|
.boards-left-menu .menu-item a {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8px 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.boards-left-menu .menu-item .menu-label {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.boards-left-menu .menu-item .menu-count {
|
||||||
|
background: #ddd;
|
||||||
|
padding: 2px 8px;
|
||||||
|
border-radius: 12px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
.boards-left-menu .menu-item.active a,
|
||||||
|
.boards-left-menu .menu-item a:hover {
|
||||||
|
background: #f0f0f0;
|
||||||
|
}
|
||||||
|
.boards-left-menu .menu-item.active .menu-count {
|
||||||
|
background: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Drag-over state for menu items (for dropping boards on Remaining) */
|
||||||
|
.boards-left-menu .menu-item a.drag-over {
|
||||||
|
background: #d0e8ff;
|
||||||
|
border: 2px dashed #2196F3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspaces-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
.workspaces-header .js-add-space {
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
padding: 2px 8px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-tree {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node {
|
||||||
|
margin: 2px 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node-content {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
|
padding: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: background-color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node.dragging > .workspace-node-content {
|
||||||
|
opacity: 0.5;
|
||||||
|
background: #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node.drag-over > .workspace-node-content {
|
||||||
|
background: #d0e8ff;
|
||||||
|
border: 2px dashed #2196F3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-drag-handle {
|
||||||
|
cursor: grab;
|
||||||
|
color: #999;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 0 4px;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-drag-handle:active {
|
||||||
|
cursor: grabbing;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node .js-select-space {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 4px 8px;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
flex: 1;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node .workspace-icon {
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node .workspace-name {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node .workspace-count {
|
||||||
|
background: #ddd;
|
||||||
|
padding: 2px 6px;
|
||||||
|
border-radius: 10px;
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: bold;
|
||||||
|
min-width: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node .js-edit-space,
|
||||||
|
.workspace-node .js-add-subspace {
|
||||||
|
padding: 2px 6px;
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 14px;
|
||||||
|
opacity: 0.6;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node .js-edit-space:hover,
|
||||||
|
.workspace-node .js-add-subspace:hover {
|
||||||
|
opacity: 1;
|
||||||
|
background: #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node.active > .workspace-node-content .js-select-space,
|
||||||
|
.workspace-node > .workspace-node-content:hover .js-select-space {
|
||||||
|
background: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-node.active .workspace-count {
|
||||||
|
background: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-right-grid {
|
||||||
|
min-height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 12px 16px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
background: #f5f5f5;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .path-left {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .multiselection-hint {
|
||||||
|
background: #FFF3CD;
|
||||||
|
color: #856404;
|
||||||
|
padding: 4px 12px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: normal;
|
||||||
|
border: 1px solid #FFE69C;
|
||||||
|
animation: pulse 2s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
0%, 100% { opacity: 1; }
|
||||||
|
50% { opacity: 0.7; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .path-right {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .path-icon {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .path-text {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .board-header-btn {
|
||||||
|
padding: 6px 12px;
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
font-size: 14px;
|
||||||
|
transition: all 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .board-header-btn:hover {
|
||||||
|
background: #f0f0f0;
|
||||||
|
border-color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .board-header-btn.emphasis {
|
||||||
|
background: #2196F3;
|
||||||
|
color: #fff;
|
||||||
|
border-color: #2196F3;
|
||||||
|
font-weight: bold;
|
||||||
|
box-shadow: 0 2px 8px rgba(33, 150, 243, 0.5);
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .board-header-btn.emphasis:hover {
|
||||||
|
background: #1976D2;
|
||||||
|
box-shadow: 0 3px 12px rgba(33, 150, 243, 0.7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .board-header-btn-close {
|
||||||
|
padding: 4px 10px;
|
||||||
|
background: #f44336;
|
||||||
|
color: #000;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
margin-left: 10px; /* Extra space between MultiSelection toggle and Remove Filter */
|
||||||
|
}
|
||||||
|
|
||||||
|
.boards-path-header .board-header-btn-close:hover {
|
||||||
|
background: #d32f2f;
|
||||||
|
}
|
||||||
|
|
||||||
.zoom-controls {
|
.zoom-controls {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
@ -106,23 +373,35 @@
|
||||||
.board-list li.starred .is-star-active,
|
.board-list li.starred .is-star-active,
|
||||||
.board-list li.starred .is-not-star-active {
|
.board-list li.starred .is-not-star-active {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
color: #ffd700;
|
||||||
|
}
|
||||||
|
/* Show star icon on hover even for non-starred boards */
|
||||||
|
.board-list li:hover .is-star-active,
|
||||||
|
.board-list li:hover .is-not-star-active {
|
||||||
|
opacity: 1;
|
||||||
}
|
}
|
||||||
.board-list .board-list-item {
|
.board-list .board-list-item {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background-color: #999;
|
background-color: inherit; /* Inherit board color from parent li.js-board */
|
||||||
color: #f6f6f6;
|
color: #f6f6f6;
|
||||||
min-height: 100px;
|
min-height: 100px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
border-radius: 3px;
|
border-radius: 0; /* No border-radius - parent .js-board has it */
|
||||||
display: block;
|
display: block;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
padding: 8px;
|
padding: 36px 8px 32px 8px; /* Top padding for drag handle, bottom for checkbox */
|
||||||
margin: 8px;
|
margin: 0; /* No margin - moved to parent .js-board */
|
||||||
position: relative;
|
position: relative;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.board-list .board-list-item > .js-open-board {
|
||||||
|
text-decoration: none;
|
||||||
|
color: inherit;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
.board-list .board-list-item.template-container {
|
.board-list .board-list-item.template-container {
|
||||||
border: 4px solid #fff;
|
border: 4px solid #fff;
|
||||||
}
|
}
|
||||||
|
|
@ -150,13 +429,20 @@
|
||||||
.board-list .js-add-board .label {
|
.board-list .js-add-board .label {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
line-height: 56px;
|
line-height: 56px;
|
||||||
|
min-height: 100px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: #999; /* Darker background for better text contrast */
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 36px 8px 32px 8px;
|
||||||
}
|
}
|
||||||
.board-list .js-add-board :hover {
|
.board-list .js-add-board .label:hover {
|
||||||
background-color: #939393;
|
background-color: #808080; /* Even darker on hover */
|
||||||
}
|
}
|
||||||
.board-list .is-star-active,
|
.board-list .is-star-active,
|
||||||
.board-list .is-not-star-active {
|
.board-list .is-not-star-active {
|
||||||
bottom: 0;
|
top: 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
height: 18px;
|
height: 18px;
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
|
|
@ -164,7 +450,6 @@
|
||||||
padding: 9px 9px;
|
padding: 9px 9px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
|
||||||
transition-duration: 0.15s;
|
transition-duration: 0.15s;
|
||||||
transition-property: color, font-size, background;
|
transition-property: color, font-size, background;
|
||||||
}
|
}
|
||||||
|
|
@ -238,6 +523,95 @@
|
||||||
.board-list li:hover a .is-not-star-active {
|
.board-list li:hover a .is-not-star-active {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Board drag handle - always visible and positioned at top */
|
||||||
|
.board-list .board-handle {
|
||||||
|
position: absolute;
|
||||||
|
padding: 4px 6px;
|
||||||
|
top: 4px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
font-size: 14px;
|
||||||
|
color: #fff;
|
||||||
|
background: rgba(0,0,0,0.4);
|
||||||
|
border-radius: 4px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 10;
|
||||||
|
transition: background-color 0.2s ease;
|
||||||
|
cursor: grab;
|
||||||
|
opacity: 1;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.board-list .board-handle:active {
|
||||||
|
cursor: grabbing;
|
||||||
|
}
|
||||||
|
|
||||||
|
.board-list .board-handle:hover {
|
||||||
|
background: rgba(255, 255, 0, 0.8) !important;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Multiselection checkbox on board items */
|
||||||
|
.board-list .board-list-item .multi-selection-checkbox {
|
||||||
|
position: absolute !important;
|
||||||
|
bottom: 4px !important;
|
||||||
|
left: 4px !important;
|
||||||
|
top: auto !important;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
border: 3px solid #fff;
|
||||||
|
background: rgba(0,0,0,0.5);
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
z-index: 11;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
transition: all 0.2s;
|
||||||
|
box-shadow: 0 2px 4px rgba(0,0,0,0.3);
|
||||||
|
transform: none !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.board-list .board-list-item .multi-selection-checkbox:hover {
|
||||||
|
background: rgba(0,0,0,0.7);
|
||||||
|
transform: scale(1.15) !important;
|
||||||
|
box-shadow: 0 3px 6px rgba(0,0,0,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.board-list .board-list-item .multi-selection-checkbox.is-checked {
|
||||||
|
background: #2196F3;
|
||||||
|
border-color: #2196F3;
|
||||||
|
box-shadow: 0 2px 8px rgba(33, 150, 243, 0.6);
|
||||||
|
width: 24px !important;
|
||||||
|
height: 24px !important;
|
||||||
|
top: auto !important;
|
||||||
|
left: 4px !important;
|
||||||
|
transform: none !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.board-list .board-list-item .multi-selection-checkbox.is-checked::after {
|
||||||
|
content: '✓';
|
||||||
|
color: #fff;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.board-list.is-multiselection-active .js-board.is-checked {
|
||||||
|
outline: 4px solid #2196F3;
|
||||||
|
outline-offset: -4px;
|
||||||
|
box-shadow: 0 4px 12px rgba(33, 150, 243, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Visual hint when multiselection is active */
|
||||||
|
.board-list.is-multiselection-active .board-list-item {
|
||||||
|
border: 2px dashed rgba(33, 150, 243, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
.board-backgrounds-list .board-background-select {
|
.board-backgrounds-list .board-background-select {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
display: block;
|
display: block;
|
||||||
|
|
@ -739,9 +1113,62 @@
|
||||||
#resetBtn {
|
#resetBtn {
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#resetBtn.filter-reset-btn {
|
||||||
|
background: #f44336;
|
||||||
|
color: #000;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 6px 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 14px;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
transition: background 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#resetBtn.filter-reset-btn:hover {
|
||||||
|
background: #d32f2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
#resetBtn.filter-reset-btn .reset-icon {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
.js-board {
|
.js-board {
|
||||||
display: block;
|
display: block;
|
||||||
|
background-color: #999; /* Default gray background if no color class is applied */
|
||||||
|
border-radius: 3px; /* Rounded corners for board items */
|
||||||
|
overflow: hidden; /* Ensure children respect rounded corners */
|
||||||
|
margin: 8px; /* Space between board items */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reset background for add-board button */
|
||||||
|
.js-add-board {
|
||||||
|
background-color: transparent !important;
|
||||||
|
margin: 8px !important; /* Keep margin for add-board */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apply board colors to li.js-board parent instead of just the link */
|
||||||
|
.board-list .board-color-nephritis { background-color: #27ae60; }
|
||||||
|
.board-list .board-color-pomegranate { background-color: #c0392b; }
|
||||||
|
.board-list .board-color-belize { background-color: #2980b9; }
|
||||||
|
.board-list .board-color-wisteria { background-color: #8e44ad; }
|
||||||
|
.board-list .board-color-midnight { background-color: #2c3e50; }
|
||||||
|
.board-list .board-color-pumpkin { background-color: #e67e22; }
|
||||||
|
.board-list .board-color-moderatepink { background-color: #cd5a91; }
|
||||||
|
.board-list .board-color-strongcyan { background-color: #00aecc; }
|
||||||
|
.board-list .board-color-limegreen { background-color: #4bbf6b; }
|
||||||
|
.board-list .board-color-dark { background-color: #2c3e51; }
|
||||||
|
.board-list .board-color-relax { background-color: #27ae61; }
|
||||||
|
.board-list .board-color-corteza { background-color: #568ba2; }
|
||||||
|
.board-list .board-color-clearblue { background-color: #3498db; }
|
||||||
|
.board-list .board-color-natural { background-color: #596557; }
|
||||||
|
.board-list .board-color-modern { background-color: #2a80b8; }
|
||||||
|
.board-list .board-color-moderndark { background-color: #2a2a2a; }
|
||||||
|
.board-list .board-color-exodark { background-color: #222; }
|
||||||
|
|
||||||
.minicard-members {
|
.minicard-members {
|
||||||
padding: 6px 0 6px 8px;
|
padding: 6px 0 6px 8px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
|
||||||
|
|
@ -2,151 +2,160 @@ template(name="boardList")
|
||||||
.wrapper
|
.wrapper
|
||||||
.board-list-header
|
.board-list-header
|
||||||
|
|
||||||
ul.AllBoardTeamsOrgs
|
.boards-layout
|
||||||
li.AllBoardTeams
|
// Left menu
|
||||||
if userHasTeams
|
.boards-left-menu
|
||||||
select.js-AllBoardTeams#jsAllBoardTeams("multiple")
|
ul.menu
|
||||||
option(value="-1") {{_ 'teams'}} :
|
li(class="menu-item {{#if isSelectedMenu 'starred'}}active{{/if}}")
|
||||||
each teamsDatas
|
a.js-select-menu(data-type="starred")
|
||||||
option(value="{{teamId}}") {{_ teamDisplayName}}
|
span.menu-label ⭐ {{_ 'allboards.starred'}}
|
||||||
|
span.menu-count {{menuItemCount 'starred'}}
|
||||||
|
li(class="menu-item {{#if isSelectedMenu 'templates'}}active{{/if}}")
|
||||||
|
a.js-select-menu(data-type="templates")
|
||||||
|
span.menu-label 📋 {{_ 'allboards.templates'}}
|
||||||
|
span.menu-count {{menuItemCount 'templates'}}
|
||||||
|
li(class="menu-item {{#if isSelectedMenu 'remaining'}}active{{/if}}")
|
||||||
|
a.js-select-menu(data-type="remaining")
|
||||||
|
span.menu-label 📂 {{_ 'allboards.remaining'}}
|
||||||
|
span.menu-count {{menuItemCount 'remaining'}}
|
||||||
|
.workspaces-header
|
||||||
|
span 🗂️ {{_ 'allboards.workspaces'}}
|
||||||
|
a.js-add-workspace(title="{{_ 'allboards.add-workspace'}}") +
|
||||||
|
// Workspaces tree
|
||||||
|
+workspaceTree(nodes=workspacesTree selectedWorkspaceId=selectedWorkspaceId)
|
||||||
|
|
||||||
li.AllBoardOrgs
|
// Existing filter by orgs/teams (kept)
|
||||||
if userHasOrgs
|
ul.AllBoardTeamsOrgs
|
||||||
select.js-AllBoardOrgs#jsAllBoardOrgs("multiple")
|
li.AllBoardTeams
|
||||||
option(value="-1") {{_ 'organizations'}} :
|
if userHasTeams
|
||||||
each orgsDatas
|
select.js-AllBoardTeams#jsAllBoardTeams("multiple")
|
||||||
option(value="{{orgId}}") {{orgDisplayName}}
|
option(value="-1") {{_ 'teams'}} :
|
||||||
|
each teamsDatas
|
||||||
|
option(value="{{teamId}}") {{_ teamDisplayName}}
|
||||||
|
|
||||||
//li.AllBoardTemplates
|
li.AllBoardOrgs
|
||||||
// if userHasTemplates
|
if userHasOrgs
|
||||||
// select.js-AllBoardTemplates#jsAllBoardTemplates("multiple")
|
select.js-AllBoardOrgs#jsAllBoardOrgs("multiple")
|
||||||
// option(value="-1") {{_ 'templates'}} :
|
option(value="-1") {{_ 'organizations'}} :
|
||||||
// each templatesDatas
|
each orgsDatas
|
||||||
// option(value="{{templateId}}") {{_ templateDisplayName}}
|
option(value="{{orgId}}") {{orgDisplayName}}
|
||||||
|
|
||||||
li.AllBoardBtns
|
li.AllBoardBtns
|
||||||
div.AllBoardButtonsContainer
|
div.AllBoardButtonsContainer
|
||||||
if userHasOrgsOrTeams
|
if userHasOrgsOrTeams
|
||||||
i.fa.fa-filter
|
span 🔍
|
||||||
input#filterBtn(type="button" value="{{_ 'filter'}}")
|
input#filterBtn(type="button" value="{{_ 'filter'}}")
|
||||||
input#resetBtn(type="button" value="{{_ 'filter-clear'}}")
|
button#resetBtn.filter-reset-btn
|
||||||
|
span.reset-icon ❌
|
||||||
|
span {{_ 'filter-clear'}}
|
||||||
|
|
||||||
ul.board-list.clearfix.js-boards(class="{{#if isMiniScreen}}mobile-view{{/if}}")
|
// Right boards grid
|
||||||
li.js-add-board
|
.boards-right-grid
|
||||||
a.board-list-item.label(title="{{_ 'add-board'}}")
|
.boards-path-header
|
||||||
| {{_ 'add-board'}}
|
.path-left
|
||||||
each boards
|
span.path-icon {{currentMenuPath.icon}}
|
||||||
li(class="{{_id}}" class="{{#if isStarred}}starred{{/if}}" class=colorClass).js-board
|
span.path-text {{currentMenuPath.text}}
|
||||||
if isInvited
|
if BoardMultiSelection.isActive
|
||||||
.board-list-item
|
span.multiselection-hint 📌 {{_ 'multi-selection-active'}}
|
||||||
span.details
|
.path-right
|
||||||
span.board-list-item-name= title
|
if canModifyBoards
|
||||||
i.fa.js-star-board(
|
if hasBoardsSelected
|
||||||
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
|
button.js-archive-selected-boards.board-header-btn
|
||||||
title="{{_ 'star-board-title'}}")
|
span 📦
|
||||||
p.board-list-item-desc {{_ 'just-invited'}}
|
span {{_ 'archive-board'}}
|
||||||
button.js-accept-invite.primary {{_ 'accept'}}
|
button.js-duplicate-selected-boards.board-header-btn
|
||||||
button.js-decline-invite {{_ 'decline'}}
|
span 📋
|
||||||
else
|
span {{_ 'duplicate-board'}}
|
||||||
if $eq type "template-container"
|
a.board-header-btn.js-multiselection-activate(
|
||||||
a.js-open-board.template-container.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
|
title="{{#if BoardMultiSelection.isActive}}{{_ 'multi-selection-on'}}{{else}}{{_ 'multi-selection'}}{{/if}}"
|
||||||
span.details
|
class="{{#if BoardMultiSelection.isActive}}emphasis{{/if}}")
|
||||||
span.board-list-item-name(title="{{_ 'template-container'}}")
|
| ☑️
|
||||||
+viewer
|
if BoardMultiSelection.isActive
|
||||||
= title
|
a.board-header-btn-close.js-multiselection-reset(title="{{_ 'filter-clear'}}")
|
||||||
i.fa.js-star-board(
|
| ✖
|
||||||
class="fa-star{{#if isStarred}} is-star-active{{else}}-o{{/if}}"
|
ul.board-list.clearfix.js-boards(class="{{#if isMiniScreen}}mobile-view{{/if}} {{#if BoardMultiSelection.isActive}}is-multiselection-active{{/if}}")
|
||||||
title="{{_ 'star-board-title'}}")
|
li.js-add-board
|
||||||
p.board-list-item-desc
|
if isSelectedMenu 'templates'
|
||||||
+viewer
|
a.board-list-item.label(title="{{_ 'add-template-container'}}")
|
||||||
= description
|
| ➕ {{_ 'add-template-container'}}
|
||||||
if hasSpentTimeCards
|
|
||||||
i.fa.js-has-spenttime-cards(
|
|
||||||
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
|
|
||||||
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
|
|
||||||
i.fa.board-handle(
|
|
||||||
class="fa-arrows"
|
|
||||||
title="{{_ 'drag-board'}}")
|
|
||||||
if isSandstorm
|
|
||||||
i.fa.js-clone-board(
|
|
||||||
class="fa-clone"
|
|
||||||
title="{{_ 'duplicate-board'}}")
|
|
||||||
i.fa.js-archive-board(
|
|
||||||
class="fa-archive"
|
|
||||||
title="{{_ 'archive-board'}}")
|
|
||||||
else if isAdministrable
|
|
||||||
i.fa.js-clone-board(
|
|
||||||
class="fa-clone"
|
|
||||||
title="{{_ 'duplicate-board'}}")
|
|
||||||
i.fa.js-archive-board(
|
|
||||||
class="fa-archive"
|
|
||||||
title="{{_ 'archive-board'}}")
|
|
||||||
else if currentUser.isAdmin
|
|
||||||
i.fa.js-clone-board(
|
|
||||||
class="fa-clone"
|
|
||||||
title="{{_ 'duplicate-board'}}")
|
|
||||||
i.fa.js-archive-board(
|
|
||||||
class="fa-archive"
|
|
||||||
title="{{_ 'archive-board'}}")
|
|
||||||
else
|
else
|
||||||
a.js-open-board.board-list-item(href="{{pathFor 'board' id=_id slug=slug}}")
|
a.board-list-item.label(title="{{_ 'add-board'}}")
|
||||||
span.details
|
| ➕ {{_ 'add-board'}}
|
||||||
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
|
each boards
|
||||||
+viewer
|
li.js-board(class="{{_id}} {{#if isStarred}}starred{{/if}} {{colorClass}} {{#if BoardMultiSelection.isSelected _id}}is-checked{{/if}}", draggable="true")
|
||||||
= title
|
if isInvited
|
||||||
unless currentSetting.hideBoardMemberList
|
.board-list-item
|
||||||
if allowsBoardMemberList
|
if BoardMultiSelection.isActive
|
||||||
.minicard-members
|
.materialCheckBox.multi-selection-checkbox.js-toggle-board-multi-selection(
|
||||||
each member in boardMembers _id
|
class="{{#if BoardMultiSelection.isSelected _id}}is-checked{{/if}}")
|
||||||
a.name
|
span.details
|
||||||
+userAvatar(userId=member noRemove=true)
|
span.board-list-item-name= title
|
||||||
unless currentSetting.hideCardCounterList
|
span.js-star-board(
|
||||||
if allowsCardCounterList
|
class="{{#if isStarred}}is-star-active{{else}}is-not-star-active{{/if}}"
|
||||||
.minicard-lists.flex.flex-wrap
|
title="{{_ 'star-board-title'}}")
|
||||||
each list in boardLists _id
|
| {{#if isStarred}}⭐{{else}}☆{{/if}}
|
||||||
.item
|
p.board-list-item-desc {{_ 'just-invited'}}
|
||||||
| {{ list }}
|
button.js-accept-invite.primary {{_ 'accept'}}
|
||||||
a.js-star-board(
|
button.js-decline-invite {{_ 'decline'}}
|
||||||
class="{{#if isStarred}}is-star-active{{else}}is-not-star-active{{/if}}"
|
else
|
||||||
title="{{_ 'star-board-title'}}")
|
if $eq type "template-container"
|
||||||
| {{#if isStarred}}⭐{{else}}☆{{/if}}
|
.template-container.board-list-item
|
||||||
p.board-list-item-desc
|
if BoardMultiSelection.isActive
|
||||||
+viewer
|
.materialCheckBox.multi-selection-checkbox.js-toggle-board-multi-selection(
|
||||||
= description
|
class="{{#if BoardMultiSelection.isSelected _id}}is-checked{{/if}}")
|
||||||
if hasSpentTimeCards
|
span.board-handle(title="{{_ 'drag-board'}}") ↕️
|
||||||
i.fa.js-has-spenttime-cards(
|
a.js-open-board(href="{{pathFor 'board' id=_id slug=slug}}")
|
||||||
class="fa-circle{{#if hasOvertimeCards}} has-overtime-card-active{{else}} no-overtime-card-active{{/if}}"
|
span.details
|
||||||
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
|
span.board-list-item-name(title="{{_ 'template-container'}}")
|
||||||
i.fa.board-handle(
|
+viewer
|
||||||
class="fa-arrows"
|
= title
|
||||||
title="{{_ 'drag-board'}}")
|
p.board-list-item-desc
|
||||||
if isSandstorm
|
+viewer
|
||||||
a.js-clone-board(
|
= description
|
||||||
class="fa-clone"
|
if hasSpentTimeCards
|
||||||
title="{{_ 'duplicate-board'}}")
|
span.js-has-spenttime-cards(
|
||||||
| 📋
|
class="{{#if hasOvertimeCards}}has-overtime-card-active{{else}}no-overtime-card-active{{/if}}"
|
||||||
a.js-archive-board(
|
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
|
||||||
class="fa-archive"
|
| ⏱️
|
||||||
title="{{_ 'archive-board'}}")
|
span.js-star-board(
|
||||||
| 📦
|
class="{{#if isStarred}}is-star-active{{else}}is-not-star-active{{/if}}"
|
||||||
else if isAdministrable
|
title="{{_ 'star-board-title'}}")
|
||||||
a.js-clone-board(
|
| {{#if isStarred}}⭐{{else}}☆{{/if}}
|
||||||
class="fa-clone"
|
else
|
||||||
title="{{_ 'duplicate-board'}}")
|
.board-list-item
|
||||||
| 📋
|
if BoardMultiSelection.isActive
|
||||||
a.js-archive-board(
|
.materialCheckBox.multi-selection-checkbox.js-toggle-board-multi-selection(
|
||||||
class="fa-archive"
|
class="{{#if BoardMultiSelection.isSelected _id}}is-checked{{/if}}")
|
||||||
title="{{_ 'archive-board'}}")
|
span.board-handle(title="{{_ 'drag-board'}}") ↕️
|
||||||
| 📦
|
a.js-open-board(href="{{pathFor 'board' id=_id slug=slug}}")
|
||||||
else if currentUser.isAdmin
|
span.details
|
||||||
a.js-clone-board(
|
span.board-list-item-name(title="{{_ 'board-drag-drop-reorder-or-click-open'}}")
|
||||||
class="fa-clone"
|
+viewer
|
||||||
title="{{_ 'duplicate-board'}}")
|
= title
|
||||||
| 📋
|
unless currentSetting.hideBoardMemberList
|
||||||
a.js-archive-board(
|
if allowsBoardMemberList
|
||||||
class="fa-archive"
|
.minicard-members
|
||||||
title="{{_ 'archive-board'}}")
|
each member in boardMembers _id
|
||||||
| 📦
|
a.name
|
||||||
|
+userAvatar(userId=member noRemove=true)
|
||||||
|
unless currentSetting.hideCardCounterList
|
||||||
|
if allowsCardCounterList
|
||||||
|
.minicard-lists.flex.flex-wrap
|
||||||
|
each list in boardLists _id
|
||||||
|
.item
|
||||||
|
| {{ list }}
|
||||||
|
p.board-list-item-desc
|
||||||
|
+viewer
|
||||||
|
= description
|
||||||
|
if hasSpentTimeCards
|
||||||
|
span.js-has-spenttime-cards(
|
||||||
|
class="{{#if hasOvertimeCards}}has-overtime-card-active{{else}}no-overtime-card-active{{/if}}"
|
||||||
|
title="{{#if hasOvertimeCards}}{{_ 'has-overtime-cards'}}{{else}}{{_ 'has-spenttime-cards'}}{{/if}}")
|
||||||
|
| ⏱️
|
||||||
|
a.js-star-board(
|
||||||
|
class="{{#if isStarred}}is-star-active{{else}}is-not-star-active{{/if}}"
|
||||||
|
title="{{_ 'star-board-title'}}")
|
||||||
|
| {{#if isStarred}}⭐{{else}}☆{{/if}}
|
||||||
|
|
||||||
template(name="boardListHeaderBar")
|
template(name="boardListHeaderBar")
|
||||||
h1 {{_ title }}
|
h1 {{_ title }}
|
||||||
|
|
@ -157,3 +166,25 @@ template(name="boardListHeaderBar")
|
||||||
// a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
|
// a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
|
||||||
// i.fa.fa-clone
|
// i.fa.fa-clone
|
||||||
// span {{_ 'templates'}}
|
// span {{_ 'templates'}}
|
||||||
|
|
||||||
|
// Recursive template for workspaces tree
|
||||||
|
template(name="workspaceTree")
|
||||||
|
if nodes
|
||||||
|
ul.workspace-tree.js-workspace-tree
|
||||||
|
each nodes
|
||||||
|
li.workspace-node(class="{{#if $eq id selectedWorkspaceId}}active{{/if}}" data-workspace-id="{{id}}" draggable="true")
|
||||||
|
.workspace-node-content
|
||||||
|
span.workspace-drag-handle ↕️
|
||||||
|
a.js-select-workspace(data-id="{{id}}")
|
||||||
|
span.workspace-icon
|
||||||
|
if icon
|
||||||
|
+viewer
|
||||||
|
= icon
|
||||||
|
else
|
||||||
|
| 📁
|
||||||
|
span.workspace-name= name
|
||||||
|
a.js-edit-workspace(data-id="{{id}}" title="{{_ 'allboards.edit-workspace'}}") ✏️
|
||||||
|
span.workspace-count {{workspaceCount id}}
|
||||||
|
a.js-add-subworkspace(data-id="{{id}}" title="{{_ 'allboards.add-subworkspace'}}") +
|
||||||
|
if children
|
||||||
|
+workspaceTree(nodes=children selectedWorkspaceId=selectedWorkspaceId)
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,9 @@ Template.boardList.helpers({
|
||||||
return Utils.isMiniScreen() && Session.get('currentBoard'); */
|
return Utils.isMiniScreen() && Session.get('currentBoard'); */
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
BoardMultiSelection() {
|
||||||
|
return BoardMultiSelection;
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
Template.boardListHeaderBar.events({
|
Template.boardListHeaderBar.events({
|
||||||
|
|
@ -45,6 +48,9 @@ BlazeComponent.extendComponent({
|
||||||
onCreated() {
|
onCreated() {
|
||||||
Meteor.subscribe('setting');
|
Meteor.subscribe('setting');
|
||||||
Meteor.subscribe('tableVisibilityModeSettings');
|
Meteor.subscribe('tableVisibilityModeSettings');
|
||||||
|
this.selectedMenu = new ReactiveVar('starred');
|
||||||
|
this.selectedWorkspaceIdVar = new ReactiveVar(null);
|
||||||
|
this.workspacesTreeVar = new ReactiveVar([]);
|
||||||
let currUser = ReactiveCache.getCurrentUser();
|
let currUser = ReactiveCache.getCurrentUser();
|
||||||
let userLanguage;
|
let userLanguage;
|
||||||
if (currUser && currUser.profile) {
|
if (currUser && currUser.profile) {
|
||||||
|
|
@ -53,9 +59,72 @@ BlazeComponent.extendComponent({
|
||||||
if (userLanguage) {
|
if (userLanguage) {
|
||||||
TAPi18n.setLanguage(userLanguage);
|
TAPi18n.setLanguage(userLanguage);
|
||||||
}
|
}
|
||||||
|
// Load workspaces tree reactively
|
||||||
|
this.autorun(() => {
|
||||||
|
const u = ReactiveCache.getCurrentUser();
|
||||||
|
const tree = (u && u.profile && u.profile.boardWorkspacesTree) || [];
|
||||||
|
this.workspacesTreeVar.set(tree);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
reorderWorkspaces(draggedSpaceId, targetSpaceId) {
|
||||||
|
const tree = this.workspacesTreeVar.get();
|
||||||
|
|
||||||
|
// Helper to remove a space from tree
|
||||||
|
const removeSpace = (nodes, id) => {
|
||||||
|
for (let i = 0; i < nodes.length; i++) {
|
||||||
|
if (nodes[i].id === id) {
|
||||||
|
const removed = nodes.splice(i, 1)[0];
|
||||||
|
return { tree: nodes, removed };
|
||||||
|
}
|
||||||
|
if (nodes[i].children) {
|
||||||
|
const result = removeSpace(nodes[i].children, id);
|
||||||
|
if (result.removed) {
|
||||||
|
return { tree: nodes, removed: result.removed };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { tree: nodes, removed: null };
|
||||||
|
};
|
||||||
|
|
||||||
|
// Helper to insert a space after target
|
||||||
|
const insertAfter = (nodes, targetId, spaceToInsert) => {
|
||||||
|
for (let i = 0; i < nodes.length; i++) {
|
||||||
|
if (nodes[i].id === targetId) {
|
||||||
|
nodes.splice(i + 1, 0, spaceToInsert);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (nodes[i].children) {
|
||||||
|
if (insertAfter(nodes[i].children, targetId, spaceToInsert)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Clone the tree
|
||||||
|
const newTree = EJSON.clone(tree);
|
||||||
|
|
||||||
|
// Remove the dragged space
|
||||||
|
const { tree: treeAfterRemoval, removed } = removeSpace(newTree, draggedSpaceId);
|
||||||
|
|
||||||
|
if (removed) {
|
||||||
|
// Insert after target
|
||||||
|
insertAfter(treeAfterRemoval, targetSpaceId, removed);
|
||||||
|
|
||||||
|
// Save the new tree
|
||||||
|
Meteor.call('setWorkspacesTree', treeAfterRemoval, (err) => {
|
||||||
|
if (err) console.error(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onRendered() {
|
onRendered() {
|
||||||
|
// jQuery sortable is disabled in favor of HTML5 drag-and-drop for space management
|
||||||
|
// The old sortable code has been removed to prevent conflicts
|
||||||
|
|
||||||
|
/* OLD SORTABLE CODE - DISABLED
|
||||||
const itemsSelector = '.js-board:not(.placeholder)';
|
const itemsSelector = '.js-board:not(.placeholder)';
|
||||||
|
|
||||||
const $boards = this.$('.js-boards');
|
const $boards = this.$('.js-boards');
|
||||||
|
|
@ -73,20 +142,12 @@ BlazeComponent.extendComponent({
|
||||||
EscapeActions.executeUpTo('popup-close');
|
EscapeActions.executeUpTo('popup-close');
|
||||||
},
|
},
|
||||||
stop(evt, ui) {
|
stop(evt, ui) {
|
||||||
// To attribute the new index number, we need to get the DOM element
|
|
||||||
const prevBoardDom = ui.item.prev('.js-board').get(0);
|
const prevBoardDom = ui.item.prev('.js-board').get(0);
|
||||||
const nextBoardDom = ui.item.next('.js-board').get(0);
|
const nextBoardDom = ui.item.next('.js-board').get(0);
|
||||||
const sortIndex = Utils.calculateIndex(prevBoardDom, nextBoardDom, 1);
|
const sortIndex = Utils.calculateIndex(prevBoardDom, nextBoardDom, 1);
|
||||||
|
|
||||||
const boardDomElement = ui.item.get(0);
|
const boardDomElement = ui.item.get(0);
|
||||||
const board = Blaze.getData(boardDomElement);
|
const board = Blaze.getData(boardDomElement);
|
||||||
// Normally the jquery-ui sortable library moves the dragged DOM element
|
|
||||||
// to its new position, which disrupts Blaze reactive updates mechanism
|
|
||||||
// (especially when we move the last card of a list, or when multiple
|
|
||||||
// users move some cards at the same time). To prevent these UX glitches
|
|
||||||
// we ask sortable to gracefully cancel the move, and to put back the
|
|
||||||
// DOM in its initial state. The card move is then handled reactively by
|
|
||||||
// Blaze with the below query.
|
|
||||||
$boards.sortable('cancel');
|
$boards.sortable('cancel');
|
||||||
const currentUser = ReactiveCache.getCurrentUser();
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
if (currentUser && typeof currentUser.setBoardSortIndex === 'function') {
|
if (currentUser && typeof currentUser.setBoardSortIndex === 'function') {
|
||||||
|
|
@ -95,7 +156,6 @@ BlazeComponent.extendComponent({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Disable drag-dropping if the current user is not a board member or is comment only
|
|
||||||
this.autorun(() => {
|
this.autorun(() => {
|
||||||
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
|
if (Utils.isTouchScreenOrShowDesktopDragHandles()) {
|
||||||
$boards.sortable({
|
$boards.sortable({
|
||||||
|
|
@ -103,6 +163,7 @@ BlazeComponent.extendComponent({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
},
|
},
|
||||||
userHasTeams() {
|
userHasTeams() {
|
||||||
if (ReactiveCache.getCurrentUser()?.teams?.length > 0)
|
if (ReactiveCache.getCurrentUser()?.teams?.length > 0)
|
||||||
|
|
@ -134,6 +195,41 @@ BlazeComponent.extendComponent({
|
||||||
const ret = this.userHasOrgs() || this.userHasTeams();
|
const ret = this.userHasOrgs() || this.userHasTeams();
|
||||||
return ret;
|
return ret;
|
||||||
},
|
},
|
||||||
|
currentMenuPath() {
|
||||||
|
const sel = this.selectedMenu.get();
|
||||||
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
|
|
||||||
|
// Helper to find space by id in tree
|
||||||
|
const findSpaceById = (nodes, targetId, path = []) => {
|
||||||
|
for (const node of nodes) {
|
||||||
|
if (node.id === targetId) {
|
||||||
|
return [...path, node];
|
||||||
|
}
|
||||||
|
if (node.children && node.children.length > 0) {
|
||||||
|
const result = findSpaceById(node.children, targetId, [...path, node]);
|
||||||
|
if (result) return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (sel === 'starred') {
|
||||||
|
return { icon: '⭐', text: TAPi18n.__('allboards.starred') };
|
||||||
|
} else if (sel === 'templates') {
|
||||||
|
return { icon: '📋', text: TAPi18n.__('allboards.templates') };
|
||||||
|
} else if (sel === 'remaining') {
|
||||||
|
return { icon: '📂', text: TAPi18n.__('allboards.remaining') };
|
||||||
|
} else {
|
||||||
|
// sel is a workspaceId, build path
|
||||||
|
const tree = this.workspacesTreeVar.get();
|
||||||
|
const spacePath = findSpaceById(tree, sel);
|
||||||
|
if (spacePath && spacePath.length > 0) {
|
||||||
|
const pathText = spacePath.map(s => s.name).join(' / ');
|
||||||
|
return { icon: '🗂️', text: `${TAPi18n.__('allboards.workspaces')} / ${pathText}` };
|
||||||
|
}
|
||||||
|
return { icon: '🗂️', text: TAPi18n.__('allboards.workspaces') };
|
||||||
|
}
|
||||||
|
},
|
||||||
boards() {
|
boards() {
|
||||||
let query = {
|
let query = {
|
||||||
// { type: 'board' },
|
// { type: 'board' },
|
||||||
|
|
@ -188,11 +284,31 @@ BlazeComponent.extendComponent({
|
||||||
|
|
||||||
const boards = ReactiveCache.getBoards(query, {});
|
const boards = ReactiveCache.getBoards(query, {});
|
||||||
const currentUser = ReactiveCache.getCurrentUser();
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
if (currentUser && typeof currentUser.sortBoardsForUser === 'function') {
|
let list = boards;
|
||||||
return currentUser.sortBoardsForUser(boards);
|
// Apply left menu filtering
|
||||||
|
const sel = this.selectedMenu.get();
|
||||||
|
const assignments = (currentUser && currentUser.profile && currentUser.profile.boardWorkspaceAssignments) || {};
|
||||||
|
if (sel === 'starred') {
|
||||||
|
list = list.filter(b => currentUser && currentUser.hasStarred(b._id));
|
||||||
|
} else if (sel === 'templates') {
|
||||||
|
list = list.filter(b => b.type === 'template-container');
|
||||||
|
} else if (sel === 'remaining') {
|
||||||
|
// Show boards not in any workspace AND not templates
|
||||||
|
// Keep starred boards visible in Remaining too
|
||||||
|
list = list.filter(b =>
|
||||||
|
!assignments[b._id] &&
|
||||||
|
b.type !== 'template-container'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// assume sel is a workspaceId
|
||||||
|
// Keep starred boards visible in their workspace too
|
||||||
|
list = list.filter(b => assignments[b._id] === sel);
|
||||||
}
|
}
|
||||||
// Fallback: deterministic title sort when no user mapping is available (e.g., public page)
|
|
||||||
return boards.slice().sort((a, b) => (a.title || '').localeCompare(b.title || ''));
|
if (currentUser && typeof currentUser.sortBoardsForUser === 'function') {
|
||||||
|
return currentUser.sortBoardsForUser(list);
|
||||||
|
}
|
||||||
|
return list.slice().sort((a, b) => (a.title || '').localeCompare(b.title || ''));
|
||||||
},
|
},
|
||||||
boardLists(boardId) {
|
boardLists(boardId) {
|
||||||
/* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214
|
/* Bug Board icons random dance https://github.com/wekan/wekan/issues/4214
|
||||||
|
|
@ -240,11 +356,65 @@ BlazeComponent.extendComponent({
|
||||||
events() {
|
events() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
'click .js-add-board': Popup.open('createBoard'),
|
'click .js-select-menu'(evt) {
|
||||||
'click .js-star-board'(evt) {
|
const type = evt.currentTarget.getAttribute('data-type');
|
||||||
const boardId = this.currentData()._id;
|
this.selectedWorkspaceIdVar.set(null);
|
||||||
ReactiveCache.getCurrentUser().toggleBoardStar(boardId);
|
this.selectedMenu.set(type);
|
||||||
|
},
|
||||||
|
'click .js-select-workspace'(evt) {
|
||||||
|
const id = evt.currentTarget.getAttribute('data-id');
|
||||||
|
this.selectedWorkspaceIdVar.set(id);
|
||||||
|
this.selectedMenu.set(id);
|
||||||
|
},
|
||||||
|
'click .js-add-workspace'(evt) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
|
const name = prompt(TAPi18n.__('allboards.add-workspace-prompt') || 'New Space name');
|
||||||
|
if (name && name.trim()) {
|
||||||
|
Meteor.call('createWorkspace', { parentId: null, name: name.trim() }, (err, res) => {
|
||||||
|
if (err) console.error(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'click .js-add-board'(evt) {
|
||||||
|
// Store the currently selected workspace/menu for board creation
|
||||||
|
const selectedWorkspaceId = this.selectedWorkspaceIdVar.get();
|
||||||
|
const selectedMenu = this.selectedMenu.get();
|
||||||
|
|
||||||
|
if (selectedWorkspaceId) {
|
||||||
|
Session.set('createBoardInWorkspace', selectedWorkspaceId);
|
||||||
|
} else {
|
||||||
|
Session.set('createBoardInWorkspace', null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open different popup based on context
|
||||||
|
if (selectedMenu === 'templates') {
|
||||||
|
Popup.open('createTemplateContainer')(evt);
|
||||||
|
} else {
|
||||||
|
Popup.open('createBoard')(evt);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'click .js-star-board'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
const boardId = this.currentData()._id;
|
||||||
|
if (boardId) {
|
||||||
|
Meteor.call('toggleBoardStar', boardId);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// HTML5 DnD from boards to spaces
|
||||||
|
'dragstart .js-board'(evt) {
|
||||||
|
const boardId = this.currentData()._id;
|
||||||
|
|
||||||
|
// Support multi-drag
|
||||||
|
if (BoardMultiSelection.isActive() && BoardMultiSelection.isSelected(boardId)) {
|
||||||
|
const selectedIds = BoardMultiSelection.getSelectedBoardIds();
|
||||||
|
try {
|
||||||
|
evt.originalEvent.dataTransfer.setData('text/plain', JSON.stringify(selectedIds));
|
||||||
|
evt.originalEvent.dataTransfer.setData('application/x-board-multi', 'true');
|
||||||
|
} catch (e) {}
|
||||||
|
} else {
|
||||||
|
try { evt.originalEvent.dataTransfer.setData('text/plain', boardId); } catch (e) {}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
'click .js-clone-board'(evt) {
|
'click .js-clone-board'(evt) {
|
||||||
if (confirm(TAPi18n.__('duplicate-board-confirm'))) {
|
if (confirm(TAPi18n.__('duplicate-board-confirm'))) {
|
||||||
|
|
@ -295,6 +465,58 @@ BlazeComponent.extendComponent({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
'click .js-multiselection-activate'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
if (BoardMultiSelection.isActive()) {
|
||||||
|
BoardMultiSelection.disable();
|
||||||
|
} else {
|
||||||
|
BoardMultiSelection.activate();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'click .js-multiselection-reset'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
BoardMultiSelection.disable();
|
||||||
|
},
|
||||||
|
'click .js-toggle-board-multi-selection'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
const boardId = this.currentData()._id;
|
||||||
|
BoardMultiSelection.toogle(boardId);
|
||||||
|
},
|
||||||
|
'click .js-archive-selected-boards'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
const selectedBoards = BoardMultiSelection.getSelectedBoardIds();
|
||||||
|
if (selectedBoards.length > 0 && confirm(TAPi18n.__('archive-board-confirm'))) {
|
||||||
|
selectedBoards.forEach(boardId => {
|
||||||
|
Meteor.call('archiveBoard', boardId);
|
||||||
|
});
|
||||||
|
BoardMultiSelection.reset();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'click .js-duplicate-selected-boards'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
const selectedBoards = BoardMultiSelection.getSelectedBoardIds();
|
||||||
|
if (selectedBoards.length > 0 && confirm(TAPi18n.__('duplicate-board-confirm'))) {
|
||||||
|
selectedBoards.forEach(boardId => {
|
||||||
|
const board = ReactiveCache.getBoard(boardId);
|
||||||
|
if (board) {
|
||||||
|
Meteor.call(
|
||||||
|
'copyBoard',
|
||||||
|
boardId,
|
||||||
|
{
|
||||||
|
sort: ReactiveCache.getBoards({ archived: false }).length,
|
||||||
|
type: 'board',
|
||||||
|
title: board.title,
|
||||||
|
},
|
||||||
|
(err, res) => {
|
||||||
|
if (err) console.error(err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
BoardMultiSelection.reset();
|
||||||
|
}
|
||||||
|
},
|
||||||
'click #resetBtn'(event) {
|
'click #resetBtn'(event) {
|
||||||
let allBoards = document.getElementsByClassName("js-board");
|
let allBoards = document.getElementsByClassName("js-board");
|
||||||
let currBoard;
|
let currBoard;
|
||||||
|
|
@ -361,7 +583,260 @@ BlazeComponent.extendComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'click .js-edit-workspace'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
const workspaceId = evt.currentTarget.getAttribute('data-id');
|
||||||
|
|
||||||
|
// Find the space in the tree
|
||||||
|
const findSpace = (nodes, id) => {
|
||||||
|
for (const node of nodes) {
|
||||||
|
if (node.id === id) return node;
|
||||||
|
if (node.children) {
|
||||||
|
const found = findSpace(node.children, id);
|
||||||
|
if (found) return found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
const tree = this.workspacesTreeVar.get();
|
||||||
|
const space = findSpace(tree, workspaceId);
|
||||||
|
|
||||||
|
if (space) {
|
||||||
|
const newName = prompt(TAPi18n.__('allboards.edit-workspace-name') || 'Space name:', space.name);
|
||||||
|
const newIcon = prompt(TAPi18n.__('allboards.edit-workspace-icon') || 'Space icon (markdown):', space.icon || '📁');
|
||||||
|
|
||||||
|
if (newName !== null && newName.trim()) {
|
||||||
|
// Update space in tree
|
||||||
|
const updateSpaceInTree = (nodes, id, updates) => {
|
||||||
|
return nodes.map(node => {
|
||||||
|
if (node.id === id) {
|
||||||
|
return { ...node, ...updates };
|
||||||
|
}
|
||||||
|
if (node.children) {
|
||||||
|
return { ...node, children: updateSpaceInTree(node.children, id, updates) };
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const updatedTree = updateSpaceInTree(tree, workspaceId, {
|
||||||
|
name: newName.trim(),
|
||||||
|
icon: newIcon || '📁'
|
||||||
|
});
|
||||||
|
|
||||||
|
Meteor.call('setWorkspacesTree', updatedTree, (err) => {
|
||||||
|
if (err) console.error(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'click .js-add-subworkspace'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
const parentId = evt.currentTarget.getAttribute('data-id');
|
||||||
|
const name = prompt(TAPi18n.__('allboards.add-subworkspace-prompt') || 'Subspace name:');
|
||||||
|
|
||||||
|
if (name && name.trim()) {
|
||||||
|
Meteor.call('createWorkspace', { parentId, name: name.trim() }, (err) => {
|
||||||
|
if (err) console.error(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'dragstart .workspace-node'(evt) {
|
||||||
|
const workspaceId = evt.currentTarget.getAttribute('data-workspace-id');
|
||||||
|
evt.originalEvent.dataTransfer.effectAllowed = 'move';
|
||||||
|
evt.originalEvent.dataTransfer.setData('application/x-workspace-id', workspaceId);
|
||||||
|
|
||||||
|
// Create a better drag image
|
||||||
|
const dragImage = evt.currentTarget.cloneNode(true);
|
||||||
|
dragImage.style.position = 'absolute';
|
||||||
|
dragImage.style.top = '-9999px';
|
||||||
|
dragImage.style.opacity = '0.8';
|
||||||
|
document.body.appendChild(dragImage);
|
||||||
|
evt.originalEvent.dataTransfer.setDragImage(dragImage, 0, 0);
|
||||||
|
setTimeout(() => document.body.removeChild(dragImage), 0);
|
||||||
|
|
||||||
|
evt.currentTarget.classList.add('dragging');
|
||||||
|
},
|
||||||
|
'dragend .workspace-node'(evt) {
|
||||||
|
evt.currentTarget.classList.remove('dragging');
|
||||||
|
document.querySelectorAll('.workspace-node').forEach(el => {
|
||||||
|
el.classList.remove('drag-over');
|
||||||
|
});
|
||||||
|
},
|
||||||
|
'dragover .workspace-node'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
|
||||||
|
const draggingEl = document.querySelector('.workspace-node.dragging');
|
||||||
|
const targetEl = evt.currentTarget;
|
||||||
|
|
||||||
|
// Allow dropping boards on any space
|
||||||
|
// Or allow dropping spaces on other spaces (but not on itself or descendants)
|
||||||
|
if (!draggingEl || (targetEl !== draggingEl && !draggingEl.contains(targetEl))) {
|
||||||
|
evt.originalEvent.dataTransfer.dropEffect = 'move';
|
||||||
|
targetEl.classList.add('drag-over');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'dragleave .workspace-node'(evt) {
|
||||||
|
evt.currentTarget.classList.remove('drag-over');
|
||||||
|
},
|
||||||
|
'drop .workspace-node'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
|
||||||
|
const targetEl = evt.currentTarget;
|
||||||
|
targetEl.classList.remove('drag-over');
|
||||||
|
|
||||||
|
// Check what's being dropped - board or workspace
|
||||||
|
const draggedWorkspaceId = evt.originalEvent.dataTransfer.getData('application/x-workspace-id');
|
||||||
|
const isMultiBoard = evt.originalEvent.dataTransfer.getData('application/x-board-multi');
|
||||||
|
const boardData = evt.originalEvent.dataTransfer.getData('text/plain');
|
||||||
|
|
||||||
|
if (draggedWorkspaceId && !boardData) {
|
||||||
|
// This is a workspace reorder operation
|
||||||
|
const targetWorkspaceId = targetEl.getAttribute('data-workspace-id');
|
||||||
|
|
||||||
|
if (draggedWorkspaceId !== targetWorkspaceId) {
|
||||||
|
this.reorderWorkspaces(draggedWorkspaceId, targetWorkspaceId);
|
||||||
|
}
|
||||||
|
} else if (boardData) {
|
||||||
|
// This is a board assignment operation
|
||||||
|
// Get the workspace ID directly from the dropped workspace-node's data-workspace-id attribute
|
||||||
|
const workspaceId = targetEl.getAttribute('data-workspace-id');
|
||||||
|
|
||||||
|
if (workspaceId) {
|
||||||
|
if (isMultiBoard) {
|
||||||
|
// Multi-board drag
|
||||||
|
try {
|
||||||
|
const boardIds = JSON.parse(boardData);
|
||||||
|
boardIds.forEach(boardId => {
|
||||||
|
Meteor.call('assignBoardToWorkspace', boardId, workspaceId);
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
// Error parsing multi-board data
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Single board drag
|
||||||
|
Meteor.call('assignBoardToWorkspace', boardData, workspaceId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'dragover .js-select-menu'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
|
||||||
|
const menuType = evt.currentTarget.getAttribute('data-type');
|
||||||
|
// Only allow drop on "remaining" menu to unassign boards from spaces
|
||||||
|
if (menuType === 'remaining') {
|
||||||
|
evt.originalEvent.dataTransfer.dropEffect = 'move';
|
||||||
|
evt.currentTarget.classList.add('drag-over');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'dragleave .js-select-menu'(evt) {
|
||||||
|
evt.currentTarget.classList.remove('drag-over');
|
||||||
|
},
|
||||||
|
'drop .js-select-menu'(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
evt.stopPropagation();
|
||||||
|
|
||||||
|
const menuType = evt.currentTarget.getAttribute('data-type');
|
||||||
|
evt.currentTarget.classList.remove('drag-over');
|
||||||
|
|
||||||
|
// Only handle drops on "remaining" menu
|
||||||
|
if (menuType !== 'remaining') return;
|
||||||
|
|
||||||
|
const isMultiBoard = evt.originalEvent.dataTransfer.getData('application/x-board-multi');
|
||||||
|
const boardData = evt.originalEvent.dataTransfer.getData('text/plain');
|
||||||
|
|
||||||
|
if (boardData) {
|
||||||
|
if (isMultiBoard) {
|
||||||
|
// Multi-board drag - unassign all from workspaces
|
||||||
|
try {
|
||||||
|
const boardIds = JSON.parse(boardData);
|
||||||
|
boardIds.forEach(boardId => {
|
||||||
|
Meteor.call('unassignBoardFromWorkspace', boardId);
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
// Error parsing multi-board data
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Single board drag - unassign from workspace
|
||||||
|
Meteor.call('unassignBoardFromWorkspace', boardData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
// Helpers for templates
|
||||||
|
workspacesTree() {
|
||||||
|
return this.workspacesTreeVar.get();
|
||||||
|
},
|
||||||
|
selectedWorkspaceId() {
|
||||||
|
return this.selectedWorkspaceIdVar.get();
|
||||||
|
},
|
||||||
|
isSelectedMenu(type) {
|
||||||
|
return this.selectedMenu.get() === type;
|
||||||
|
},
|
||||||
|
isSpaceSelected(id) {
|
||||||
|
return this.selectedWorkspaceIdVar.get() === id;
|
||||||
|
},
|
||||||
|
menuItemCount(type) {
|
||||||
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
|
const assignments = (currentUser && currentUser.profile && currentUser.profile.boardWorkspaceAssignments) || {};
|
||||||
|
|
||||||
|
// Get all boards for counting
|
||||||
|
let query = {
|
||||||
|
$and: [
|
||||||
|
{ archived: false },
|
||||||
|
{ type: { $in: ['board', 'template-container'] } },
|
||||||
|
{ $or: [{ 'members.userId': Meteor.userId() }] },
|
||||||
|
{ title: { $not: { $regex: /^\^.*\^$/ } } }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
const allBoards = ReactiveCache.getBoards(query, {});
|
||||||
|
|
||||||
|
if (type === 'starred') {
|
||||||
|
return allBoards.filter(b => currentUser && currentUser.hasStarred(b._id)).length;
|
||||||
|
} else if (type === 'templates') {
|
||||||
|
return allBoards.filter(b => b.type === 'template-container').length;
|
||||||
|
} else if (type === 'remaining') {
|
||||||
|
// Count boards not in any workspace AND not templates
|
||||||
|
// Include starred boards (they appear in both Starred and Remaining)
|
||||||
|
return allBoards.filter(b =>
|
||||||
|
!assignments[b._id] &&
|
||||||
|
b.type !== 'template-container'
|
||||||
|
).length;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
},
|
||||||
|
workspaceCount(workspaceId) {
|
||||||
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
|
const assignments = (currentUser && currentUser.profile && currentUser.profile.boardWorkspaceAssignments) || {};
|
||||||
|
|
||||||
|
// Get all boards for counting
|
||||||
|
let query = {
|
||||||
|
$and: [
|
||||||
|
{ archived: false },
|
||||||
|
{ type: { $in: ['board', 'template-container'] } },
|
||||||
|
{ $or: [{ 'members.userId': Meteor.userId() }] },
|
||||||
|
{ title: { $not: { $regex: /^\^.*\^$/ } } }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
const allBoards = ReactiveCache.getBoards(query, {});
|
||||||
|
|
||||||
|
// Count boards directly assigned to this space (not including children)
|
||||||
|
return allBoards.filter(b => assignments[b._id] === workspaceId).length;
|
||||||
|
},
|
||||||
|
canModifyBoards() {
|
||||||
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
|
return currentUser && !currentUser.isCommentOnly();
|
||||||
|
},
|
||||||
|
hasBoardsSelected() {
|
||||||
|
return BoardMultiSelection.count() > 0;
|
||||||
|
},
|
||||||
}).register('boardList');
|
}).register('boardList');
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,12 @@ template(name="minicardCustomFieldDate")
|
||||||
template(name="editCardReceivedDatePopup")
|
template(name="editCardReceivedDatePopup")
|
||||||
form.edit-card-received-date
|
form.edit-card-received-date
|
||||||
.datepicker
|
.datepicker
|
||||||
|
// Date input field (existing)
|
||||||
|
// Insert calendar selector right after date input
|
||||||
|
.calendar-selector
|
||||||
|
label(for="calendar-received") 🗓️
|
||||||
|
input#calendar-received.js-calendar-date(type="date")
|
||||||
|
// Time input field (if present)
|
||||||
.clear-date
|
.clear-date
|
||||||
a.js-clear-date {{_ 'clear'}}
|
a.js-clear-date {{_ 'clear'}}
|
||||||
.datepicker-actions
|
.datepicker-actions
|
||||||
|
|
@ -106,6 +112,11 @@ template(name="editCardReceivedDatePopup")
|
||||||
template(name="editCardStartDatePopup")
|
template(name="editCardStartDatePopup")
|
||||||
form.edit-card-start-date
|
form.edit-card-start-date
|
||||||
.datepicker
|
.datepicker
|
||||||
|
// Date input field (existing)
|
||||||
|
.calendar-selector
|
||||||
|
label(for="calendar-start") 🗓️
|
||||||
|
input#calendar-start.js-calendar-date(type="date")
|
||||||
|
// Time input field (if present)
|
||||||
.clear-date
|
.clear-date
|
||||||
a.js-clear-date {{_ 'clear'}}
|
a.js-clear-date {{_ 'clear'}}
|
||||||
.datepicker-actions
|
.datepicker-actions
|
||||||
|
|
@ -115,6 +126,11 @@ template(name="editCardStartDatePopup")
|
||||||
template(name="editCardDueDatePopup")
|
template(name="editCardDueDatePopup")
|
||||||
form.edit-card-due-date
|
form.edit-card-due-date
|
||||||
.datepicker
|
.datepicker
|
||||||
|
// Date input field (existing)
|
||||||
|
.calendar-selector
|
||||||
|
label(for="calendar-due") 🗓️
|
||||||
|
input#calendar-due.js-calendar-date(type="date")
|
||||||
|
// Time input field (if present)
|
||||||
.clear-date
|
.clear-date
|
||||||
a.js-clear-date {{_ 'clear'}}
|
a.js-clear-date {{_ 'clear'}}
|
||||||
.datepicker-actions
|
.datepicker-actions
|
||||||
|
|
@ -124,6 +140,11 @@ template(name="editCardDueDatePopup")
|
||||||
template(name="editCardEndDatePopup")
|
template(name="editCardEndDatePopup")
|
||||||
form.edit-card-end-date
|
form.edit-card-end-date
|
||||||
.datepicker
|
.datepicker
|
||||||
|
// Date input field (existing)
|
||||||
|
.calendar-selector
|
||||||
|
label(for="calendar-end") 🗓️
|
||||||
|
input#calendar-end.js-calendar-date(type="date")
|
||||||
|
// Time input field (if present)
|
||||||
.clear-date
|
.clear-date
|
||||||
a.js-clear-date {{_ 'clear'}}
|
a.js-clear-date {{_ 'clear'}}
|
||||||
.datepicker-actions
|
.datepicker-actions
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,17 @@ import {
|
||||||
onRendered() {
|
onRendered() {
|
||||||
super.onRendered();
|
super.onRendered();
|
||||||
// DatePicker base class handles initialization with native HTML inputs
|
// DatePicker base class handles initialization with native HTML inputs
|
||||||
|
const self = this;
|
||||||
|
this.$('.js-calendar-date').on('change', function(evt) {
|
||||||
|
const currentUser = ReactiveCache.getCurrentUser && ReactiveCache.getCurrentUser();
|
||||||
|
const dateFormat = currentUser ? currentUser.getDateFormat() : 'YYYY-MM-DD';
|
||||||
|
const value = evt.target.value;
|
||||||
|
if (value) {
|
||||||
|
// Format date according to user preference
|
||||||
|
const formatted = formatDateByUserPreference(new Date(value), dateFormat, true);
|
||||||
|
self._storeDate(new Date(value));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_storeDate(date) {
|
_storeDate(date) {
|
||||||
|
|
|
||||||
|
|
@ -191,7 +191,7 @@ template(name="cardDetails")
|
||||||
if currentBoard.allowsMembers
|
if currentBoard.allowsMembers
|
||||||
.card-details-item.card-details-item-members
|
.card-details-item.card-details-item-members
|
||||||
h3.card-details-item-title
|
h3.card-details-item-title
|
||||||
| 👤s
|
| 👥
|
||||||
| {{_ 'members'}}
|
| {{_ 'members'}}
|
||||||
each userId in getMembers
|
each userId in getMembers
|
||||||
+userAvatar(userId=userId cardId=_id)
|
+userAvatar(userId=userId cardId=_id)
|
||||||
|
|
@ -242,7 +242,7 @@ template(name="cardDetails")
|
||||||
if currentBoard.allowsAssignedBy
|
if currentBoard.allowsAssignedBy
|
||||||
.card-details-item.card-details-item-name
|
.card-details-item.card-details-item-name
|
||||||
h3.card-details-item-title
|
h3.card-details-item-title
|
||||||
| 👤-plus
|
| ✍️
|
||||||
| {{_ 'assigned-by'}}
|
| {{_ 'assigned-by'}}
|
||||||
if canModifyCard
|
if canModifyCard
|
||||||
unless currentUser.isWorker
|
unless currentUser.isWorker
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ template(name="minicard")
|
||||||
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")
|
class="{{#if colorClass}}minicard-{{colorClass}}{{/if}}")
|
||||||
if canModifyCard
|
if canModifyCard
|
||||||
a.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}") ☰
|
a.minicard-details-menu-with-handle.js-open-minicard-details-menu(title="{{_ 'cardDetailsActionsPopup-title'}}") ☰
|
||||||
|
if canMoveCard
|
||||||
.handle
|
.handle
|
||||||
| ↕️
|
| ↕️
|
||||||
.dates
|
.dates
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ template(name="datepicker")
|
||||||
.fields
|
.fields
|
||||||
.left
|
.left
|
||||||
label(for="date") {{_ 'date'}}
|
label(for="date") {{_ 'date'}}
|
||||||
input.js-date-field#date(type="text" name="date" value=showDate autofocus placeholder=dateFormat)
|
input.js-date-field#date(type="date" name="date" value=showDate autofocus)
|
||||||
.right
|
.right
|
||||||
label(for="time") {{_ 'time'}}
|
label(for="time") {{_ 'time'}}
|
||||||
input.js-time-field#time(type="time" name="time" value=showTime)
|
input.js-time-field#time(type="time" name="time" value=showTime)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,8 @@ template(name="listHeader")
|
||||||
a.js-open-list-menu(title="{{_ 'listActionPopup-title'}}") ☰
|
a.js-open-list-menu(title="{{_ 'listActionPopup-title'}}") ☰
|
||||||
else
|
else
|
||||||
a.list-header-menu-icon.js-select-list ▶️
|
a.list-header-menu-icon.js-select-list ▶️
|
||||||
a.list-header-handle.handle.js-list-handle ↕️
|
unless currentUser.isWorker
|
||||||
|
a.list-header-handle.handle.js-list-handle ↕️
|
||||||
else if currentUser.isBoardMember
|
else if currentUser.isBoardMember
|
||||||
if isWatching
|
if isWatching
|
||||||
i.list-header-watch-icon | 👁️
|
i.list-header-watch-icon | 👁️
|
||||||
|
|
@ -72,7 +73,8 @@ template(name="listHeader")
|
||||||
a.js-open-list-menu(title="{{_ 'listActionPopup-title'}}") ☰
|
a.js-open-list-menu(title="{{_ 'listActionPopup-title'}}") ☰
|
||||||
if currentUser.isBoardMember
|
if currentUser.isBoardMember
|
||||||
unless currentUser.isCommentOnly
|
unless currentUser.isCommentOnly
|
||||||
a.list-header-handle.handle.js-list-handle ↕️
|
unless currentUser.isWorker
|
||||||
|
a.list-header-handle.handle.js-list-handle ↕️
|
||||||
|
|
||||||
template(name="editListTitleForm")
|
template(name="editListTitleForm")
|
||||||
.list-composer
|
.list-composer
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,6 @@ template(name="header")
|
||||||
i.mobile-icon(class="{{#if mobileMode}}active{{/if}}") 📱
|
i.mobile-icon(class="{{#if mobileMode}}active{{/if}}") 📱
|
||||||
i.desktop-icon(class="{{#unless mobileMode}}active{{/unless}}") 🖥️
|
i.desktop-icon(class="{{#unless mobileMode}}active{{/unless}}") 🖥️
|
||||||
|
|
||||||
// Bookmarks button - desktop opens popup, mobile routes to page
|
|
||||||
a.board-header-btn.js-open-bookmarks(title="{{_ 'bookmarks'}}")
|
|
||||||
| 🔖
|
|
||||||
|
|
||||||
// Notifications
|
// Notifications
|
||||||
+notifications
|
+notifications
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -293,6 +293,8 @@
|
||||||
overflow-y: auto !important;
|
overflow-y: auto !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.pop-over[data-popup="editCardReceivedDatePopup"] .edit-date button,
|
.pop-over[data-popup="editCardReceivedDatePopup"] .edit-date button,
|
||||||
.pop-over[data-popup="editCardStartDatePopup"] .edit-date button,
|
.pop-over[data-popup="editCardStartDatePopup"] .edit-date button,
|
||||||
.pop-over[data-popup="editCardDueDatePopup"] .edit-date button,
|
.pop-over[data-popup="editCardDueDatePopup"] .edit-date button,
|
||||||
|
|
@ -387,9 +389,6 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
.pop-over .quiet {
|
|
||||||
/* padding: 6px 6px 4px;*/
|
|
||||||
}
|
|
||||||
.pop-over.search-over {
|
.pop-over.search-over {
|
||||||
background: #f0f0f0;
|
background: #f0f0f0;
|
||||||
min-height: 14vh;
|
min-height: 14vh;
|
||||||
|
|
|
||||||
|
|
@ -587,6 +587,10 @@ template(name="boardMenuPopup")
|
||||||
| 📦
|
| 📦
|
||||||
| {{_ 'archived-items'}}
|
| {{_ 'archived-items'}}
|
||||||
if currentUser.isBoardAdmin
|
if currentUser.isBoardAdmin
|
||||||
|
li
|
||||||
|
a.js-open-migrations
|
||||||
|
| 🔧
|
||||||
|
| {{_ 'migrations'}}
|
||||||
li
|
li
|
||||||
a.js-change-board-color
|
a.js-change-board-color
|
||||||
| 🎨
|
| 🎨
|
||||||
|
|
@ -627,10 +631,10 @@ template(name="boardMenuPopup")
|
||||||
if currentUser.isBoardAdmin
|
if currentUser.isBoardAdmin
|
||||||
hr
|
hr
|
||||||
ul.pop-over-list
|
ul.pop-over-list
|
||||||
li
|
// li
|
||||||
a.js-delete-duplicate-lists
|
// a.js-delete-duplicate-lists
|
||||||
| 🗑️
|
// | 🗑️
|
||||||
| {{_ 'delete-duplicate-lists'}}
|
// | {{_ 'delete-duplicate-lists'}}
|
||||||
li
|
li
|
||||||
a.js-archive-board
|
a.js-archive-board
|
||||||
| ➡️📦
|
| ➡️📦
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ const viewTitles = {
|
||||||
multiselection: 'multi-selection',
|
multiselection: 'multi-selection',
|
||||||
customFields: 'custom-fields',
|
customFields: 'custom-fields',
|
||||||
archives: 'archives',
|
archives: 'archives',
|
||||||
|
migrations: 'migrations',
|
||||||
};
|
};
|
||||||
|
|
||||||
BlazeComponent.extendComponent({
|
BlazeComponent.extendComponent({
|
||||||
|
|
@ -271,6 +272,10 @@ Template.boardMenuPopup.events({
|
||||||
Sidebar.setView('archives');
|
Sidebar.setView('archives');
|
||||||
Popup.back();
|
Popup.back();
|
||||||
},
|
},
|
||||||
|
'click .js-open-migrations'() {
|
||||||
|
Sidebar.setView('migrations');
|
||||||
|
Popup.back();
|
||||||
|
},
|
||||||
'click .js-change-board-color': Popup.open('boardChangeColor'),
|
'click .js-change-board-color': Popup.open('boardChangeColor'),
|
||||||
'click .js-change-background-image': Popup.open('boardChangeBackgroundImage'),
|
'click .js-change-background-image': Popup.open('boardChangeBackgroundImage'),
|
||||||
'click .js-board-info-on-my-boards': Popup.open('boardInfoOnMyBoards'),
|
'click .js-board-info-on-my-boards': Popup.open('boardInfoOnMyBoards'),
|
||||||
|
|
|
||||||
|
|
@ -95,3 +95,7 @@ template(name="createCustomFieldPopup")
|
||||||
template(name="deleteCustomFieldPopup")
|
template(name="deleteCustomFieldPopup")
|
||||||
p {{_ "custom-field-delete-pop"}}
|
p {{_ "custom-field-delete-pop"}}
|
||||||
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
|
button.js-confirm.negate.full(type="submit") {{_ 'delete'}}
|
||||||
|
|
||||||
|
// Reuse the create form for editing to satisfy popup template lookup
|
||||||
|
template(name="editCustomFieldPopup")
|
||||||
|
+Template.dynamic(template="createCustomFieldPopup")
|
||||||
|
|
|
||||||
109
client/components/sidebar/sidebarMigrations.jade
Normal file
109
client/components/sidebar/sidebarMigrations.jade
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
template(name='migrationsSidebar')
|
||||||
|
if currentUser.isBoardAdmin
|
||||||
|
.sidebar-migrations
|
||||||
|
h3
|
||||||
|
| 🔧
|
||||||
|
| {{_ 'migrations'}}
|
||||||
|
p.quiet {{_ 'migrations-description'}}
|
||||||
|
|
||||||
|
.migrations-list
|
||||||
|
h4 {{_ 'board-migrations'}}
|
||||||
|
.migration-item
|
||||||
|
a.js-run-migration(data-migration="comprehensive")
|
||||||
|
.migration-name
|
||||||
|
| {{_ 'comprehensive-board-migration'}}
|
||||||
|
.migration-status
|
||||||
|
if comprehensiveMigrationNeeded
|
||||||
|
span.badge.badge-warning {{_ 'migration-needed'}}
|
||||||
|
else
|
||||||
|
span.badge.badge-success {{_ 'migration-complete'}}
|
||||||
|
|
||||||
|
.migration-item
|
||||||
|
a.js-run-migration(data-migration="fixMissingLists")
|
||||||
|
.migration-name
|
||||||
|
| {{_ 'fix-missing-lists-migration'}}
|
||||||
|
.migration-status
|
||||||
|
if fixMissingListsNeeded
|
||||||
|
span.badge.badge-warning {{_ 'migration-needed'}}
|
||||||
|
else
|
||||||
|
span.badge.badge-success {{_ 'migration-complete'}}
|
||||||
|
|
||||||
|
.migration-item
|
||||||
|
a.js-run-migration(data-migration="deleteDuplicateEmptyLists")
|
||||||
|
.migration-name
|
||||||
|
| {{_ 'delete-duplicate-empty-lists-migration'}}
|
||||||
|
.migration-status
|
||||||
|
if deleteDuplicateEmptyListsNeeded
|
||||||
|
span.badge.badge-warning {{_ 'migration-needed'}}
|
||||||
|
else
|
||||||
|
span.badge.badge-success {{_ 'migration-complete'}}
|
||||||
|
|
||||||
|
.migration-item
|
||||||
|
a.js-run-migration(data-migration="restoreLostCards")
|
||||||
|
.migration-name
|
||||||
|
| {{_ 'restore-lost-cards-migration'}}
|
||||||
|
.migration-status
|
||||||
|
if restoreLostCardsNeeded
|
||||||
|
span.badge.badge-warning {{_ 'migration-needed'}}
|
||||||
|
else
|
||||||
|
span.badge.badge-success {{_ 'migration-complete'}}
|
||||||
|
|
||||||
|
.migration-item
|
||||||
|
a.js-run-migration(data-migration="restoreAllArchived")
|
||||||
|
.migration-name
|
||||||
|
| {{_ 'restore-all-archived-migration'}}
|
||||||
|
.migration-status
|
||||||
|
if restoreAllArchivedNeeded
|
||||||
|
span.badge.badge-warning {{_ 'migration-needed'}}
|
||||||
|
else
|
||||||
|
span.badge.badge-success {{_ 'migration-complete'}}
|
||||||
|
|
||||||
|
.migration-item
|
||||||
|
a.js-run-migration(data-migration="fixAvatarUrls")
|
||||||
|
.migration-name
|
||||||
|
| {{_ 'fix-avatar-urls-migration'}}
|
||||||
|
.migration-status
|
||||||
|
if fixAvatarUrlsNeeded
|
||||||
|
span.badge.badge-warning {{_ 'migration-needed'}}
|
||||||
|
else
|
||||||
|
span.badge.badge-success {{_ 'migration-complete'}}
|
||||||
|
|
||||||
|
.migration-item
|
||||||
|
a.js-run-migration(data-migration="fixAllFileUrls")
|
||||||
|
.migration-name
|
||||||
|
| {{_ 'fix-all-file-urls-migration'}}
|
||||||
|
.migration-status
|
||||||
|
if fixAllFileUrlsNeeded
|
||||||
|
span.badge.badge-warning {{_ 'migration-needed'}}
|
||||||
|
else
|
||||||
|
span.badge.badge-success {{_ 'migration-complete'}}
|
||||||
|
else
|
||||||
|
p.quiet {{_ 'migrations-admin-only'}}
|
||||||
|
|
||||||
|
template(name='runComprehensiveMigrationPopup')
|
||||||
|
p {{_ 'run-comprehensive-migration-confirm'}}
|
||||||
|
button.js-confirm.primary.full(type="submit") {{_ 'run-migration'}}
|
||||||
|
|
||||||
|
template(name='runFixMissingListsMigrationPopup')
|
||||||
|
p {{_ 'run-fix-missing-lists-migration-confirm'}}
|
||||||
|
button.js-confirm.primary.full(type="submit") {{_ 'run-migration'}}
|
||||||
|
|
||||||
|
template(name='runDeleteDuplicateEmptyListsMigrationPopup')
|
||||||
|
p {{_ 'run-delete-duplicate-empty-lists-migration-confirm'}}
|
||||||
|
button.js-confirm.primary.full(type="submit") {{_ 'run-migration'}}
|
||||||
|
|
||||||
|
template(name='runRestoreLostCardsMigrationPopup')
|
||||||
|
p {{_ 'run-restore-lost-cards-migration-confirm'}}
|
||||||
|
button.js-confirm.primary.full(type="submit") {{_ 'run-migration'}}
|
||||||
|
|
||||||
|
template(name='runRestoreAllArchivedMigrationPopup')
|
||||||
|
p {{_ 'run-restore-all-archived-migration-confirm'}}
|
||||||
|
button.js-confirm.primary.full(type="submit") {{_ 'run-migration'}}
|
||||||
|
|
||||||
|
template(name='runFixAvatarUrlsMigrationPopup')
|
||||||
|
p {{_ 'run-fix-avatar-urls-migration-confirm'}}
|
||||||
|
button.js-confirm.primary.full(type="submit") {{_ 'run-migration'}}
|
||||||
|
|
||||||
|
template(name='runFixAllFileUrlsMigrationPopup')
|
||||||
|
p {{_ 'run-fix-all-file-urls-migration-confirm'}}
|
||||||
|
button.js-confirm.primary.full(type="submit") {{_ 'run-migration'}}
|
||||||
341
client/components/sidebar/sidebarMigrations.js
Normal file
341
client/components/sidebar/sidebarMigrations.js
Normal file
|
|
@ -0,0 +1,341 @@
|
||||||
|
import { ReactiveCache } from '/imports/reactiveCache';
|
||||||
|
import { TAPi18n } from '/imports/i18n';
|
||||||
|
import { migrationProgressManager } from '/client/components/migrationProgress';
|
||||||
|
|
||||||
|
BlazeComponent.extendComponent({
|
||||||
|
onCreated() {
|
||||||
|
this.migrationStatuses = new ReactiveVar({});
|
||||||
|
this.loadMigrationStatuses();
|
||||||
|
},
|
||||||
|
|
||||||
|
loadMigrationStatuses() {
|
||||||
|
const boardId = Session.get('currentBoard');
|
||||||
|
if (!boardId) return;
|
||||||
|
|
||||||
|
// Check comprehensive migration
|
||||||
|
Meteor.call('comprehensiveBoardMigration.needsMigration', boardId, (err, res) => {
|
||||||
|
if (!err) {
|
||||||
|
const statuses = this.migrationStatuses.get();
|
||||||
|
statuses.comprehensive = res;
|
||||||
|
this.migrationStatuses.set(statuses);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check fix missing lists migration
|
||||||
|
Meteor.call('fixMissingListsMigration.needsMigration', boardId, (err, res) => {
|
||||||
|
if (!err) {
|
||||||
|
const statuses = this.migrationStatuses.get();
|
||||||
|
statuses.fixMissingLists = res;
|
||||||
|
this.migrationStatuses.set(statuses);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check delete duplicate empty lists migration
|
||||||
|
Meteor.call('deleteDuplicateEmptyLists.needsMigration', boardId, (err, res) => {
|
||||||
|
if (!err) {
|
||||||
|
const statuses = this.migrationStatuses.get();
|
||||||
|
statuses.deleteDuplicateEmptyLists = res;
|
||||||
|
this.migrationStatuses.set(statuses);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check restore lost cards migration
|
||||||
|
Meteor.call('restoreLostCards.needsMigration', boardId, (err, res) => {
|
||||||
|
if (!err) {
|
||||||
|
const statuses = this.migrationStatuses.get();
|
||||||
|
statuses.restoreLostCards = res;
|
||||||
|
this.migrationStatuses.set(statuses);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check restore all archived migration
|
||||||
|
Meteor.call('restoreAllArchived.needsMigration', boardId, (err, res) => {
|
||||||
|
if (!err) {
|
||||||
|
const statuses = this.migrationStatuses.get();
|
||||||
|
statuses.restoreAllArchived = res;
|
||||||
|
this.migrationStatuses.set(statuses);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check fix avatar URLs migration (board-specific)
|
||||||
|
Meteor.call('fixAvatarUrls.needsMigration', boardId, (err, res) => {
|
||||||
|
if (!err) {
|
||||||
|
const statuses = this.migrationStatuses.get();
|
||||||
|
statuses.fixAvatarUrls = res;
|
||||||
|
this.migrationStatuses.set(statuses);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check fix all file URLs migration (board-specific)
|
||||||
|
Meteor.call('fixAllFileUrls.needsMigration', boardId, (err, res) => {
|
||||||
|
if (!err) {
|
||||||
|
const statuses = this.migrationStatuses.get();
|
||||||
|
statuses.fixAllFileUrls = res;
|
||||||
|
this.migrationStatuses.set(statuses);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
comprehensiveMigrationNeeded() {
|
||||||
|
return this.migrationStatuses.get().comprehensive === true;
|
||||||
|
},
|
||||||
|
|
||||||
|
fixMissingListsNeeded() {
|
||||||
|
return this.migrationStatuses.get().fixMissingLists === true;
|
||||||
|
},
|
||||||
|
|
||||||
|
deleteDuplicateEmptyListsNeeded() {
|
||||||
|
return this.migrationStatuses.get().deleteDuplicateEmptyLists === true;
|
||||||
|
},
|
||||||
|
|
||||||
|
restoreLostCardsNeeded() {
|
||||||
|
return this.migrationStatuses.get().restoreLostCards === true;
|
||||||
|
},
|
||||||
|
|
||||||
|
restoreAllArchivedNeeded() {
|
||||||
|
return this.migrationStatuses.get().restoreAllArchived === true;
|
||||||
|
},
|
||||||
|
|
||||||
|
fixAvatarUrlsNeeded() {
|
||||||
|
return this.migrationStatuses.get().fixAvatarUrls === true;
|
||||||
|
},
|
||||||
|
|
||||||
|
fixAllFileUrlsNeeded() {
|
||||||
|
return this.migrationStatuses.get().fixAllFileUrls === true;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Simulate migration progress updates using the global progress popup
|
||||||
|
async simulateMigrationProgress(progressSteps) {
|
||||||
|
const totalSteps = progressSteps.length;
|
||||||
|
for (let i = 0; i < progressSteps.length; i++) {
|
||||||
|
const step = progressSteps[i];
|
||||||
|
const overall = Math.round(((i + 1) / totalSteps) * 100);
|
||||||
|
|
||||||
|
// Start step
|
||||||
|
migrationProgressManager.updateProgress({
|
||||||
|
overallProgress: overall,
|
||||||
|
currentStep: i + 1,
|
||||||
|
totalSteps,
|
||||||
|
stepName: step.step,
|
||||||
|
stepProgress: 0,
|
||||||
|
stepStatus: `Starting ${step.name}...`,
|
||||||
|
stepDetails: null,
|
||||||
|
boardId: Session.get('currentBoard'),
|
||||||
|
});
|
||||||
|
|
||||||
|
const stepDuration = step.duration;
|
||||||
|
const updateInterval = 100;
|
||||||
|
const totalUpdates = Math.max(1, Math.floor(stepDuration / updateInterval));
|
||||||
|
for (let j = 0; j < totalUpdates; j++) {
|
||||||
|
const per = Math.round(((j + 1) / totalUpdates) * 100);
|
||||||
|
migrationProgressManager.updateProgress({
|
||||||
|
overallProgress: overall,
|
||||||
|
currentStep: i + 1,
|
||||||
|
totalSteps,
|
||||||
|
stepName: step.step,
|
||||||
|
stepProgress: per,
|
||||||
|
stepStatus: `Processing ${step.name}...`,
|
||||||
|
stepDetails: { progress: `${per}%` },
|
||||||
|
boardId: Session.get('currentBoard'),
|
||||||
|
});
|
||||||
|
// eslint-disable-next-line no-await-in-loop
|
||||||
|
await new Promise((r) => setTimeout(r, updateInterval));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Complete step
|
||||||
|
migrationProgressManager.updateProgress({
|
||||||
|
overallProgress: overall,
|
||||||
|
currentStep: i + 1,
|
||||||
|
totalSteps,
|
||||||
|
stepName: step.step,
|
||||||
|
stepProgress: 100,
|
||||||
|
stepStatus: `${step.name} completed`,
|
||||||
|
stepDetails: { status: 'completed' },
|
||||||
|
boardId: Session.get('currentBoard'),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
runMigration(migrationType) {
|
||||||
|
const boardId = Session.get('currentBoard');
|
||||||
|
|
||||||
|
let methodName;
|
||||||
|
let methodArgs = [];
|
||||||
|
|
||||||
|
switch (migrationType) {
|
||||||
|
case 'comprehensive':
|
||||||
|
methodName = 'comprehensiveBoardMigration.execute';
|
||||||
|
methodArgs = [boardId];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'fixMissingLists':
|
||||||
|
methodName = 'fixMissingListsMigration.execute';
|
||||||
|
methodArgs = [boardId];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'deleteDuplicateEmptyLists':
|
||||||
|
methodName = 'deleteDuplicateEmptyLists.execute';
|
||||||
|
methodArgs = [boardId];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'restoreLostCards':
|
||||||
|
methodName = 'restoreLostCards.execute';
|
||||||
|
methodArgs = [boardId];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'restoreAllArchived':
|
||||||
|
methodName = 'restoreAllArchived.execute';
|
||||||
|
methodArgs = [boardId];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'fixAvatarUrls':
|
||||||
|
methodName = 'fixAvatarUrls.execute';
|
||||||
|
methodArgs = [boardId];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'fixAllFileUrls':
|
||||||
|
methodName = 'fixAllFileUrls.execute';
|
||||||
|
methodArgs = [boardId];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (methodName) {
|
||||||
|
// Define simulated steps per migration type
|
||||||
|
const stepsByType = {
|
||||||
|
comprehensive: [
|
||||||
|
{ step: 'analyze_board_structure', name: 'Analyze Board Structure', duration: 800 },
|
||||||
|
{ step: 'fix_orphaned_cards', name: 'Fix Orphaned Cards', duration: 1200 },
|
||||||
|
{ step: 'convert_shared_lists', name: 'Convert Shared Lists', duration: 1000 },
|
||||||
|
{ step: 'ensure_per_swimlane_lists', name: 'Ensure Per-Swimlane Lists', duration: 800 },
|
||||||
|
{ step: 'validate_migration', name: 'Validate Migration', duration: 800 },
|
||||||
|
{ step: 'fix_avatar_urls', name: 'Fix Avatar URLs', duration: 600 },
|
||||||
|
{ step: 'fix_attachment_urls', name: 'Fix Attachment URLs', duration: 600 },
|
||||||
|
],
|
||||||
|
fixMissingLists: [
|
||||||
|
{ step: 'analyze_lists', name: 'Analyze Lists', duration: 600 },
|
||||||
|
{ step: 'create_missing_lists', name: 'Create Missing Lists', duration: 900 },
|
||||||
|
{ step: 'update_cards', name: 'Update Cards', duration: 900 },
|
||||||
|
{ step: 'finalize', name: 'Finalize', duration: 400 },
|
||||||
|
],
|
||||||
|
deleteDuplicateEmptyLists: [
|
||||||
|
{ step: 'convert_shared_lists', name: 'Convert Shared Lists', duration: 700 },
|
||||||
|
{ step: 'delete_duplicate_empty_lists', name: 'Delete Duplicate Empty Lists', duration: 800 },
|
||||||
|
],
|
||||||
|
restoreLostCards: [
|
||||||
|
{ step: 'ensure_lost_cards_swimlane', name: 'Ensure Lost Cards Swimlane', duration: 600 },
|
||||||
|
{ step: 'restore_lists', name: 'Restore Lists', duration: 800 },
|
||||||
|
{ step: 'restore_cards', name: 'Restore Cards', duration: 1000 },
|
||||||
|
],
|
||||||
|
restoreAllArchived: [
|
||||||
|
{ step: 'restore_swimlanes', name: 'Restore Swimlanes', duration: 800 },
|
||||||
|
{ step: 'restore_lists', name: 'Restore Lists', duration: 900 },
|
||||||
|
{ step: 'restore_cards', name: 'Restore Cards', duration: 1000 },
|
||||||
|
{ step: 'fix_missing_ids', name: 'Fix Missing IDs', duration: 600 },
|
||||||
|
],
|
||||||
|
fixAvatarUrls: [
|
||||||
|
{ step: 'scan_users', name: 'Checking board member avatars', duration: 500 },
|
||||||
|
{ step: 'fix_urls', name: 'Fixing avatar URLs', duration: 900 },
|
||||||
|
],
|
||||||
|
fixAllFileUrls: [
|
||||||
|
{ step: 'scan_files', name: 'Checking board file attachments', duration: 600 },
|
||||||
|
{ step: 'fix_urls', name: 'Fixing file URLs', duration: 1000 },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
const steps = stepsByType[migrationType] || [
|
||||||
|
{ step: 'running', name: 'Running Migration', duration: 1000 },
|
||||||
|
];
|
||||||
|
|
||||||
|
// Kick off popup and simulated progress
|
||||||
|
migrationProgressManager.startMigration();
|
||||||
|
const progressPromise = this.simulateMigrationProgress(steps);
|
||||||
|
|
||||||
|
// Start migration call
|
||||||
|
const callPromise = new Promise((resolve, reject) => {
|
||||||
|
Meteor.call(methodName, ...methodArgs, (err, result) => {
|
||||||
|
if (err) return reject(err);
|
||||||
|
return resolve(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
Promise.allSettled([callPromise, progressPromise]).then(([callRes]) => {
|
||||||
|
if (callRes.status === 'rejected') {
|
||||||
|
migrationProgressManager.failMigration(callRes.reason);
|
||||||
|
} else {
|
||||||
|
const result = callRes.value;
|
||||||
|
// Summarize result details in the popup
|
||||||
|
let summary = {};
|
||||||
|
if (result && result.results) {
|
||||||
|
// Comprehensive returns {success, results}
|
||||||
|
const r = result.results;
|
||||||
|
summary = {
|
||||||
|
totalCardsProcessed: r.totalCardsProcessed,
|
||||||
|
totalListsProcessed: r.totalListsProcessed,
|
||||||
|
totalListsCreated: r.totalListsCreated,
|
||||||
|
};
|
||||||
|
} else if (result && result.changes) {
|
||||||
|
// Many migrations return a changes string array
|
||||||
|
summary = { changes: result.changes.join(' | ') };
|
||||||
|
} else if (result && typeof result === 'object') {
|
||||||
|
summary = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
migrationProgressManager.updateProgress({
|
||||||
|
overallProgress: 100,
|
||||||
|
currentStep: steps.length,
|
||||||
|
totalSteps: steps.length,
|
||||||
|
stepName: 'completed',
|
||||||
|
stepProgress: 100,
|
||||||
|
stepStatus: 'Migration completed',
|
||||||
|
stepDetails: summary,
|
||||||
|
boardId: Session.get('currentBoard'),
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationProgressManager.completeMigration();
|
||||||
|
|
||||||
|
// Refresh status badges slightly after
|
||||||
|
Meteor.setTimeout(() => {
|
||||||
|
this.loadMigrationStatuses();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
events() {
|
||||||
|
const self = this; // Capture component reference
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
'click .js-run-migration[data-migration="comprehensive"]': Popup.afterConfirm('runComprehensiveMigration', function() {
|
||||||
|
self.runMigration('comprehensive');
|
||||||
|
Popup.back();
|
||||||
|
}),
|
||||||
|
'click .js-run-migration[data-migration="fixMissingLists"]': Popup.afterConfirm('runFixMissingListsMigration', function() {
|
||||||
|
self.runMigration('fixMissingLists');
|
||||||
|
Popup.back();
|
||||||
|
}),
|
||||||
|
'click .js-run-migration[data-migration="deleteDuplicateEmptyLists"]': Popup.afterConfirm('runDeleteDuplicateEmptyListsMigration', function() {
|
||||||
|
self.runMigration('deleteDuplicateEmptyLists');
|
||||||
|
Popup.back();
|
||||||
|
}),
|
||||||
|
'click .js-run-migration[data-migration="restoreLostCards"]': Popup.afterConfirm('runRestoreLostCardsMigration', function() {
|
||||||
|
self.runMigration('restoreLostCards');
|
||||||
|
Popup.back();
|
||||||
|
}),
|
||||||
|
'click .js-run-migration[data-migration="restoreAllArchived"]': Popup.afterConfirm('runRestoreAllArchivedMigration', function() {
|
||||||
|
self.runMigration('restoreAllArchived');
|
||||||
|
Popup.back();
|
||||||
|
}),
|
||||||
|
'click .js-run-migration[data-migration="fixAvatarUrls"]': Popup.afterConfirm('runFixAvatarUrlsMigration', function() {
|
||||||
|
self.runMigration('fixAvatarUrls');
|
||||||
|
Popup.back();
|
||||||
|
}),
|
||||||
|
'click .js-run-migration[data-migration="fixAllFileUrls"]': Popup.afterConfirm('runFixAllFileUrlsMigration', function() {
|
||||||
|
self.runMigration('fixAllFileUrls');
|
||||||
|
Popup.back();
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
}).register('migrationsSidebar');
|
||||||
|
|
@ -25,25 +25,26 @@ template(name="swimlaneFixedHeader")
|
||||||
.swimlane-header-menu
|
.swimlane-header-menu
|
||||||
if currentUser
|
if currentUser
|
||||||
unless currentUser.isCommentOnly
|
unless currentUser.isCommentOnly
|
||||||
a.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
|
unless currentUser.isWorker
|
||||||
| ➕
|
a.js-open-add-swimlane-menu.swimlane-header-plus-icon(title="{{_ 'add-swimlane'}}")
|
||||||
a.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}")
|
| ➕
|
||||||
| ☰
|
a.js-open-swimlane-menu(title="{{_ 'swimlaneActionPopup-title'}}")
|
||||||
//// TODO: Collapse Swimlane: make button working, etc.
|
| ☰
|
||||||
//unless collapsed
|
//// TODO: Collapse Swimlane: make button working, etc.
|
||||||
// a.js-collapse-swimlane(title="{{_ 'collapse'}}")
|
//unless collapsed
|
||||||
// i.fa.fa-arrow-down.swimlane-header-collapse-down
|
// a.js-collapse-swimlane(title="{{_ 'collapse'}}")
|
||||||
// ⬆️.swimlane-header-collapse-up
|
// i.fa.fa-arrow-down.swimlane-header-collapse-down
|
||||||
//if collapsed
|
// ⬆️.swimlane-header-collapse-up
|
||||||
// a.js-collapse-swimlane(title="{{_ 'uncollapse'}}")
|
//if collapsed
|
||||||
// ⬆️.swimlane-header-collapse-up
|
// a.js-collapse-swimlane(title="{{_ 'uncollapse'}}")
|
||||||
// i.fa.fa-arrow-down.swimlane-header-collapse-down
|
// ⬆️.swimlane-header-collapse-up
|
||||||
unless isTouchScreen
|
// i.fa.fa-arrow-down.swimlane-header-collapse-down
|
||||||
a.swimlane-header-handle.handle.js-swimlane-header-handle
|
unless isTouchScreen
|
||||||
| ↕️
|
a.swimlane-header-handle.handle.js-swimlane-header-handle
|
||||||
if isTouchScreen
|
| ↕️
|
||||||
a.swimlane-header-miniscreen-handle.handle.js-swimlane-header-handle
|
if isTouchScreen
|
||||||
| ↕️
|
a.swimlane-header-miniscreen-handle.handle.js-swimlane-header-handle
|
||||||
|
| ↕️
|
||||||
|
|
||||||
template(name="editSwimlaneTitleForm")
|
template(name="editSwimlaneTitleForm")
|
||||||
.list-composer
|
.list-composer
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,6 @@ template(name="headerUserBar")
|
||||||
|
|
||||||
template(name="memberMenuPopup")
|
template(name="memberMenuPopup")
|
||||||
ul.pop-over-list
|
ul.pop-over-list
|
||||||
// Bookmarks at the very top
|
|
||||||
li
|
|
||||||
a.js-open-bookmarks
|
|
||||||
| 🔖
|
|
||||||
| {{_ 'bookmarks'}}
|
|
||||||
with currentUser
|
with currentUser
|
||||||
li
|
li
|
||||||
a.js-my-cards(href="{{pathFor 'my-cards'}}")
|
a.js-my-cards(href="{{pathFor 'my-cards'}}")
|
||||||
|
|
@ -32,6 +27,7 @@ template(name="memberMenuPopup")
|
||||||
| {{_ 'globalSearch-title'}}
|
| {{_ 'globalSearch-title'}}
|
||||||
li
|
li
|
||||||
a(href="{{pathFor 'home'}}")
|
a(href="{{pathFor 'home'}}")
|
||||||
|
| 🏠
|
||||||
| 🏠
|
| 🏠
|
||||||
| {{_ 'all-boards'}}
|
| {{_ 'all-boards'}}
|
||||||
li
|
li
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,10 @@ Blaze.registerHelper('canModifyCard', () =>
|
||||||
Utils.canModifyCard(),
|
Utils.canModifyCard(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Blaze.registerHelper('canMoveCard', () =>
|
||||||
|
Utils.canMoveCard(),
|
||||||
|
);
|
||||||
|
|
||||||
Blaze.registerHelper('canModifyBoard', () =>
|
Blaze.registerHelper('canModifyBoard', () =>
|
||||||
Utils.canModifyBoard(),
|
Utils.canModifyBoard(),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
73
client/lib/boardMultiSelection.js
Normal file
73
client/lib/boardMultiSelection.js
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
import { ReactiveCache } from '/imports/reactiveCache';
|
||||||
|
|
||||||
|
BoardMultiSelection = {
|
||||||
|
_selectedBoards: new ReactiveVar([]),
|
||||||
|
|
||||||
|
_isActive: new ReactiveVar(false),
|
||||||
|
|
||||||
|
reset() {
|
||||||
|
this._selectedBoards.set([]);
|
||||||
|
},
|
||||||
|
|
||||||
|
isActive() {
|
||||||
|
return this._isActive.get();
|
||||||
|
},
|
||||||
|
|
||||||
|
count() {
|
||||||
|
return this._selectedBoards.get().length;
|
||||||
|
},
|
||||||
|
|
||||||
|
isEmpty() {
|
||||||
|
return this.count() === 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
getSelectedBoardIds() {
|
||||||
|
return this._selectedBoards.get();
|
||||||
|
},
|
||||||
|
|
||||||
|
activate() {
|
||||||
|
if (!this.isActive()) {
|
||||||
|
this._isActive.set(true);
|
||||||
|
Tracker.flush();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
if (this.isActive()) {
|
||||||
|
this._isActive.set(false);
|
||||||
|
this.reset();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
add(boardIds) {
|
||||||
|
return this.toggle(boardIds, { add: true, remove: false });
|
||||||
|
},
|
||||||
|
|
||||||
|
remove(boardIds) {
|
||||||
|
return this.toggle(boardIds, { add: false, remove: true });
|
||||||
|
},
|
||||||
|
|
||||||
|
toogle(boardIds) {
|
||||||
|
return this.toggle(boardIds, { add: true, remove: true });
|
||||||
|
},
|
||||||
|
|
||||||
|
toggle(boardIds, { add, remove } = {}) {
|
||||||
|
boardIds = _.isString(boardIds) ? [boardIds] : boardIds;
|
||||||
|
let selectedBoards = this._selectedBoards.get();
|
||||||
|
|
||||||
|
boardIds.forEach(boardId => {
|
||||||
|
const index = selectedBoards.indexOf(boardId);
|
||||||
|
if (index > -1 && remove) {
|
||||||
|
selectedBoards = selectedBoards.filter(id => id !== boardId);
|
||||||
|
} else if (index === -1 && add) {
|
||||||
|
selectedBoards.push(boardId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this._selectedBoards.set(selectedBoards);
|
||||||
|
},
|
||||||
|
|
||||||
|
isSelected(boardId) {
|
||||||
|
return this._selectedBoards.get().includes(boardId);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
@ -1,33 +1,27 @@
|
||||||
import { ReactiveCache } from '/imports/reactiveCache';
|
import { ReactiveCache } from '/imports/reactiveCache';
|
||||||
import { TAPi18n } from '/imports/i18n';
|
import { TAPi18n } from '/imports/i18n';
|
||||||
import {
|
|
||||||
formatDateTime,
|
|
||||||
formatDate,
|
|
||||||
formatDateByUserPreference,
|
|
||||||
formatTime,
|
|
||||||
getISOWeek,
|
|
||||||
isValidDate,
|
|
||||||
isBefore,
|
|
||||||
isAfter,
|
|
||||||
isSame,
|
|
||||||
add,
|
|
||||||
subtract,
|
|
||||||
startOf,
|
|
||||||
endOf,
|
|
||||||
format,
|
|
||||||
parseDate,
|
|
||||||
now,
|
|
||||||
createDate,
|
|
||||||
fromNow,
|
|
||||||
calendar
|
|
||||||
} from '/imports/lib/dateUtils';
|
|
||||||
|
|
||||||
// Helper function to get time format for 24 hours
|
// Helper to check if a date is valid
|
||||||
function adjustedTimeFormat() {
|
function isValidDate(date) {
|
||||||
return 'HH:mm';
|
return date instanceof Date && !isNaN(date);
|
||||||
}
|
}
|
||||||
|
|
||||||
// .replace(/HH/i, 'H');
|
// Format date as YYYY-MM-DD
|
||||||
|
function formatDate(date) {
|
||||||
|
if (!isValidDate(date)) return '';
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||||
|
const day = String(date.getDate()).padStart(2, '0');
|
||||||
|
return `${year}-${month}-${day}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format time as HH:mm
|
||||||
|
function formatTime(date) {
|
||||||
|
if (!isValidDate(date)) return '';
|
||||||
|
const hours = String(date.getHours()).padStart(2, '0');
|
||||||
|
const minutes = String(date.getMinutes()).padStart(2, '0');
|
||||||
|
return `${hours}:${minutes}`;
|
||||||
|
}
|
||||||
|
|
||||||
export class DatePicker extends BlazeComponent {
|
export class DatePicker extends BlazeComponent {
|
||||||
template() {
|
template() {
|
||||||
|
|
@ -51,35 +45,25 @@ export class DatePicker extends BlazeComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
onRendered() {
|
onRendered() {
|
||||||
// Set initial values for text and time inputs
|
// Set initial values for native HTML inputs
|
||||||
if (isValidDate(this.date.get())) {
|
if (isValidDate(this.date.get())) {
|
||||||
const dateInput = this.find('#date');
|
const dateInput = this.find('#date');
|
||||||
const timeInput = this.find('#time');
|
const timeInput = this.find('#time');
|
||||||
|
|
||||||
if (dateInput) {
|
if (dateInput) {
|
||||||
// Use user's preferred format for text input
|
dateInput.value = formatDate(this.date.get());
|
||||||
const currentUser = ReactiveCache.getCurrentUser();
|
|
||||||
const userFormat = currentUser ? currentUser.getDateFormat() : 'YYYY-MM-DD';
|
|
||||||
dateInput.value = formatDateByUserPreference(this.date.get(), userFormat, false);
|
|
||||||
}
|
}
|
||||||
if (timeInput) {
|
if (timeInput && !timeInput.value && this.defaultTime) {
|
||||||
if (!timeInput.value && this.defaultTime) {
|
const defaultDate = new Date(this.defaultTime);
|
||||||
const defaultDate = new Date(this.defaultTime);
|
timeInput.value = formatTime(defaultDate);
|
||||||
timeInput.value = formatTime(defaultDate);
|
} else if (timeInput && isValidDate(this.date.get())) {
|
||||||
} else if (isValidDate(this.date.get())) {
|
timeInput.value = formatTime(this.date.get());
|
||||||
timeInput.value = formatTime(this.date.get());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
showDate() {
|
showDate() {
|
||||||
if (isValidDate(this.date.get())) {
|
if (isValidDate(this.date.get())) return formatDate(this.date.get());
|
||||||
// Use user's preferred format for display, but HTML date input needs YYYY-MM-DD
|
|
||||||
const currentUser = ReactiveCache.getCurrentUser();
|
|
||||||
const userFormat = currentUser ? currentUser.getDateFormat() : 'YYYY-MM-DD';
|
|
||||||
return formatDateByUserPreference(this.date.get(), userFormat, false);
|
|
||||||
}
|
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
showTime() {
|
showTime() {
|
||||||
|
|
@ -87,56 +71,22 @@ export class DatePicker extends BlazeComponent {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
dateFormat() {
|
dateFormat() {
|
||||||
const currentUser = ReactiveCache.getCurrentUser();
|
return 'YYYY-MM-DD';
|
||||||
const userFormat = currentUser ? currentUser.getDateFormat() : 'YYYY-MM-DD';
|
|
||||||
// Convert format to localized placeholder
|
|
||||||
switch (userFormat) {
|
|
||||||
case 'DD-MM-YYYY':
|
|
||||||
return TAPi18n.__('date-format-dd-mm-yyyy') || 'PP-KK-VVVV';
|
|
||||||
case 'MM-DD-YYYY':
|
|
||||||
return TAPi18n.__('date-format-mm-dd-yyyy') || 'KK-PP-VVVV';
|
|
||||||
case 'YYYY-MM-DD':
|
|
||||||
default:
|
|
||||||
return TAPi18n.__('date-format-yyyy-mm-dd') || 'VVVV-KK-PP';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
timeFormat() {
|
timeFormat() {
|
||||||
return 'LT';
|
return 'HH:mm';
|
||||||
}
|
}
|
||||||
|
|
||||||
events() {
|
events() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
'change .js-date-field'() {
|
'change .js-date-field'() {
|
||||||
// Text input date validation
|
// Native HTML date input validation
|
||||||
const dateInput = this.find('#date');
|
const dateValue = this.find('#date').value;
|
||||||
if (!dateInput) return;
|
|
||||||
|
|
||||||
const dateValue = dateInput.value;
|
|
||||||
if (dateValue) {
|
if (dateValue) {
|
||||||
// Try to parse different date formats
|
// HTML date input format is always YYYY-MM-DD
|
||||||
const formats = [
|
const dateObj = new Date(dateValue + 'T12:00:00');
|
||||||
'YYYY-MM-DD',
|
if (isValidDate(dateObj)) {
|
||||||
'DD-MM-YYYY',
|
|
||||||
'MM-DD-YYYY',
|
|
||||||
'DD/MM/YYYY',
|
|
||||||
'MM/DD/YYYY',
|
|
||||||
'DD.MM.YYYY',
|
|
||||||
'MM.DD.YYYY'
|
|
||||||
];
|
|
||||||
|
|
||||||
let parsedDate = null;
|
|
||||||
for (const format of formats) {
|
|
||||||
parsedDate = parseDate(dateValue, [format], true);
|
|
||||||
if (parsedDate) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fallback to native Date parsing
|
|
||||||
if (!parsedDate) {
|
|
||||||
parsedDate = new Date(dateValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isValidDate(parsedDate)) {
|
|
||||||
this.error.set('');
|
this.error.set('');
|
||||||
} else {
|
} else {
|
||||||
this.error.set('invalid-date');
|
this.error.set('invalid-date');
|
||||||
|
|
@ -145,12 +95,10 @@ export class DatePicker extends BlazeComponent {
|
||||||
},
|
},
|
||||||
'change .js-time-field'() {
|
'change .js-time-field'() {
|
||||||
// Native HTML time input validation
|
// Native HTML time input validation
|
||||||
const timeInput = this.find('#time');
|
const timeValue = this.find('#time').value;
|
||||||
if (!timeInput) return;
|
|
||||||
|
|
||||||
const timeValue = timeInput.value;
|
|
||||||
if (timeValue) {
|
if (timeValue) {
|
||||||
const timeObj = new Date(`1970-01-01T${timeValue}`);
|
// HTML time input format is always HH:mm
|
||||||
|
const timeObj = new Date(`1970-01-01T${timeValue}:00`);
|
||||||
if (isValidDate(timeObj)) {
|
if (isValidDate(timeObj)) {
|
||||||
this.error.set('');
|
this.error.set('');
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -170,44 +118,16 @@ export class DatePicker extends BlazeComponent {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to parse different date formats
|
// Combine date and time: HTML date input is YYYY-MM-DD, time input is HH:mm
|
||||||
const formats = [
|
const dateTimeString = `${dateValue}T${timeValue}:00`;
|
||||||
'YYYY-MM-DD',
|
const newCompleteDate = new Date(dateTimeString);
|
||||||
'DD-MM-YYYY',
|
|
||||||
'MM-DD-YYYY',
|
|
||||||
'DD/MM/YYYY',
|
|
||||||
'MM/DD/YYYY',
|
|
||||||
'DD.MM.YYYY',
|
|
||||||
'MM.DD.YYYY'
|
|
||||||
];
|
|
||||||
|
|
||||||
let parsedDate = null;
|
if (!isValidDate(newCompleteDate)) {
|
||||||
for (const format of formats) {
|
|
||||||
parsedDate = parseDate(dateValue, [format], true);
|
|
||||||
if (parsedDate) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fallback to native Date parsing
|
|
||||||
if (!parsedDate) {
|
|
||||||
parsedDate = new Date(dateValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isValidDate(parsedDate)) {
|
|
||||||
this.error.set('invalid');
|
this.error.set('invalid');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Combine with time
|
this._storeDate(newCompleteDate);
|
||||||
const timeObj = new Date(`1970-01-01T${timeValue}`);
|
|
||||||
if (!isValidDate(timeObj)) {
|
|
||||||
this.error.set('invalid-time');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the time on the parsed date
|
|
||||||
parsedDate.setHours(timeObj.getHours(), timeObj.getMinutes(), 0, 0);
|
|
||||||
|
|
||||||
this._storeDate(parsedDate);
|
|
||||||
Popup.back();
|
Popup.back();
|
||||||
},
|
},
|
||||||
'click .js-delete-date'(evt) {
|
'click .js-delete-date'(evt) {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import DOMPurify from 'dompurify';
|
||||||
export function getSecureDOMPurifyConfig() {
|
export function getSecureDOMPurifyConfig() {
|
||||||
return {
|
return {
|
||||||
// Allow common markdown elements including anchor tags
|
// Allow common markdown elements including anchor tags
|
||||||
ALLOWED_TAGS: ['a', 'p', 'br', 'strong', 'em', 'u', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'img', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'hr', 'div', 'span'],
|
ALLOWED_TAGS: ['a', 'p', 'br', 'strong', 'em', 'u', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'img', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'hr', 'div', 'span', 's'],
|
||||||
// Allow safe attributes including href for anchor tags
|
// Allow safe attributes including href for anchor tags
|
||||||
ALLOWED_ATTR: ['href', 'title', 'alt', 'src', 'width', 'height', 'target', 'rel'],
|
ALLOWED_ATTR: ['href', 'title', 'alt', 'src', 'width', 'height', 'target', 'rel'],
|
||||||
// Allow safe protocols for links
|
// Allow safe protocols for links
|
||||||
|
|
@ -44,7 +44,7 @@ export function getSecureDOMPurifyConfig() {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Additional check for base64 encoded SVG with script tags
|
// Additional check for base64 encoded SVG with script tags
|
||||||
if (src.startsWith('data:image/svg+xml;base64,')) {
|
if (src.startsWith('data:image/svg+xml;base64,')) {
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -214,6 +214,15 @@ Utils = {
|
||||||
);
|
);
|
||||||
return ret;
|
return ret;
|
||||||
},
|
},
|
||||||
|
canMoveCard() {
|
||||||
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
|
const ret = (
|
||||||
|
currentUser &&
|
||||||
|
currentUser.isBoardMember() &&
|
||||||
|
!currentUser.isCommentOnly()
|
||||||
|
);
|
||||||
|
return ret;
|
||||||
|
},
|
||||||
canModifyBoard() {
|
canModifyBoard() {
|
||||||
const currentUser = ReactiveCache.getCurrentUser();
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
const ret = (
|
const ret = (
|
||||||
|
|
@ -231,9 +240,21 @@ Utils = {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
},
|
},
|
||||||
setBoardView(view) {
|
setBoardView(view) {
|
||||||
currentUser = ReactiveCache.getCurrentUser();
|
const currentUser = ReactiveCache.getCurrentUser();
|
||||||
|
|
||||||
if (currentUser) {
|
if (currentUser) {
|
||||||
ReactiveCache.getCurrentUser().setBoardView(view);
|
// Update localStorage first
|
||||||
|
window.localStorage.setItem('boardView', view);
|
||||||
|
|
||||||
|
// Update user profile via Meteor method
|
||||||
|
Meteor.call('setBoardView', view, (error) => {
|
||||||
|
if (error) {
|
||||||
|
console.error('[setBoardView] Update failed:', error);
|
||||||
|
} else {
|
||||||
|
// Reload to apply the view change
|
||||||
|
Utils.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else if (view === 'board-view-swimlanes') {
|
} else if (view === 'board-view-swimlanes') {
|
||||||
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
|
window.localStorage.setItem('boardView', 'board-view-swimlanes'); //true
|
||||||
Utils.reload();
|
Utils.reload();
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
[Sandstorm](Sandstorm) - [Sandstorm Backup](Export-from-Wekan-Sandstorm-grain-.zip-file)
|
[Sandstorm](Sandstorm) - [Sandstorm Backup](Export-from-Wekan-Sandstorm-grain-.zip-file)
|
||||||
|
|
||||||
# Upcoming
|
# Related
|
||||||
|
|
||||||
[Transferring to Minio and SQLite](https://github.com/wekan/minio-metadata)
|
[Transferring attachments from MongoDB to filesystem, and text from MongoDB to SQLite](https://github.com/wekan/minio-metadata)
|
||||||
|
|
||||||
# Backup Docker
|
# Backup Docker
|
||||||
|
|
||||||
[Also see: Upgrading Synology with Wekan quay images](https://github.com/wekan/wekan/issues/3874#issuecomment-867526249)
|
[Also see: Upgrading Synology with Wekan quay images](https://github.com/wekan/wekan/issues/3874#issuecomment-867526249)
|
||||||
|
|
||||||
Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/.
|
Note: Do not run `docker compose down` because it could delete data. https://docs.docker.com/compose/reference/down/
|
||||||
|
|
||||||
[docker-compose.yml](https://raw.githubusercontent.com/wekan/wekan/master/docker-compose.yml)
|
[docker-compose.yml](https://raw.githubusercontent.com/wekan/wekan/master/docker-compose.yml)
|
||||||
|
|
||||||
This presumes your Wekan Docker is currently running with:
|
This presumes your Wekan Docker is currently running with:
|
||||||
```bash
|
```bash
|
||||||
docker-compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
Backup to directory dump:
|
Backup to directory dump:
|
||||||
```bash
|
```bash
|
||||||
|
|
@ -36,23 +36,20 @@ docker start wekan-app
|
||||||
```
|
```
|
||||||
# Upgrade Docker Wekan version
|
# Upgrade Docker Wekan version
|
||||||
|
|
||||||
## Newest info
|
1. Check that you use newest [docker-compose.yml](https://raw.githubusercontent.com/wekan/wekan/refs/heads/main/docker-compose.yml)
|
||||||
|
that has for example: `image: ghcr.io/wekan/wekan:latest` . If you have old docker-compose.yml, copy it's settings like ROOT_URL to newest docker-compose.yml.
|
||||||
|
|
||||||
https://github.com/wekan/wekan/discussions/5367
|
|
||||||
|
|
||||||
## Old info
|
|
||||||
|
|
||||||
Note: Do not run `docker-compose down` without verifying your docker-compose file, it does not delete the data by default but caution is advised. Refer to https://docs.docker.com/compose/reference/down/.
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose stop
|
docker compose stop
|
||||||
docker rm wekan-app
|
docker rm wekan-app
|
||||||
|
docker compose up -d
|
||||||
```
|
```
|
||||||
a) For example, if you in docker-compose.yml use `image: wekanteam/wekan` or `image: quay.io/wekan/wekan` for latest development version
|
2. If you are migrating from Snap to Docker, if there is files at `/var/snap/wekan/common/files` , copy that directory to be at
|
||||||
|
docker-compose.yml setting path, for example `export WRITABLE_PATH=/data` , copy files directory to be at `/data/files`
|
||||||
|
with same user:group directory recursive permissions that directory data has, for example: `sudo chown -R user:group data`
|
||||||
|
|
||||||
b) Or in docker-compose.yml change version tag, or use version tag like `image: wekanteam/wekan:v5.50` or `image: quay.io/wekan/wekan:v5.50`
|
3. When you open board, if cards or attachments are not visible, click right sidebar / Board Settings / Migrations.
|
||||||
```bash
|
From there, run most migrations, but not migration about `Restore all from archive`, because it would unarchive cards etc from archive.
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
# Backup Wekan Snap to directory dump
|
# Backup Wekan Snap to directory dump
|
||||||
```bash
|
```bash
|
||||||
|
|
@ -89,6 +86,73 @@ mongorestore --drop --port 27019
|
||||||
sudo snap start wekan.wekan
|
sudo snap start wekan.wekan
|
||||||
./snap-settings.sh
|
./snap-settings.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Upgrade WeKan Snap Stable 6.x to newest WeKan Snap Candidate
|
||||||
|
|
||||||
|
1. Check that you have enough disk space: `df -h` . Also check size of your data: `sudo du -sh /var/snap/wekan/common` .
|
||||||
|
2. [Backup Snap](#backup-wekan-snap-to-directory-dump)
|
||||||
|
3. Move WeKan database common directory content elsewhere:
|
||||||
|
```
|
||||||
|
sudo su
|
||||||
|
snap stop wekan
|
||||||
|
mkdir /root/common
|
||||||
|
mv /var/snap/wekan/common/* /root/common/
|
||||||
|
```
|
||||||
|
4. Change Snap Stable to Snap Candidate:
|
||||||
|
```
|
||||||
|
sudo snap refresh wekan --channel=latest/candidate --amend
|
||||||
|
```
|
||||||
|
5. [Restore Snap](#restore-wekan-snap)
|
||||||
|
6. Copy back files directory, if it is there: `sudo cp -pR /root/common/files /var/snap/wekan/common/`
|
||||||
|
7. If you use [Caddy](https://github.com/wekan/wekan/blob/main/docs/Webserver/Caddy.md), that is included in WeKan, edit /var/snap/wekan/Caddyfile to new syntax:
|
||||||
|
```
|
||||||
|
wekan.yourcompany.com {
|
||||||
|
tls {
|
||||||
|
load /etc/caddy/certs
|
||||||
|
alpn http/1.1
|
||||||
|
}
|
||||||
|
reverse_proxy 127.0.0.1:2000
|
||||||
|
}
|
||||||
|
```
|
||||||
|
This is if you have WeKan Node.js running at port 2000, for example with these settings:
|
||||||
|
```
|
||||||
|
sudo snap set wekan root-url='https://wekan.yourcompany.com'
|
||||||
|
sudo snap set wekan port='2000'
|
||||||
|
sudo snap set wekan caddy-enabled='true'
|
||||||
|
sudo snap enable wekan
|
||||||
|
sudo snap start wekan
|
||||||
|
```
|
||||||
|
You can check is caddy, wekan and mongodb running with:
|
||||||
|
```
|
||||||
|
sudo snap services
|
||||||
|
```
|
||||||
|
If you need to disable WeKan included Caddy, because you have system-wide installed Caddy or other webserver:
|
||||||
|
```
|
||||||
|
sudo snap stop wekan.caddy
|
||||||
|
sudo systemctl disable snap.wekan.caddy
|
||||||
|
sudo systemctl stop snap.wekan.caddy
|
||||||
|
```
|
||||||
|
7. When you open board, if cards or attachments are not visible, click right sidebar / Board Settings / Migrations.
|
||||||
|
From there, run most migrations, but not migration about `Restore all from archive`, because it would unarchive cards etc from archive.
|
||||||
|
|
||||||
|
# If upgrade did not work, going back to WeKan Snap Stable 6.09
|
||||||
|
|
||||||
|
This is only if you have old 6.09 common directory at /root/common .
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo su
|
||||||
|
mkdir /root/common-newest
|
||||||
|
snap stop wekan
|
||||||
|
mv /var/snap/wekan/common/* /root/common-newest/
|
||||||
|
snap start wekan
|
||||||
|
snap refresh wekan --channel=latest/stable --amend
|
||||||
|
snap stop wekan
|
||||||
|
rm -rf /var/snap/wekan/common/*
|
||||||
|
mv /root/common/* /var/snap/wekan/common/
|
||||||
|
snap start wekan
|
||||||
|
./snap-settings.sh
|
||||||
|
```
|
||||||
|
|
||||||
# Upgrade Snap manually immediately (usually it updates automatically)
|
# Upgrade Snap manually immediately (usually it updates automatically)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,2 @@
|
||||||
|
|
||||||
```
|
Upgrade info at [Backup page](Backup.md)
|
||||||
sudo snap stop wekan.wekan
|
|
||||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/wekan/current/lib/x86_64-linux-gnu
|
|
||||||
export PATH2=$PATH
|
|
||||||
export PATH=/snap/wekan/current/bin:$PATH
|
|
||||||
mongodump --port 27019
|
|
||||||
sudo snap get wekan > snap-settings.txt
|
|
||||||
sudo snap stop wekan.mongodb
|
|
||||||
sudo mv /var/snap/wekan/common .
|
|
||||||
sudo mkdir /var/snap/wekan/common
|
|
||||||
sudo snap refresh wekan --channel=latest/candidate
|
|
||||||
```
|
|
||||||
|
|
||||||
To be continued...
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,10 @@ Meteor includes Node.js and MongoDB version, when developing. But if not develop
|
||||||
```
|
```
|
||||||
softwareupdate --install-rosetta --agree-to-license
|
softwareupdate --install-rosetta --agree-to-license
|
||||||
```
|
```
|
||||||
|
Install Homebrew from https://brew.sh, and Homebrew GUI that is very useful:
|
||||||
|
```
|
||||||
|
brew install applite
|
||||||
|
```
|
||||||
2) Clone Wekan:
|
2) Clone Wekan:
|
||||||
```
|
```
|
||||||
git clone https://github.com/wekan/wekan
|
git clone https://github.com/wekan/wekan
|
||||||
|
|
@ -140,4 +144,4 @@ docker-compose up -d --build
|
||||||
Q: Is there file manager, that shows all files and directories that are at directory? Or should I use mc at zsh? For example, if there is directory /Users/username/repos, it is not visible in Finder, until I move it to /Users/username/Downloads/repos
|
Q: Is there file manager, that shows all files and directories that are at directory? Or should I use mc at zsh? For example, if there is directory /Users/username/repos, it is not visible in Finder, until I move it to /Users/username/Downloads/repos
|
||||||
|
|
||||||
A: I just add my home directory to the list of favorites. You can also just go to any directory you want with CMD+Shift+G .
|
A: I just add my home directory to the list of favorites. You can also just go to any directory you want with CMD+Shift+G .
|
||||||
CMD+Shift+Period toggles hidden files on and off
|
CMD+Shift+Period toggles hidden files on and off
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ This is without container (without Docker or Snap).
|
||||||
|
|
||||||
Right click and download files 1-4:
|
Right click and download files 1-4:
|
||||||
|
|
||||||
1. [wekan-8.16-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v8.16/wekan-8.16-amd64-windows.zip)
|
1. [wekan-8.17-amd64-windows.zip](https://github.com/wekan/wekan/releases/download/v8.17/wekan-8.17-amd64-windows.zip)
|
||||||
|
|
||||||
2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe)
|
2. [node.exe](https://nodejs.org/dist/latest-v14.x/win-x64/node.exe)
|
||||||
|
|
||||||
|
|
@ -22,7 +22,7 @@ Right click and download files 1-4:
|
||||||
|
|
||||||
6. Double click `mongodb-windows-x86_64-7.0.25-signed.msi` . In installer, uncheck downloading MongoDB compass.
|
6. Double click `mongodb-windows-x86_64-7.0.25-signed.msi` . In installer, uncheck downloading MongoDB compass.
|
||||||
|
|
||||||
7. Unzip `wekan-8.16-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
|
7. Unzip `wekan-8.17-amd64-windows.zip` , inside it is directory `bundle`, to it copy other files:
|
||||||
|
|
||||||
```
|
```
|
||||||
bundle (directory)
|
bundle (directory)
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "تعليق محذوف %s",
|
"activity-deleteComment": "تعليق محذوف %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "نماذج",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "إضافة مرفق",
|
"add-attachment": "إضافة مرفق",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "إنشاء",
|
"create": "إنشاء",
|
||||||
"createBoardPopup-title": "إنشاء لوحة",
|
"createBoardPopup-title": "إنشاء لوحة",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "استيراد لوحة",
|
"chooseBoardSourcePopup-title": "استيراد لوحة",
|
||||||
"createLabelPopup-title": "إنشاء علامة",
|
"createLabelPopup-title": "إنشاء علامة",
|
||||||
"createCustomField": "انشاء حقل",
|
"createCustomField": "انشاء حقل",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "تفاصيل",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "изтрит коментар %s",
|
"activity-deleteComment": "изтрит коментар %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Шаблони",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Добави прикачен файл",
|
"add-attachment": "Добави прикачен файл",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Създай",
|
"create": "Създай",
|
||||||
"createBoardPopup-title": "Създай Табло",
|
"createBoardPopup-title": "Създай Табло",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Импортирай Табло",
|
"chooseBoardSourcePopup-title": "Импортирай Табло",
|
||||||
"createLabelPopup-title": "Създай Табло",
|
"createLabelPopup-title": "Създай Табло",
|
||||||
"createCustomField": "Създай Поле",
|
"createCustomField": "Създай Поле",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Състояние",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Завършено",
|
"completed": "Завършено",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Krouiñ",
|
"create": "Krouiñ",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "Ha esborrar el comentari %s",
|
"activity-deleteComment": "Ha esborrar el comentari %s",
|
||||||
"activity-receivedDate": "editat la data de recepció a %s de %s",
|
"activity-receivedDate": "editat la data de recepció a %s de %s",
|
||||||
"activity-startDate": "data d'inici editada a %s de %s",
|
"activity-startDate": "data d'inici editada a %s de %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Plantilles",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "data de venciment editada a %s de %s",
|
"activity-dueDate": "data de venciment editada a %s de %s",
|
||||||
"activity-endDate": "data de finalització editada a %s de %s",
|
"activity-endDate": "data de finalització editada a %s de %s",
|
||||||
"add-attachment": "Afegeix adjunt",
|
"add-attachment": "Afegeix adjunt",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Títol de la primera fitxa\", \"description\":\"Descripció de la primera fitxa\"}, {\"title\":\"Títol de la segona fitxa\",\"description\":\"Descripció de la segona fitxa \"},{\"title\":\"Títol de l'última fitxa\",\"description\":\"Descripció de l'última fitxa\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Títol de la primera fitxa\", \"description\":\"Descripció de la primera fitxa\"}, {\"title\":\"Títol de la segona fitxa\",\"description\":\"Descripció de la segona fitxa \"},{\"title\":\"Títol de l'última fitxa\",\"description\":\"Descripció de l'última fitxa\"} ]",
|
||||||
"create": "Crea",
|
"create": "Crea",
|
||||||
"createBoardPopup-title": "Crea tauler",
|
"createBoardPopup-title": "Crea tauler",
|
||||||
|
"createTemplateContainerPopup-title": "Afegeix un Contenidor de plantilles",
|
||||||
"chooseBoardSourcePopup-title": "Importa tauler",
|
"chooseBoardSourcePopup-title": "Importa tauler",
|
||||||
"createLabelPopup-title": "Crea etiqueta",
|
"createLabelPopup-title": "Crea etiqueta",
|
||||||
"createCustomField": "Crear campament",
|
"createCustomField": "Crear campament",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Estat",
|
||||||
|
"migration-progress-details": "Detalls",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completat",
|
"completed": "Completat",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "smazat komentář %s",
|
"activity-deleteComment": "smazat komentář %s",
|
||||||
"activity-receivedDate": "editoval(a) datum přijetí na %s z %s",
|
"activity-receivedDate": "editoval(a) datum přijetí na %s z %s",
|
||||||
"activity-startDate": "editoval(a) datum zahájení na %s z %s",
|
"activity-startDate": "editoval(a) datum zahájení na %s z %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Šablony",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "editoval(a) termín dokončení na %s z %s",
|
"activity-dueDate": "editoval(a) termín dokončení na %s z %s",
|
||||||
"activity-endDate": "editoval(a) datum ukončení na %s z %s",
|
"activity-endDate": "editoval(a) datum ukončení na %s z %s",
|
||||||
"add-attachment": "Přidat přílohu",
|
"add-attachment": "Přidat přílohu",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Nadpis první karty\", \"description\":\"Popis první karty\"}, {\"title\":\"Nadpis druhé karty\",\"description\":\"Popis druhé karty\"},{\"title\":\"Nadpis poslední kary\",\"description\":\"Popis poslední karty\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Nadpis první karty\", \"description\":\"Popis první karty\"}, {\"title\":\"Nadpis druhé karty\",\"description\":\"Popis druhé karty\"},{\"title\":\"Nadpis poslední kary\",\"description\":\"Popis poslední karty\"} ]",
|
||||||
"create": "Vytvořit",
|
"create": "Vytvořit",
|
||||||
"createBoardPopup-title": "Vytvořit tablo",
|
"createBoardPopup-title": "Vytvořit tablo",
|
||||||
|
"createTemplateContainerPopup-title": "Přidat kontejner šablony",
|
||||||
"chooseBoardSourcePopup-title": "Importovat tablo",
|
"chooseBoardSourcePopup-title": "Importovat tablo",
|
||||||
"createLabelPopup-title": "Vytvořit štítek",
|
"createLabelPopup-title": "Vytvořit štítek",
|
||||||
"createCustomField": "Vytvořit pole",
|
"createCustomField": "Vytvořit pole",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Stav",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Dokončeno",
|
"completed": "Dokončeno",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "smazat komentář %s",
|
"activity-deleteComment": "smazat komentář %s",
|
||||||
"activity-receivedDate": "editoval(a) datum přijetí na %s z %s",
|
"activity-receivedDate": "editoval(a) datum přijetí na %s z %s",
|
||||||
"activity-startDate": "editoval(a) datum zahájení na %s z %s",
|
"activity-startDate": "editoval(a) datum zahájení na %s z %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Šablony",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "editoval(a) termín dokončení na %s z %s",
|
"activity-dueDate": "editoval(a) termín dokončení na %s z %s",
|
||||||
"activity-endDate": "editoval(a) datum ukončení na %s z %s",
|
"activity-endDate": "editoval(a) datum ukončení na %s z %s",
|
||||||
"add-attachment": "Přidat přílohu",
|
"add-attachment": "Přidat přílohu",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Nadpis první karty\", \"description\":\"Popis první karty\"}, {\"title\":\"Nadpis druhé karty\",\"description\":\"Popis druhé karty\"},{\"title\":\"Nadpis poslední kary\",\"description\":\"Popis poslední karty\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Nadpis první karty\", \"description\":\"Popis první karty\"}, {\"title\":\"Nadpis druhé karty\",\"description\":\"Popis druhé karty\"},{\"title\":\"Nadpis poslední kary\",\"description\":\"Popis poslední karty\"} ]",
|
||||||
"create": "Vytvořit",
|
"create": "Vytvořit",
|
||||||
"createBoardPopup-title": "Vytvořit tablo",
|
"createBoardPopup-title": "Vytvořit tablo",
|
||||||
|
"createTemplateContainerPopup-title": "Přidat kontejner šablony",
|
||||||
"chooseBoardSourcePopup-title": "Importovat tablo",
|
"chooseBoardSourcePopup-title": "Importovat tablo",
|
||||||
"createLabelPopup-title": "Vytvořit štítek",
|
"createLabelPopup-title": "Vytvořit štítek",
|
||||||
"createCustomField": "Vytvořit pole",
|
"createCustomField": "Vytvořit pole",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Stav",
|
||||||
|
"migration-progress-details": "Podrobnosti",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Dokončeno",
|
"completed": "Dokončeno",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "slettede kommentar %s",
|
"activity-deleteComment": "slettede kommentar %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Skabeloner",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Tilføj vedhæftning",
|
"add-attachment": "Tilføj vedhæftning",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Opret",
|
"create": "Opret",
|
||||||
"createBoardPopup-title": "Opret tavle",
|
"createBoardPopup-title": "Opret tavle",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Importér tavle",
|
"chooseBoardSourcePopup-title": "Importér tavle",
|
||||||
"createLabelPopup-title": "Opret etikette",
|
"createLabelPopup-title": "Opret etikette",
|
||||||
"createCustomField": "Opret felt",
|
"createCustomField": "Opret felt",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Fuldført",
|
"completed": "Fuldført",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "löschte Kommentar %s",
|
"activity-deleteComment": "löschte Kommentar %s",
|
||||||
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
||||||
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Vorlagen",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s",
|
"activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s",
|
||||||
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
||||||
"add-attachment": "Datei anhängen",
|
"add-attachment": "Datei anhängen",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
||||||
"create": "Erstellen",
|
"create": "Erstellen",
|
||||||
"createBoardPopup-title": "Board erstellen",
|
"createBoardPopup-title": "Board erstellen",
|
||||||
|
"createTemplateContainerPopup-title": "Vorlagen-Container hinzufügen",
|
||||||
"chooseBoardSourcePopup-title": "Board importieren",
|
"chooseBoardSourcePopup-title": "Board importieren",
|
||||||
"createLabelPopup-title": "Label erstellen",
|
"createLabelPopup-title": "Label erstellen",
|
||||||
"createCustomField": "Feld erstellen",
|
"createCustomField": "Feld erstellen",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "abgeschlossen",
|
"completed": "abgeschlossen",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "löschte Kommentar %s",
|
"activity-deleteComment": "löschte Kommentar %s",
|
||||||
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
||||||
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Vorlagen",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s",
|
"activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s",
|
||||||
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
||||||
"add-attachment": "Datei anhängen",
|
"add-attachment": "Datei anhängen",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
||||||
"create": "Erstellen",
|
"create": "Erstellen",
|
||||||
"createBoardPopup-title": "Board erstellen",
|
"createBoardPopup-title": "Board erstellen",
|
||||||
|
"createTemplateContainerPopup-title": "Vorlagen-Container hinzufügen",
|
||||||
"chooseBoardSourcePopup-title": "Board importieren",
|
"chooseBoardSourcePopup-title": "Board importieren",
|
||||||
"createLabelPopup-title": "Label erstellen",
|
"createLabelPopup-title": "Label erstellen",
|
||||||
"createCustomField": "Feld erstellen",
|
"createCustomField": "Feld erstellen",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "abgeschlossen",
|
"completed": "abgeschlossen",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "löschte Kommentar %s",
|
"activity-deleteComment": "löschte Kommentar %s",
|
||||||
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
||||||
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Vorlagen",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s",
|
"activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s",
|
||||||
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
||||||
"add-attachment": "Datei anhängen",
|
"add-attachment": "Datei anhängen",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
||||||
"create": "Erstellen",
|
"create": "Erstellen",
|
||||||
"createBoardPopup-title": "Board erstellen",
|
"createBoardPopup-title": "Board erstellen",
|
||||||
|
"createTemplateContainerPopup-title": "Vorlagen-Container hinzufügen",
|
||||||
"chooseBoardSourcePopup-title": "Board importieren",
|
"chooseBoardSourcePopup-title": "Board importieren",
|
||||||
"createLabelPopup-title": "Label erstellen",
|
"createLabelPopup-title": "Label erstellen",
|
||||||
"createCustomField": "Feld erstellen",
|
"createCustomField": "Feld erstellen",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Abgeschlossen",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "abgeschlossen",
|
"completed": "abgeschlossen",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "löschte Kommentar %s",
|
"activity-deleteComment": "löschte Kommentar %s",
|
||||||
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
"activity-receivedDate": "hat Empfangsdatum zu %s geändert auf %s",
|
||||||
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
"activity-startDate": "hat Startdatum zu %s geändert auf %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Vorlagen",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s",
|
"activity-dueDate": "hat Fälligkeitsdatum zu %s geändert auf %s",
|
||||||
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
"activity-endDate": "hat Enddatum zu %s geändert auf %s",
|
||||||
"add-attachment": "Datei anhängen",
|
"add-attachment": "Datei anhängen",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Titel der ersten Karte\", \"description\":\"Beschreibung der ersten Karte\"}, {\"title\":\"Titel der zweiten Karte\",\"description\":\"Beschreibung der zweiten Karte\"},{\"title\":\"Titel der letzten Karte\",\"description\":\"Beschreibung der letzten Karte\"} ]",
|
||||||
"create": "Erstellen",
|
"create": "Erstellen",
|
||||||
"createBoardPopup-title": "Board erstellen",
|
"createBoardPopup-title": "Board erstellen",
|
||||||
|
"createTemplateContainerPopup-title": "Vorlagen-Container hinzufügen",
|
||||||
"chooseBoardSourcePopup-title": "Board importieren",
|
"chooseBoardSourcePopup-title": "Board importieren",
|
||||||
"createLabelPopup-title": "Label erstellen",
|
"createLabelPopup-title": "Label erstellen",
|
||||||
"createCustomField": "Feld erstellen",
|
"createCustomField": "Feld erstellen",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Zurück zu den Einstellungen",
|
"back-to-settings": "Zurück zu den Einstellungen",
|
||||||
"board-id": "Brett ID",
|
"board-id": "Brett ID",
|
||||||
"board-migration": "Brettmigration",
|
"board-migration": "Brettmigration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Zeige Listen auf der Minikarte",
|
"card-show-lists-on-minicard": "Zeige Listen auf der Minikarte",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Vollständig",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Gesamtfortschritt",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Aufräumen",
|
"cleanup": "Aufräumen",
|
||||||
"cleanup-old-jobs": "Alte Aufgaben aufräumen",
|
"cleanup-old-jobs": "Alte Aufgaben aufräumen",
|
||||||
"completed": "abgeschlossen",
|
"completed": "abgeschlossen",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "διεγράφη το σχόλιο %s",
|
"activity-deleteComment": "διεγράφη το σχόλιο %s",
|
||||||
"activity-receivedDate": "η ημερομηνία λήψης άλλαξε σε %s από %s",
|
"activity-receivedDate": "η ημερομηνία λήψης άλλαξε σε %s από %s",
|
||||||
"activity-startDate": "η ημερομηνία έναρξης άλλαξε σε %s από %s",
|
"activity-startDate": "η ημερομηνία έναρξης άλλαξε σε %s από %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Πρότυπα",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "υπέστη επεξεργασία η τιμή της προθεσμίας σε %s από %s",
|
"activity-dueDate": "υπέστη επεξεργασία η τιμή της προθεσμίας σε %s από %s",
|
||||||
"activity-endDate": "η ημερομηνία λήξης άλλαξε σε %s από %s",
|
"activity-endDate": "η ημερομηνία λήξης άλλαξε σε %s από %s",
|
||||||
"add-attachment": "Προσθήκη Συνημμένου",
|
"add-attachment": "Προσθήκη Συνημμένου",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Τίτλος πρώτης κάρτας\", \"description\":\"Περιγραφή πρώτης κάρτας\"}, {\"title\":\"Τίτλος δεύτερης κάρτας\",\"description\":\"Περιγραφή δεύτερης κάρτας\"},{\"title\":\"Τίτλος τελευταίας κάρτας\",\"description\":\"Περιγραφή τελευταίας κάρτας\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Τίτλος πρώτης κάρτας\", \"description\":\"Περιγραφή πρώτης κάρτας\"}, {\"title\":\"Τίτλος δεύτερης κάρτας\",\"description\":\"Περιγραφή δεύτερης κάρτας\"},{\"title\":\"Τίτλος τελευταίας κάρτας\",\"description\":\"Περιγραφή τελευταίας κάρτας\"} ]",
|
||||||
"create": "Δημιουργία",
|
"create": "Δημιουργία",
|
||||||
"createBoardPopup-title": "Δημιουργία Πίνακα",
|
"createBoardPopup-title": "Δημιουργία Πίνακα",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Εισαγωγή πίνακα",
|
"chooseBoardSourcePopup-title": "Εισαγωγή πίνακα",
|
||||||
"createLabelPopup-title": "Δημιουργία Ετικέτας",
|
"createLabelPopup-title": "Δημιουργία Ετικέτας",
|
||||||
"createCustomField": "Δημιουργία Πεδίου",
|
"createCustomField": "Δημιουργία Πεδίου",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "διεγράφη το σχόλιο %s",
|
"activity-deleteComment": "διεγράφη το σχόλιο %s",
|
||||||
"activity-receivedDate": "η ημερομηνία λήψης άλλαξε σε %s από %s",
|
"activity-receivedDate": "η ημερομηνία λήψης άλλαξε σε %s από %s",
|
||||||
"activity-startDate": "η ημερομηνία έναρξης άλλαξε σε %s από %s",
|
"activity-startDate": "η ημερομηνία έναρξης άλλαξε σε %s από %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Πρότυπα",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "υπέστη επεξεργασία η τιμή της προθεσμίας σε %s από %s",
|
"activity-dueDate": "υπέστη επεξεργασία η τιμή της προθεσμίας σε %s από %s",
|
||||||
"activity-endDate": "η ημερομηνία λήξης άλλαξε σε %s από %s",
|
"activity-endDate": "η ημερομηνία λήξης άλλαξε σε %s από %s",
|
||||||
"add-attachment": "Προσθήκη Συνημμένου",
|
"add-attachment": "Προσθήκη Συνημμένου",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Τίτλος πρώτης κάρτας\", \"description\":\"Περιγραφή πρώτης κάρτας\"}, {\"title\":\"Τίτλος δεύτερης κάρτας\",\"description\":\"Περιγραφή δεύτερης κάρτας\"},{\"title\":\"Τίτλος τελευταίας κάρτας\",\"description\":\"Περιγραφή τελευταίας κάρτας\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Τίτλος πρώτης κάρτας\", \"description\":\"Περιγραφή πρώτης κάρτας\"}, {\"title\":\"Τίτλος δεύτερης κάρτας\",\"description\":\"Περιγραφή δεύτερης κάρτας\"},{\"title\":\"Τίτλος τελευταίας κάρτας\",\"description\":\"Περιγραφή τελευταίας κάρτας\"} ]",
|
||||||
"create": "Δημιουργία",
|
"create": "Δημιουργία",
|
||||||
"createBoardPopup-title": "Δημιουργία Πίνακα",
|
"createBoardPopup-title": "Δημιουργία Πίνακα",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Εισαγωγή πίνακα",
|
"chooseBoardSourcePopup-title": "Εισαγωγή πίνακα",
|
||||||
"createLabelPopup-title": "Δημιουργία Ετικέτας",
|
"createLabelPopup-title": "Δημιουργία Ετικέτας",
|
||||||
"createCustomField": "Δημιουργία Πεδίου",
|
"createCustomField": "Δημιουργία Πεδίου",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Krei",
|
"create": "Krei",
|
||||||
"createBoardPopup-title": "Krei tavolon",
|
"createBoardPopup-title": "Krei tavolon",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "comentario %s eliminado",
|
"activity-deleteComment": "comentario %s eliminado",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Plantillas",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Agregar Adjunto",
|
"add-attachment": "Agregar Adjunto",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Título de primera tarjeta\", \"description\":\"Descripción de primera tarjeta\"}, {\"title\":\"Título de segunda tarjeta\",\"description\":\"Descripción de segunda tarjeta\"},{\"title\":\"Título de última tarjeta\",\"description\":\"Descripción de última tarjeta\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Título de primera tarjeta\", \"description\":\"Descripción de primera tarjeta\"}, {\"title\":\"Título de segunda tarjeta\",\"description\":\"Descripción de segunda tarjeta\"},{\"title\":\"Título de última tarjeta\",\"description\":\"Descripción de última tarjeta\"} ]",
|
||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"createBoardPopup-title": "Crear Tablero",
|
"createBoardPopup-title": "Crear Tablero",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Importar tablero",
|
"chooseBoardSourcePopup-title": "Importar tablero",
|
||||||
"createLabelPopup-title": "Crear Etiqueta",
|
"createLabelPopup-title": "Crear Etiqueta",
|
||||||
"createCustomField": "Crear Campo",
|
"createCustomField": "Crear Campo",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "comentario eliminado",
|
"activity-deleteComment": "comentario eliminado",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Plantillas",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Añadir adjunto",
|
"add-attachment": "Añadir adjunto",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Título de la primera tarjeta\", \"description\":\"Descripción de la primera tarjeta\"}, {\"title\":\"Título de la segunda tarjeta\",\"description\":\"Descripción de la segunda tarjeta\"},{\"title\":\"Título de la última tarjeta\",\"description\":\"Descripción de la última tarjeta\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Título de la primera tarjeta\", \"description\":\"Descripción de la primera tarjeta\"}, {\"title\":\"Título de la segunda tarjeta\",\"description\":\"Descripción de la segunda tarjeta\"},{\"title\":\"Título de la última tarjeta\",\"description\":\"Descripción de la última tarjeta\"} ]",
|
||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"createBoardPopup-title": "Crear tablero",
|
"createBoardPopup-title": "Crear tablero",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Importar un tablero",
|
"chooseBoardSourcePopup-title": "Importar un tablero",
|
||||||
"createLabelPopup-title": "Crear una etiqueta",
|
"createLabelPopup-title": "Crear una etiqueta",
|
||||||
"createCustomField": "Crear un campo",
|
"createCustomField": "Crear un campo",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completada",
|
"completed": "Completada",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "comentario eliminado %s",
|
"activity-deleteComment": "comentario eliminado %s",
|
||||||
"activity-receivedDate": "fecha de recepción editada para %s de %s",
|
"activity-receivedDate": "fecha de recepción editada para %s de %s",
|
||||||
"activity-startDate": "fecha de inicio editada a %s de %s",
|
"activity-startDate": "fecha de inicio editada a %s de %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "fecha de vencimiento editada a %s de %s",
|
"activity-dueDate": "fecha de vencimiento editada a %s de %s",
|
||||||
"activity-endDate": "editada la fecha de finalización a %s de %s",
|
"activity-endDate": "editada la fecha de finalización a %s de %s",
|
||||||
"add-attachment": "Agregar adjunto",
|
"add-attachment": "Agregar adjunto",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "comentario eliminado",
|
"activity-deleteComment": "comentario eliminado",
|
||||||
"activity-receivedDate": "editada la fecha de recepción a %s de %s",
|
"activity-receivedDate": "editada la fecha de recepción a %s de %s",
|
||||||
"activity-startDate": "editada la fecha de inicio a %s de %s",
|
"activity-startDate": "editada la fecha de inicio a %s de %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Plantillas",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "editada la fecha de vencimiento a %s de %s",
|
"activity-dueDate": "editada la fecha de vencimiento a %s de %s",
|
||||||
"activity-endDate": "editada la fecha de finalización a %s de %s",
|
"activity-endDate": "editada la fecha de finalización a %s de %s",
|
||||||
"add-attachment": "Agregar adjunto",
|
"add-attachment": "Agregar adjunto",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Título de la primera tarjeta\", \"description\":\"Descripción de la primera tarjeta\"}, {\"title\":\"Título de la segunda tarjeta\",\"description\":\"Descripción de la segunda tarjeta\"},{\"title\":\"Título de la última tarjeta\",\"description\":\"Descripción de la última tarjeta\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Título de la primera tarjeta\", \"description\":\"Descripción de la primera tarjeta\"}, {\"title\":\"Título de la segunda tarjeta\",\"description\":\"Descripción de la segunda tarjeta\"},{\"title\":\"Título de la última tarjeta\",\"description\":\"Descripción de la última tarjeta\"} ]",
|
||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"createBoardPopup-title": "Crear tablero",
|
"createBoardPopup-title": "Crear tablero",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Importar un tablero",
|
"chooseBoardSourcePopup-title": "Importar un tablero",
|
||||||
"createLabelPopup-title": "Crear una etiqueta",
|
"createLabelPopup-title": "Crear una etiqueta",
|
||||||
"createCustomField": "Crear un campo",
|
"createCustomField": "Crear un campo",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Estado",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completada",
|
"completed": "Completada",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "comentario eliminado",
|
"activity-deleteComment": "comentario eliminado",
|
||||||
"activity-receivedDate": "editada la fecha de recepción a %s de %s",
|
"activity-receivedDate": "editada la fecha de recepción a %s de %s",
|
||||||
"activity-startDate": "editada la fecha de inicio a %s de %s",
|
"activity-startDate": "editada la fecha de inicio a %s de %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Plantillas",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "editada la fecha de vencimiento a %s de %s",
|
"activity-dueDate": "editada la fecha de vencimiento a %s de %s",
|
||||||
"activity-endDate": "editada la fecha de finalización a %s de %s",
|
"activity-endDate": "editada la fecha de finalización a %s de %s",
|
||||||
"add-attachment": "Añadir adjunto",
|
"add-attachment": "Añadir adjunto",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Título de la primera tarjeta\", \"description\":\"Descripción de la primera tarjeta\"}, {\"title\":\"Título de la segunda tarjeta\",\"description\":\"Descripción de la segunda tarjeta\"},{\"title\":\"Título de la última tarjeta\",\"description\":\"Descripción de la última tarjeta\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Título de la primera tarjeta\", \"description\":\"Descripción de la primera tarjeta\"}, {\"title\":\"Título de la segunda tarjeta\",\"description\":\"Descripción de la segunda tarjeta\"},{\"title\":\"Título de la última tarjeta\",\"description\":\"Descripción de la última tarjeta\"} ]",
|
||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"createBoardPopup-title": "Crear tablero",
|
"createBoardPopup-title": "Crear tablero",
|
||||||
|
"createTemplateContainerPopup-title": "añadir plantilla de contenedor",
|
||||||
"chooseBoardSourcePopup-title": "Importar un tablero",
|
"chooseBoardSourcePopup-title": "Importar un tablero",
|
||||||
"createLabelPopup-title": "Crear una etiqueta",
|
"createLabelPopup-title": "Crear una etiqueta",
|
||||||
"createCustomField": "Crear un campo",
|
"createCustomField": "Crear un campo",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Completado",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Estado",
|
||||||
|
"migration-progress-details": "Detalles",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completada",
|
"completed": "Completada",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "kustutatud kommentaar %s",
|
"activity-deleteComment": "kustutatud kommentaar %s",
|
||||||
"activity-receivedDate": "redigeeritud saabunud kuupäev %s-i %s-i",
|
"activity-receivedDate": "redigeeritud saabunud kuupäev %s-i %s-i",
|
||||||
"activity-startDate": "redigeeritud alguskuupäev %s-i %s-i alguskuupäevaks",
|
"activity-startDate": "redigeeritud alguskuupäev %s-i %s-i alguskuupäevaks",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Mallid",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "redigeeritud tähtaeg on %s of %s",
|
"activity-dueDate": "redigeeritud tähtaeg on %s of %s",
|
||||||
"activity-endDate": "redigeeritud lõpukuupäev %s-i %s-i lõpukuupäevaks",
|
"activity-endDate": "redigeeritud lõpukuupäev %s-i %s-i lõpukuupäevaks",
|
||||||
"add-attachment": "Lisa lisa",
|
"add-attachment": "Lisa lisa",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": {\"title\": \"First card title\", \"description\": \"First card description\"}, {\"title\": \"Second card title\", \"description\": \"Second card description\"},{\"title\": \"Last card title\", \"description\": \"Last card description\"}, {\"title\": \"Last card title\", \"description\": \"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": {\"title\": \"First card title\", \"description\": \"First card description\"}, {\"title\": \"Second card title\", \"description\": \"Second card description\"},{\"title\": \"Last card title\", \"description\": \"Last card description\"}, {\"title\": \"Last card title\", \"description\": \"Last card description\"} ]",
|
||||||
"create": "Loo",
|
"create": "Loo",
|
||||||
"createBoardPopup-title": "Loo juhatus",
|
"createBoardPopup-title": "Loo juhatus",
|
||||||
|
"createTemplateContainerPopup-title": "Malli konteineri lisamine",
|
||||||
"chooseBoardSourcePopup-title": "Impordilaua",
|
"chooseBoardSourcePopup-title": "Impordilaua",
|
||||||
"createLabelPopup-title": "Loo silt",
|
"createLabelPopup-title": "Loo silt",
|
||||||
"createCustomField": "Loo väli",
|
"createCustomField": "Loo väli",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Staatus",
|
||||||
|
"migration-progress-details": "Üksikasjad",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Lõpetatud",
|
"completed": "Lõpetatud",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "%s iruzkina ezabatu da",
|
"activity-deleteComment": "%s iruzkina ezabatu da",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Txantiloiak",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Gehitu eranskina",
|
"add-attachment": "Gehitu eranskina",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Sortu",
|
"create": "Sortu",
|
||||||
"createBoardPopup-title": "Sortu arbela",
|
"createBoardPopup-title": "Sortu arbela",
|
||||||
|
"createTemplateContainerPopup-title": "Gehitu txantiloien edukiontzia",
|
||||||
"chooseBoardSourcePopup-title": "Inportatu arbela",
|
"chooseBoardSourcePopup-title": "Inportatu arbela",
|
||||||
"createLabelPopup-title": "Sortu etiketa",
|
"createLabelPopup-title": "Sortu etiketa",
|
||||||
"createCustomField": "Sortu eremua",
|
"createCustomField": "Sortu eremua",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "%s نظر حذف شد",
|
"activity-deleteComment": "%s نظر حذف شد",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "قالبها",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "افزودن ضمیمه",
|
"add-attachment": "افزودن ضمیمه",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "ایجاد",
|
"create": "ایجاد",
|
||||||
"createBoardPopup-title": "ایجاد برد",
|
"createBoardPopup-title": "ایجاد برد",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "وارد کردن برد",
|
"chooseBoardSourcePopup-title": "وارد کردن برد",
|
||||||
"createLabelPopup-title": "ایجاد لیبل",
|
"createLabelPopup-title": "ایجاد لیبل",
|
||||||
"createCustomField": "ایجاد فیلد",
|
"createCustomField": "ایجاد فیلد",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "وضعیت",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "تمام شده",
|
"completed": "تمام شده",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "%s نظر حذف شد",
|
"activity-deleteComment": "%s نظر حذف شد",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "قالبها",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "افزودن ضمیمه",
|
"add-attachment": "افزودن ضمیمه",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "ایجاد",
|
"create": "ایجاد",
|
||||||
"createBoardPopup-title": "ایجاد برد",
|
"createBoardPopup-title": "ایجاد برد",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "وارد کردن برد",
|
"chooseBoardSourcePopup-title": "وارد کردن برد",
|
||||||
"createLabelPopup-title": "ایجاد لیبل",
|
"createLabelPopup-title": "ایجاد لیبل",
|
||||||
"createCustomField": "ایجاد فیلد",
|
"createCustomField": "ایجاد فیلد",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "وضعیت",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "تمام شده",
|
"completed": "تمام شده",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "poisti kommentin %s",
|
"activity-deleteComment": "poisti kommentin %s",
|
||||||
"activity-receivedDate": "muokkasi vastaanotettu päiväksi %s / %s",
|
"activity-receivedDate": "muokkasi vastaanotettu päiväksi %s / %s",
|
||||||
"activity-startDate": "muokkasi aloituspäiväksi %s / %s",
|
"activity-startDate": "muokkasi aloituspäiväksi %s / %s",
|
||||||
|
"allboards.starred": "Suosikki",
|
||||||
|
"allboards.templates": "Mallit",
|
||||||
|
"allboards.remaining": "Jäljellä",
|
||||||
|
"allboards.workspaces": "Työtilat",
|
||||||
|
"allboards.add-workspace": "Lisää työtila",
|
||||||
|
"allboards.add-workspace-prompt": "Työtilan nimi",
|
||||||
|
"allboards.add-subworkspace": "Lisää alityötila",
|
||||||
|
"allboards.add-subworkspace-prompt": "Alityötilan nimi",
|
||||||
|
"allboards.edit-workspace": "Muokkaa työtilaa",
|
||||||
|
"allboards.edit-workspace-name": "Työtilan nimi",
|
||||||
|
"allboards.edit-workspace-icon": "Työtilan ikoni (markdown)",
|
||||||
|
"multi-selection-active": "Valitse taulut napsauttamalla valintaruutuja",
|
||||||
"activity-dueDate": "muokkasi eräpäiväksi %s / %s",
|
"activity-dueDate": "muokkasi eräpäiväksi %s / %s",
|
||||||
"activity-endDate": "muokkasi loppumispäiväksi %s / %s",
|
"activity-endDate": "muokkasi loppumispäiväksi %s / %s",
|
||||||
"add-attachment": "Lisää liite",
|
"add-attachment": "Lisää liite",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Ensimmäisen kortin otsikko\", \"description\":\"Ensimmäisen kortin kuvaus\"}, {\"title\":\"Toisen kortin otsikko\",\"description\":\"Toisen kortin kuvaus\"},{\"title\":\"Viimeisen kortin otsikko\",\"description\":\"Viimeisen kortin kuvaus\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Ensimmäisen kortin otsikko\", \"description\":\"Ensimmäisen kortin kuvaus\"}, {\"title\":\"Toisen kortin otsikko\",\"description\":\"Toisen kortin kuvaus\"},{\"title\":\"Viimeisen kortin otsikko\",\"description\":\"Viimeisen kortin kuvaus\"} ]",
|
||||||
"create": "Luo",
|
"create": "Luo",
|
||||||
"createBoardPopup-title": "Luo taulu",
|
"createBoardPopup-title": "Luo taulu",
|
||||||
|
"createTemplateContainerPopup-title": "Lisää mallikontti",
|
||||||
"chooseBoardSourcePopup-title": "Tuo taulu",
|
"chooseBoardSourcePopup-title": "Tuo taulu",
|
||||||
"createLabelPopup-title": "Luo nimilappu",
|
"createLabelPopup-title": "Luo nimilappu",
|
||||||
"createCustomField": "Luo kenttä",
|
"createCustomField": "Luo kenttä",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Takaisin asetuksiin",
|
"back-to-settings": "Takaisin asetuksiin",
|
||||||
"board-id": "Taulun tunnus",
|
"board-id": "Taulun tunnus",
|
||||||
"board-migration": "Taulun siirto",
|
"board-migration": "Taulun siirto",
|
||||||
|
"board-migrations": "Taulu migraatiot",
|
||||||
"card-show-lists-on-minicard": "Näytä listat minikortilla",
|
"card-show-lists-on-minicard": "Näytä listat minikortilla",
|
||||||
|
"comprehensive-board-migration": "Perusteellinen taulu migraatio",
|
||||||
|
"comprehensive-board-migration-description": "Suorittaa kattavia tarkistuksia ja korjauksia taulun tietojen eheyden varmistamiseksi, mukaan lukien listajärjestyksen, korttien sijainnit ja uimaratarakenteen.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Poista kaksoiskappaleet tyhjistä listoista",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Poistaa tyhjät kaksoiskappalelistat turvallisesti. Poistaa vain listat, joissa ei ole kortteja JA joilla on toinen samanniminen lista, joka sisältää kortteja.",
|
||||||
|
"lost-cards": "Kadonneet kortit",
|
||||||
|
"lost-cards-list": "Palautetut kohteet",
|
||||||
|
"restore-lost-cards-migration": "Palauta kadonneet kortit",
|
||||||
|
"restore-lost-cards-migration-description": "Etsii ja palauttaa kortit ja listat, joista puuttuu swimlaneId tai listId. Luo 'Kadonneet kortit' -uimaradan, jotta kaikki kadonneet ovat taas näkyvissä.",
|
||||||
|
"restore-all-archived-migration": "Palauta kaikki arkistoidut",
|
||||||
|
"restore-all-archived-migration-description": "Palauttaa kaikki arkistoidut uimaradat, listat ja kortit. Korjaa automaattisesti puuttuvat uimaratatunnukset tai listatunnukset, jotta kohteet ovat näkyvissä.",
|
||||||
|
"fix-missing-lists-migration": "Korjaa puuttuvat listat",
|
||||||
|
"fix-missing-lists-migration-description": "Havaitsee ja korjaa puuttuvat tai vioittuneet listat taulun rakenteessa.",
|
||||||
|
"fix-avatar-urls-migration": "Korjaa avatar-URL-osoitteet",
|
||||||
|
"fix-avatar-urls-migration-description": "Päivittää taulun jäsenten avatar-osoitteiden URL-osoitteet oikean tallennustilan käyttämiseksi ja korjaa rikkinäiset avatar-viittaukset.",
|
||||||
|
"fix-all-file-urls-migration": "Korjaa kaikki tiedostojen URL-osoitteet",
|
||||||
|
"fix-all-file-urls-migration-description": "Päivittää kaikkien tällä taululla olevien tiedostoliitteiden URL-osoitteet käyttämään oikeaa tallennuspalvelinta ja korjaa rikkinäiset tiedostoviittaukset.",
|
||||||
|
"migration-needed": "Migraatio tarvitaan",
|
||||||
|
"migration-complete": "Valmis",
|
||||||
|
"migration-running": "Suoritetaan...",
|
||||||
|
"migration-successful": "Migraatio valmistui onnistuneesti",
|
||||||
|
"migration-failed": "Migraatio epäonnistui",
|
||||||
|
"migrations": "Migraatiot",
|
||||||
|
"migrations-admin-only": "Vain taulu ylläpitäjät voivat suorittaa migraatioita",
|
||||||
|
"migrations-description": "Suorita tietojen eheystarkistukset ja korjaukset tälle taululle. Jokainen migraatio voidaan suorittaa erikseen.",
|
||||||
|
"no-issues-found": "Ei löytynyt ongelmia",
|
||||||
|
"run-migration": "Suorita migraatio",
|
||||||
|
"run-comprehensive-migration-confirm": "Tämä suorittaa kattavan migraation, jolla tarkistetaan ja korjataan taulun tietojen eheys. Tämä voi kestää hetken. Jatketaanko?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "Tämä muuntaa ensin kaikki jaetut listat uimaratakohtaisiksi listoiksi ja poistaa sitten tyhjät listat, joissa on samanniminen kaksoiskappale, joka sisältää kortteja. Vain todella tarpeettomat tyhjät listat poistetaan. Jatketaanko?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "Tämä luo Kadonneet kortit -uimaradan ja palauttaa kaikki kortit ja listat, joista puuttuu uimaradan tunnus tai listan tunnus. Tämä vaikuttaa vain arkistoimattomiin kohteisiin. Jatketaanko?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "Tämä palauttaa KAIKKI arkistoidut uintikaistat, listat ja kortit, jolloin ne näkyvät taas. Puuttuvista tunnuksista puuttuvat kohteet korjataan automaattisesti. Tätä ei voi helposti perua. Jatketaanko?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "Tämä havaitsee ja korjaa puuttuvat tai vioittuneet listat taulun rakenteessa. Jatketaanko?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "Tämä päivittää taulun jäsenten avatar-URL-osoitteet käyttämään oikeaa tallennustilaa. Jatketaanko?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "Tämä päivittää kaikkien tällä taululla olevien tiedostoliitteiden URL-osoitteet käyttämään oikeaa tallennuspalvelinta. Jatketaanko?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "Ei kadonneita uintikaistoja, listoja tai kortteja palautettavaksi",
|
||||||
|
|
||||||
|
"migration-progress-title": "Taulu migraatio meneillään",
|
||||||
|
"migration-progress-overall": "Kokonaisedistyminen",
|
||||||
|
"migration-progress-current-step": "Nykyinen vaihe",
|
||||||
|
"migration-progress-status": "Tilanne",
|
||||||
|
"migration-progress-details": "Yksityiskohdat",
|
||||||
|
"migration-progress-note": "Odota hetki, siirrämme taulusi uusimpaan rakenteeseen...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analysoi taulun rakennetta",
|
||||||
|
"step-fix-orphaned-cards": "Korjaa orvot kortit",
|
||||||
|
"step-convert-shared-lists": "Muunna jaetut listat",
|
||||||
|
"step-ensure-per-swimlane-lists": "Varmista uimaratakohtaiset listat",
|
||||||
|
"step-validate-migration": "Varmistetaan migraatio",
|
||||||
|
"step-fix-avatar-urls": "Korjaa avatar-URL-osoitteet",
|
||||||
|
"step-fix-attachment-urls": "Korjaa liitetiedosto URLit",
|
||||||
|
"step-analyze-lists": "Analysoidaan listoja",
|
||||||
|
"step-create-missing-lists": "Luo puuttuvat listat",
|
||||||
|
"step-update-cards": "Päivitä kortit",
|
||||||
|
"step-finalize": "Viimeistellään",
|
||||||
|
"step-delete-duplicate-empty-lists": "Poista kaksoiskappaleet tyhjistä listoista",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Varmistetaan hävinneiden korttien uimarata",
|
||||||
|
"step-restore-lists": "Palauta listat",
|
||||||
|
"step-restore-cards": "Palauta kortit",
|
||||||
|
"step-restore-swimlanes": "Palauta uimaradat",
|
||||||
|
"step-fix-missing-ids": "Korjaa puuttuvat ID:t",
|
||||||
|
"step-scan-users": "Tarkistetaan taulun jäsenten avatarit",
|
||||||
|
"step-scan-files": "Tarkistetaan taulun liitetiedostot",
|
||||||
|
"step-fix-file-urls": "Korjataan tiedosto URLit",
|
||||||
"cleanup": "Siivous",
|
"cleanup": "Siivous",
|
||||||
"cleanup-old-jobs": "Siivoa vanhat työt",
|
"cleanup-old-jobs": "Siivoa vanhat työt",
|
||||||
"completed": "Valmistunut",
|
"completed": "Valmistunut",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "commentaire supprimé %s",
|
"activity-deleteComment": "commentaire supprimé %s",
|
||||||
"activity-receivedDate": "date de réception éditée de %s à %s",
|
"activity-receivedDate": "date de réception éditée de %s à %s",
|
||||||
"activity-startDate": "date de début éditée de %s à %s",
|
"activity-startDate": "date de début éditée de %s à %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Modèles",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "date d'échéance éditée de %s à %s",
|
"activity-dueDate": "date d'échéance éditée de %s à %s",
|
||||||
"activity-endDate": "date de fin éditée de %s à %s",
|
"activity-endDate": "date de fin éditée de %s à %s",
|
||||||
"add-attachment": "Ajouter une pièce jointe",
|
"add-attachment": "Ajouter une pièce jointe",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Titre de la première carte\", \"description\":\"Description de la première carte\"}, {\"title\":\"Titre de la seconde carte\",\"description\":\"Description de la seconde carte\"},{\"title\":\"Titre de la dernière carte\",\"description\":\"Description de la dernière carte\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Titre de la première carte\", \"description\":\"Description de la première carte\"}, {\"title\":\"Titre de la seconde carte\",\"description\":\"Description de la seconde carte\"},{\"title\":\"Titre de la dernière carte\",\"description\":\"Description de la dernière carte\"} ]",
|
||||||
"create": "Créer",
|
"create": "Créer",
|
||||||
"createBoardPopup-title": "Créer un tableau",
|
"createBoardPopup-title": "Créer un tableau",
|
||||||
|
"createTemplateContainerPopup-title": "Ajouter un conteneur de modèles",
|
||||||
"chooseBoardSourcePopup-title": "Importer un tableau",
|
"chooseBoardSourcePopup-title": "Importer un tableau",
|
||||||
"createLabelPopup-title": "Créer une étiquette",
|
"createLabelPopup-title": "Créer une étiquette",
|
||||||
"createCustomField": "Créer un champ personnalisé",
|
"createCustomField": "Créer un champ personnalisé",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Statut",
|
||||||
|
"migration-progress-details": "Détails",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Terminé",
|
"completed": "Terminé",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "commentaire supprimé %s",
|
"activity-deleteComment": "commentaire supprimé %s",
|
||||||
"activity-receivedDate": "date de réception éditée de %s à %s",
|
"activity-receivedDate": "date de réception éditée de %s à %s",
|
||||||
"activity-startDate": "date de début éditée de %s à %s",
|
"activity-startDate": "date de début éditée de %s à %s",
|
||||||
|
"allboards.starred": "Favoris",
|
||||||
|
"allboards.templates": "Modèles",
|
||||||
|
"allboards.remaining": "Restant",
|
||||||
|
"allboards.workspaces": "Espaces de travail",
|
||||||
|
"allboards.add-workspace": "Ajouter un espace de travail",
|
||||||
|
"allboards.add-workspace-prompt": "Nom de l'espace de travail",
|
||||||
|
"allboards.add-subworkspace": "Ajouter un sous-espace de travail",
|
||||||
|
"allboards.add-subworkspace-prompt": "Nom du sous-espace de travail",
|
||||||
|
"allboards.edit-workspace": "Modifier l'espace de travail",
|
||||||
|
"allboards.edit-workspace-name": "Nom de l'espace de travail",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Cliquez sur les cases à cocher pour sélectionner les tableaux",
|
||||||
"activity-dueDate": "date d'échéance éditée de %s à %s",
|
"activity-dueDate": "date d'échéance éditée de %s à %s",
|
||||||
"activity-endDate": "date de fin éditée de %s à %s",
|
"activity-endDate": "date de fin éditée de %s à %s",
|
||||||
"add-attachment": "Ajouter une pièce jointe",
|
"add-attachment": "Ajouter une pièce jointe",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"Titre de la première carte\", \"description\":\"Description de la première carte\"}, {\"title\":\"Titre de la seconde carte\",\"description\":\"Description de la seconde carte\"},{\"title\":\"Titre de la dernière carte\",\"description\":\"Description de la dernière carte\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"Titre de la première carte\", \"description\":\"Description de la première carte\"}, {\"title\":\"Titre de la seconde carte\",\"description\":\"Description de la seconde carte\"},{\"title\":\"Titre de la dernière carte\",\"description\":\"Description de la dernière carte\"} ]",
|
||||||
"create": "Créer",
|
"create": "Créer",
|
||||||
"createBoardPopup-title": "Créer un tableau",
|
"createBoardPopup-title": "Créer un tableau",
|
||||||
|
"createTemplateContainerPopup-title": "Ajouter un conteneur de modèles",
|
||||||
"chooseBoardSourcePopup-title": "Importer un tableau",
|
"chooseBoardSourcePopup-title": "Importer un tableau",
|
||||||
"createLabelPopup-title": "Créer une étiquette",
|
"createLabelPopup-title": "Créer une étiquette",
|
||||||
"createCustomField": "Créer un champ personnalisé",
|
"createCustomField": "Créer un champ personnalisé",
|
||||||
|
|
@ -1403,8 +1416,71 @@
|
||||||
"automatic-migration": "Migration automatique",
|
"automatic-migration": "Migration automatique",
|
||||||
"back-to-settings": "Retour aux paramètres",
|
"back-to-settings": "Retour aux paramètres",
|
||||||
"board-id": "ID du tableau",
|
"board-id": "ID du tableau",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Migration du tableau",
|
||||||
|
"board-migrations": "Migrations de tableau",
|
||||||
"card-show-lists-on-minicard": "Afficher les listes sur la mini-carte",
|
"card-show-lists-on-minicard": "Afficher les listes sur la mini-carte",
|
||||||
|
"comprehensive-board-migration": "Migration complète de tableau",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Supprimer les listes vides en doublon ? ",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Cartes perdues",
|
||||||
|
"lost-cards-list": "Éléments restaurés",
|
||||||
|
"restore-lost-cards-migration": "Restaurer les cartes perdues",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Corriger les URLs d'avatar",
|
||||||
|
"fix-avatar-urls-migration-description": "Mets à jour les URLs d'avatar des participants du tableau pour utiliser le bon gestionnaire de stockage et corriger les références défaillantes d'avatar ",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration requise",
|
||||||
|
"migration-complete": "Terminé",
|
||||||
|
"migration-running": "En cours ...",
|
||||||
|
"migration-successful": "Migration terminée avec succès",
|
||||||
|
"migration-failed": "Migration en échec",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "Aucun problème détecté",
|
||||||
|
"run-migration": "Lancer la migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Migration du tableau en cours",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Étape courante",
|
||||||
|
"migration-progress-status": "Statut",
|
||||||
|
"migration-progress-details": "Détails",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Corriger les cartes orphelines",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Valider la migration",
|
||||||
|
"step-fix-avatar-urls": "Corriger les URLs d'avatar",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Supprimer les listes vides en doublon ? ",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restaurer les cartes",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Terminé",
|
"completed": "Terminé",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Engadir anexo",
|
"add-attachment": "Engadir anexo",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"createBoardPopup-title": "Crear taboleiro",
|
"createBoardPopup-title": "Crear taboleiro",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Importar taboleiro",
|
"chooseBoardSourcePopup-title": "Importar taboleiro",
|
||||||
"createLabelPopup-title": "Crear etiqueta",
|
"createLabelPopup-title": "Crear etiqueta",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Engadir anexo",
|
"add-attachment": "Engadir anexo",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"createBoardPopup-title": "Crear taboleiro",
|
"createBoardPopup-title": "Crear taboleiro",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Importar taboleiro",
|
"chooseBoardSourcePopup-title": "Importar taboleiro",
|
||||||
"createLabelPopup-title": "Crear etiqueta",
|
"createLabelPopup-title": "Crear etiqueta",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,18 @@
|
||||||
"activity-deleteComment": "deleted comment %s",
|
"activity-deleteComment": "deleted comment %s",
|
||||||
"activity-receivedDate": "edited received date to %s of %s",
|
"activity-receivedDate": "edited received date to %s of %s",
|
||||||
"activity-startDate": "edited start date to %s of %s",
|
"activity-startDate": "edited start date to %s of %s",
|
||||||
|
"allboards.starred": "Starred",
|
||||||
|
"allboards.templates": "Templates",
|
||||||
|
"allboards.remaining": "Remaining",
|
||||||
|
"allboards.workspaces": "Workspaces",
|
||||||
|
"allboards.add-workspace": "Add Workspace",
|
||||||
|
"allboards.add-workspace-prompt": "Workspace name",
|
||||||
|
"allboards.add-subworkspace": "Add Subworkspace",
|
||||||
|
"allboards.add-subworkspace-prompt": "Subworkspace name",
|
||||||
|
"allboards.edit-workspace": "Edit workspace",
|
||||||
|
"allboards.edit-workspace-name": "Workspace name",
|
||||||
|
"allboards.edit-workspace-icon": "Workspace icon (markdown)",
|
||||||
|
"multi-selection-active": "Click checkboxes to select boards",
|
||||||
"activity-dueDate": "edited due date to %s of %s",
|
"activity-dueDate": "edited due date to %s of %s",
|
||||||
"activity-endDate": "edited end date to %s of %s",
|
"activity-endDate": "edited end date to %s of %s",
|
||||||
"add-attachment": "Add Attachment",
|
"add-attachment": "Add Attachment",
|
||||||
|
|
@ -337,6 +349,7 @@
|
||||||
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
"copyManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"createBoardPopup-title": "Create Board",
|
"createBoardPopup-title": "Create Board",
|
||||||
|
"createTemplateContainerPopup-title": "Add Template Container",
|
||||||
"chooseBoardSourcePopup-title": "Import board",
|
"chooseBoardSourcePopup-title": "Import board",
|
||||||
"createLabelPopup-title": "Create Label",
|
"createLabelPopup-title": "Create Label",
|
||||||
"createCustomField": "Create Field",
|
"createCustomField": "Create Field",
|
||||||
|
|
@ -1404,7 +1417,70 @@
|
||||||
"back-to-settings": "Back to Settings",
|
"back-to-settings": "Back to Settings",
|
||||||
"board-id": "Board ID",
|
"board-id": "Board ID",
|
||||||
"board-migration": "Board Migration",
|
"board-migration": "Board Migration",
|
||||||
|
"board-migrations": "Board Migrations",
|
||||||
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
"card-show-lists-on-minicard": "Show Lists on Minicard",
|
||||||
|
"comprehensive-board-migration": "Comprehensive Board Migration",
|
||||||
|
"comprehensive-board-migration-description": "Performs comprehensive checks and fixes for board data integrity, including list ordering, card positions, and swimlane structure.",
|
||||||
|
"delete-duplicate-empty-lists-migration": "Delete Duplicate Empty Lists",
|
||||||
|
"delete-duplicate-empty-lists-migration-description": "Safely deletes empty duplicate lists. Only removes lists that have no cards AND have another list with the same title that contains cards.",
|
||||||
|
"lost-cards": "Lost Cards",
|
||||||
|
"lost-cards-list": "Restored Items",
|
||||||
|
"restore-lost-cards-migration": "Restore Lost Cards",
|
||||||
|
"restore-lost-cards-migration-description": "Finds and restores cards and lists with missing swimlaneId or listId. Creates a 'Lost Cards' swimlane to make all lost items visible again.",
|
||||||
|
"restore-all-archived-migration": "Restore All Archived",
|
||||||
|
"restore-all-archived-migration-description": "Restores all archived swimlanes, lists, and cards. Automatically fixes any missing swimlaneId or listId to make items visible.",
|
||||||
|
"fix-missing-lists-migration": "Fix Missing Lists",
|
||||||
|
"fix-missing-lists-migration-description": "Detects and repairs missing or corrupted lists in the board structure.",
|
||||||
|
"fix-avatar-urls-migration": "Fix Avatar URLs",
|
||||||
|
"fix-avatar-urls-migration-description": "Updates avatar URLs for board members to use the correct storage backend and fixes broken avatar references.",
|
||||||
|
"fix-all-file-urls-migration": "Fix All File URLs",
|
||||||
|
"fix-all-file-urls-migration-description": "Updates all file attachment URLs on this board to use the correct storage backend and fixes broken file references.",
|
||||||
|
"migration-needed": "Migration Needed",
|
||||||
|
"migration-complete": "Complete",
|
||||||
|
"migration-running": "Running...",
|
||||||
|
"migration-successful": "Migration completed successfully",
|
||||||
|
"migration-failed": "Migration failed",
|
||||||
|
"migrations": "Migrations",
|
||||||
|
"migrations-admin-only": "Only board administrators can run migrations",
|
||||||
|
"migrations-description": "Run data integrity checks and repairs for this board. Each migration can be executed individually.",
|
||||||
|
"no-issues-found": "No issues found",
|
||||||
|
"run-migration": "Run Migration",
|
||||||
|
"run-comprehensive-migration-confirm": "This will perform a comprehensive migration to check and fix board data integrity. This may take a few moments. Continue?",
|
||||||
|
"run-delete-duplicate-empty-lists-migration-confirm": "This will first convert any shared lists to per-swimlane lists, then delete empty lists that have a duplicate list with the same title containing cards. Only truly redundant empty lists will be removed. Continue?",
|
||||||
|
"run-restore-lost-cards-migration-confirm": "This will create a 'Lost Cards' swimlane and restore all cards and lists with missing swimlaneId or listId. This only affects non-archived items. Continue?",
|
||||||
|
"run-restore-all-archived-migration-confirm": "This will restore ALL archived swimlanes, lists, and cards, making them visible again. Any items with missing IDs will be automatically fixed. This cannot be easily undone. Continue?",
|
||||||
|
"run-fix-missing-lists-migration-confirm": "This will detect and repair missing or corrupted lists in the board structure. Continue?",
|
||||||
|
"run-fix-avatar-urls-migration-confirm": "This will update avatar URLs for board members to use the correct storage backend. Continue?",
|
||||||
|
"run-fix-all-file-urls-migration-confirm": "This will update all file attachment URLs on this board to use the correct storage backend. Continue?",
|
||||||
|
"restore-lost-cards-nothing-to-restore": "No lost swimlanes, lists, or cards to restore",
|
||||||
|
|
||||||
|
"migration-progress-title": "Board Migration in Progress",
|
||||||
|
"migration-progress-overall": "Overall Progress",
|
||||||
|
"migration-progress-current-step": "Current Step",
|
||||||
|
"migration-progress-status": "Status",
|
||||||
|
"migration-progress-details": "Details",
|
||||||
|
"migration-progress-note": "Please wait while we migrate your board to the latest structure...",
|
||||||
|
|
||||||
|
"step-analyze-board-structure": "Analyze Board Structure",
|
||||||
|
"step-fix-orphaned-cards": "Fix Orphaned Cards",
|
||||||
|
"step-convert-shared-lists": "Convert Shared Lists",
|
||||||
|
"step-ensure-per-swimlane-lists": "Ensure Per-Swimlane Lists",
|
||||||
|
"step-validate-migration": "Validate Migration",
|
||||||
|
"step-fix-avatar-urls": "Fix Avatar URLs",
|
||||||
|
"step-fix-attachment-urls": "Fix Attachment URLs",
|
||||||
|
"step-analyze-lists": "Analyze Lists",
|
||||||
|
"step-create-missing-lists": "Create Missing Lists",
|
||||||
|
"step-update-cards": "Update Cards",
|
||||||
|
"step-finalize": "Finalize",
|
||||||
|
"step-delete-duplicate-empty-lists": "Delete Duplicate Empty Lists",
|
||||||
|
"step-ensure-lost-cards-swimlane": "Ensure Lost Cards Swimlane",
|
||||||
|
"step-restore-lists": "Restore Lists",
|
||||||
|
"step-restore-cards": "Restore Cards",
|
||||||
|
"step-restore-swimlanes": "Restore Swimlanes",
|
||||||
|
"step-fix-missing-ids": "Fix Missing IDs",
|
||||||
|
"step-scan-users": "Checking board member avatars",
|
||||||
|
"step-scan-files": "Checking board file attachments",
|
||||||
|
"step-fix-file-urls": "Fixing file URLs",
|
||||||
"cleanup": "Cleanup",
|
"cleanup": "Cleanup",
|
||||||
"cleanup-old-jobs": "Cleanup Old Jobs",
|
"cleanup-old-jobs": "Cleanup Old Jobs",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue