Compare commits

...

78 commits
v8.16 ... main

Author SHA1 Message Date
Lauri Ojansivu
e07e461e48 Updates
Some checks are pending
Docker / build (push) Waiting to run
Docker Image CI / build (push) Waiting to run
Release Charts / release (push) Waiting to run
Test suite / Meteor tests (push) Waiting to run
Test suite / Coverage report (push) Blocked by required conditions
2025-12-17 14:58:38 +02:00
Lauri Ojansivu
451e9f7870 Updates 2025-12-17 14:57:11 +02:00
Lauri Ojansivu
3c57840340 Updates 2025-12-17 14:53:41 +02:00
Lauri Ojansivu
2cbf64da33 Updates 2025-12-17 14:43:30 +02:00
Lauri Ojansivu
3ef0a3e685 Updates 2025-12-17 14:41:26 +02:00
Lauri Ojansivu
9ebdc82d46 Updates 2025-12-17 14:39:57 +02:00
Lauri Ojansivu
fe4b36b85d
Fix migration instructions from Snap to Docker
Corrected instructions for migrating from Snap to Docker, ensuring clarity on file paths and environment variables.
2025-12-17 14:37:37 +02:00
Lauri Ojansivu
b7ff370561
Fix backup command for WeKan database
Corrected command in backup instructions to create directory before moving files.
2025-12-17 14:34:30 +02:00
Lauri Ojansivu
5686c92e05
Revise backup and upgrade instructions for Docker Wekan
Updated notes on Docker commands and migration steps.
2025-12-17 14:33:39 +02:00
Lauri Ojansivu
784c5c6b0c
Update Backup.md 2025-12-17 14:27:43 +02:00
Lauri Ojansivu
30541260f0
Update Backup.md to reflect related topics 2025-12-17 14:25:15 +02:00
Lauri Ojansivu
59fc756a0b
Revise WeKan Snap upgrade and backup instructions
Updated the WeKan Snap upgrade instructions, including backup steps and Caddy configuration.
2025-12-17 14:24:17 +02:00
Lauri Ojansivu
4e346c0ab7
Update Backup.md with migration instructions
Added instructions for handling board settings and migrations after starting Wekan.
2025-12-17 14:07:01 +02:00
Lauri Ojansivu
19fa12bb26
Update backup instructions for Docker and Snap
Updated docker-compose command to use 'docker compose' syntax and added note about Snap upgrade.
2025-12-17 14:00:35 +02:00
Lauri Ojansivu
e669b1b9c7
Updated backup docs for docker upgrades 2025-12-17 13:57:17 +02:00
Lauri Ojansivu
f24e4a4ce3 Added docs about Mac Homebrew. 2025-12-17 11:13:15 +02:00
Lauri Ojansivu
8b5430acb8 Added Mac docs about Homebrew GUI Applite.
Thanks to xet7 !
2025-12-17 11:10:57 +02:00
Lauri Ojansivu
614cb44b55 Updated translations.
Some checks are pending
Docker / build (push) Waiting to run
Docker Image CI / build (push) Waiting to run
Release Charts / release (push) Waiting to run
Test suite / Meteor tests (push) Waiting to run
Test suite / Coverage report (push) Blocked by required conditions
2025-12-16 21:56:51 +02:00
Lauri Ojansivu
0ce8e8b74d
Merge pull request #6043 from wekan/dependabot/github_actions/actions/cache-5
Some checks are pending
Docker / build (push) Waiting to run
Docker Image CI / build (push) Waiting to run
Release Charts / release (push) Waiting to run
Test suite / Meteor tests (push) Waiting to run
Test suite / Coverage report (push) Blocked by required conditions
Bump actions/cache from 4 to 5
2025-12-16 05:47:09 +02:00
Lauri Ojansivu
4ea53af76e
Merge pull request #6042 from wekan/dependabot/github_actions/actions/download-artifact-7
Bump actions/download-artifact from 6 to 7
2025-12-16 05:46:50 +02:00
Lauri Ojansivu
016f17d663
Merge pull request #6041 from wekan/dependabot/github_actions/actions/upload-artifact-6
Bump actions/upload-artifact from 5 to 6
2025-12-16 05:46:26 +02:00
dependabot[bot]
07f69950a7
Bump actions/cache from 4 to 5
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 20:13:04 +00:00
dependabot[bot]
cec625607d
Bump actions/download-artifact from 6 to 7
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 20:13:00 +00:00
dependabot[bot]
a290c7b34b
Bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 20:12:55 +00:00
Lauri Ojansivu
5b77ac1b44 Updated translations
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
2025-12-11 03:33:17 +02:00
Lauri Ojansivu
41c635afb5
Merge pull request #6029 from MialLewis/add_archive_card_to_api
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
Add archive card to api
2025-12-04 11:58:44 +02:00
Lauri Ojansivu
adbf729cb2
Merge pull request #6032 from wekan/dependabot/github_actions/docker/metadata-action-5.10.0
Bump docker/metadata-action from 5.9.0 to 5.10.0
2025-12-04 11:58:02 +02:00
dependabot[bot]
88ea716d63
Bump docker/metadata-action from 5.9.0 to 5.10.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.9.0 to 5.10.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](318604b99e...c299e40c65)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-version: 5.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-01 23:35:03 +00:00
Mial Lewis
003a07ebce change restore to unarchive 2025-11-27 22:00:43 +00:00
Mial Lewis
d3c237bc66 fix more indenting 2025-11-27 08:29:36 +00:00
Mial Lewis
bac0fa81fc correce indent 2025-11-27 08:27:38 +00:00
Mial Lewis
a42915614a add restore to wekan.yml 2025-11-27 08:25:59 +00:00
Mial Lewis
5ff9bf331f add restore to api 2025-11-27 08:23:56 +00:00
Mial Lewis
36d7b0f8a7 correct return values 2025-11-27 00:52:28 +00:00
Mial Lewis
67c8a98f20 add route to wekan.yml 2025-11-27 00:05:53 +00:00
Mial Lewis
a81a603031 update bool to boolean 2025-11-26 23:59:00 +00:00
Mial Lewis
e30ce78053 add archive card to api 2025-11-26 23:57:49 +00:00
Lauri Ojansivu
3d70de94c6
Merge pull request #6028 from wekan/dependabot/github_actions/actions/checkout-6
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
Bump actions/checkout from 5 to 6
2025-11-26 18:04:09 +02:00
dependabot[bot]
70975c2944
Bump actions/checkout from 5 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-24 20:03:19 +00:00
Lauri Ojansivu
960e2126b4 Updated ChangeLog.
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
2025-11-21 03:02:41 +02:00
Lauri Ojansivu
3db1305e58 Updated build script for Linux arm64 bundle.
Thanks to xet7 !
2025-11-21 02:44:50 +02:00
Lauri Ojansivu
f16780b5e3 Updated translations.
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
2025-11-19 09:34:57 +02:00
Lauri Ojansivu
37a3065f3c Updated translations.
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
2025-11-15 16:35:31 +02:00
Lauri Ojansivu
7ff1649d89 Updated security.md
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
2025-11-14 07:47:31 +02:00
Lauri Ojansivu
a39ae31b45
Merge pull request #6012 from wekan/dependabot/github_actions/docker/metadata-action-5.9.0
Some checks are pending
Docker / build (push) Waiting to run
Docker Image CI / build (push) Waiting to run
Release Charts / release (push) Waiting to run
Test suite / Meteor tests (push) Waiting to run
Test suite / Coverage report (push) Blocked by required conditions
2025-11-13 17:19:00 +02:00
dependabot[bot]
6302a48221
Bump docker/metadata-action from 5.8.0 to 5.9.0
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.8.0 to 5.9.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](c1e51972af...318604b99e)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-version: 5.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-10 20:02:19 +00:00
Lauri Ojansivu
c277bee9d2
Merge pull request #6009 from brlin-tw/patch-issue-6008
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
Fix Broken Strikethroughs in Markdown to HTML conversion.
2025-11-10 04:58:29 +02:00
Buo-ren Lin (OSSII)
c5f5ce126d
Fix Broken Strikethroughs in Markdown to HTML conversion.
Allow the s tag to be rendered.

Fixes #6008.

Signed-off-by: Buo-ren Lin (OSSII) <buoren.lin@ossii.com.tw>
2025-11-10 10:49:26 +08:00
Lauri Ojansivu
0004ae716b v8.17
Some checks failed
Docker / build (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Release Charts / release (push) Has been cancelled
Test suite / Meteor tests (push) Has been cancelled
Test suite / Coverage report (push) Has been cancelled
2025-11-06 04:00:04 +02:00
Lauri Ojansivu
7f53dfac3c Updated ChangeLog. 2025-11-06 03:33:46 +02:00
Lauri Ojansivu
18003900c2 Fix Worker Permissions does not allow for cards to be moved. - v8.15.
Thanks to xet7 !

Fixes #5990
2025-11-06 03:31:14 +02:00
Lauri Ojansivu
fe104791b5 Updated ChangeLog. 2025-11-06 03:08:51 +02:00
Lauri Ojansivu
6244657ca5 Fix Workspaces at All Boards to have correct count of remaining etc, while starred also at Starred/Favorites.
Thanks to xet7 !
2025-11-06 03:06:16 +02:00
Lauri Ojansivu
46866dac85 Updated ChangeLog. 2025-11-06 02:46:52 +02:00
Lauri Ojansivu
c829c073cf Remove not working Bookmark menu option.
Thanks to xet7 !
2025-11-06 02:44:30 +02:00
Lauri Ojansivu
0772ca4036 Updated ChangeLog. 2025-11-06 02:36:10 +02:00
Lauri Ojansivu
581733d605 Fix Regression - Show calendar popup at set due date.
Thanks to xet7 !

Fixes #5978
2025-11-06 02:32:34 +02:00
Lauri Ojansivu
b02af27ac3 Updated ChangeLog. 2025-11-06 01:06:19 +02:00
Lauri Ojansivu
20af0a2ef5 Try to fix Edit Custom Fields button not working. Removed duplicate option from Boards Settings.
Thanks to xet7 !

Fixes #5988
2025-11-06 01:04:20 +02:00
Lauri Ojansivu
c58ab5b07d Updated ChangeLog. 2025-11-06 00:37:42 +02:00
Lauri Ojansivu
e5e711c938 Fix Card emoji issues.
Thanks to xet7 !

Fixes #5995
2025-11-06 00:35:49 +02:00
Lauri Ojansivu
42594abe4e Updated ChangeLog. 2025-11-06 00:30:08 +02:00
Lauri Ojansivu
0afbdc95b4 Feature: Workspaces, at All Boards page.
Thanks to xet7 !
2025-11-06 00:26:35 +02:00
Lauri Ojansivu
16a74bb748 Updated ChangeLog.
Some checks are pending
Docker / build (push) Waiting to run
Docker Image CI / build (push) Waiting to run
Release Charts / release (push) Waiting to run
Test suite / Meteor tests (push) Waiting to run
Test suite / Coverage report (push) Blocked by required conditions
2025-11-05 20:51:44 +02:00
Lauri Ojansivu
8711b476be Fix star board.
Thanks to xet7 !
2025-11-05 20:50:28 +02:00
Lauri Ojansivu
df9fba4765 Updated translations. 2025-11-05 20:26:29 +02:00
Lauri Ojansivu
7d27139aa9 Updated ChangeLog. 2025-11-05 20:25:07 +02:00
Lauri Ojansivu
e4638d5fbc Fixed sidebar migrations to be per-board, not global. Clarified translations.
Thanks to xet7 !
2025-11-05 20:22:56 +02:00
Lauri Ojansivu
bc5854dd29 Updated ChangeLog. 2025-11-05 19:04:47 +02:00
Lauri Ojansivu
ba49d4d140 Remove old translations and code not in use anymore.
Thanks to xet7 !
2025-11-05 19:03:21 +02:00
Lauri Ojansivu
71b7dcffb5 Updated ChangeLog. 2025-11-05 18:46:56 +02:00
Lauri Ojansivu
7713e613b4 Fix 8.16 Lists with no items are deleted every time when board is opened. Moved migrations to right sidebar.
Thanks to xet7 !

Fixes #5994
2025-11-05 18:44:48 +02:00
Lauri Ojansivu
91a0aa7387 Updated ChangeLog. 2025-11-05 17:08:52 +02:00
Lauri Ojansivu
fbd6b920ef Updated ChangeLog. 2025-11-05 17:08:10 +02:00
Lauri Ojansivu
1b25d1d572 Moved migrations from opening board to right sidebar / Migrations.
Thanks to xet7 !
2025-11-05 17:06:26 +02:00
Lauri Ojansivu
e93e72234c Updated ChangeLog. 2025-11-05 16:38:10 +02:00
Lauri Ojansivu
15d9b0ae3a Updated ChangeLog. 2025-11-05 16:38:03 +02:00
Lauri Ojansivu
550d87ac6c Fix 8.16: Switching Board View fails with 403 error.
Thanks to xet7 !
2025-11-05 16:35:29 +02:00
194 changed files with 15977 additions and 2396 deletions

View file

@ -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

View file

@ -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 }}

View file

@ -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)

View file

@ -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

View file

@ -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/

View file

@ -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:

View file

@ -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

View file

@ -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).

View file

@ -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

View file

@ -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 }

View file

@ -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'}}

View file

@ -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);

View file

@ -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%;

View file

@ -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)

View file

@ -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');

View file

@ -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

View file

@ -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) {

View file

@ -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 | &#x1F465;
| {{_ '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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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
| ➡️📦 | ➡️📦

View file

@ -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'),

View file

@ -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")

View 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'}}

View 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');

View file

@ -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

View file

@ -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

View file

@ -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(),
); );

View 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);
},
};

View file

@ -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) {

View file

@ -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 {

View file

@ -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();

View file

@ -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

View file

@ -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...

View file

@ -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

View file

@ -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)

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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": "Завършено",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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": "تمام شده",

View file

@ -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": "تمام شده",

View file

@ -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",

View file

@ -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",

View file

@ -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é",

View file

@ -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é",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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